首頁>Club>
Power Query如何進行合併查詢,和工作表函式VLOOKUP有什麼差異?
26
回覆列表
  • 1 # 精進Excel

    工作中,經常會用到合併查詢,比如使用VLOOKUP函式進行查詢匹配就屬於合併查詢的一種,當查詢條件有多個或者資料量非常大時,使用函式效率是非常低的,而透過Power Query進行合併查詢則非常簡單。

    如圖所示,我們在左側的【產品】表中匹配【單價】表中的產品單價資訊。

    Step1:將兩個表格匯入Query的查詢編輯器

    然後修改表的名稱,將第一個表修改為【產品】,第二個表修改為【單價】

    Step2:建立【合併查詢】

    選中【產品】表,在功能區中切換到【開始】選項卡,然後單擊【合併】→【合併查詢】選項,開啟查詢對話方塊。

    在【合併查詢】對話方塊中,上面的表示我們選中的表,下面需要透過組合框,選擇【單價】表,選擇之後分別選擇【產品】表和【單價】表中的”品名“欄位,作為合併查詢的匹配欄位。

    Step5:最後的結果為保留【產品】表中所有的專案,不能匹配到的產品單價顯示為null,可以匹配到的產品單擊顯示為實績單價。

    在資料量小的時候似乎合併查詢比VLOOKUP要複雜,但是隨著資料量的增加(或者匹配條件的增加),合併查詢的優勢就體現出來了,不信你試試十萬行資料的查詢匹配!

  • 2 # office高效辦公

    在Excel中要比對兩列資料,我們最常用的是vlookup函式,估計很多人已經對這個函式用得滾瓜爛熟了。

    既然vlookup函式如此好用,又有什麼理由去用PowerQuery呢?

    且聽我慢慢道來。

    如果只是偶爾一次的資料比對,請用vlookup函式

    最常見的是偶爾比對一下班級中有哪些學員沒報名參加某活動,或比對同一個客戶是否在多個表中出現。

    在這種情況下,比對只是偶爾發生。很顯然,用vlookup函式是最簡單最快捷的。

    如果經常需要比對資料,請用PowerQuery來比對

    比如每天都要比對兩個表乃至N個表,或者每週都要比對,這種重複工作就交給PowerQuery來處理好了。

    如果原始資料非常重要,需要儘量保證無損操作,還是建議用PowerQuery

    有時候原始資料太重要,我們要避免對原始資料的任何有損操作,以免誤操作之後破壞了原始資料,那麼,我還是建議用PowerQuery,因為PowerQuery可以對原始資料進行無損操作——連它所在的位置都不用動一分一毫,更不用說直接在它上面進行有損操作了。

    當然,用vlookup函式也能進行無損操作,比如複製原始資料到新的檔案,或用公式引用原始資料檔案的內容到新的檔案,但操作起來比較複雜。

    一個PowerQuery比對資料的例子

    由於vlookup的教程實在太多,我就不再拾人牙慧重複一遍了。直接給出一個PowerQuery比對資料的例子。

    假設:我們有一份《班級學員名單》,

    班級學員表名單

    還有一份《報名表》,

    報名表

    這是兩個獨立的Excel檔案,分別放在不同資料夾下。

    需求是找到哪些班級學員還沒報名,並且,把《報名表》裡不是本班的人標記出來進行下一步處理。

    首先,分別引入《班級學員表》和《報名表》兩個Excel檔案到PowerQuery。

    在彈出視窗中找到需要引入的《班級學員表》,然後直接點“編輯”,

    對它進行簡單操作:在“查詢設定”的“屬性”下修改“名稱”為“班級學員表“,免得和後面引入的報名表搞混;並將第一行提升為標題。

    同樣的操作,引入《報名表》。最後結果類似於下面這樣:

    PowerQuery中處理兩個表格資料比對的思路。

    當我們對兩個表格進行資料比對時,可以把這兩個表格看作兩個集合,這樣,對兩個表格的比較就變成尋找兩個集合的關係:

    我們把班級學員名單想象為左邊的綠色部分,報名表想象為放在右邊的藍色部分,這樣,沒報名的學員,我們可以簡單理解我們能看得見的綠色部分。在PowerQuery中,用Table.NestedJion()函式的"JoinKind.LeftAnti"引數來表示這種關係。

    新建一個空白查詢,直接輸入下面的程式碼即可得到未報名的學員:

    = Table.NestedJoin(班級學員表,{"姓名"},報名表,{"姓名"},"報名表",JoinKind.LeftAnti)

    那麼,反過來,Table.NestedJion()函式的"JoinKind.RightAnti"就表示只存在於右邊表(報名表)的元素:

    = Table.NestedJoin(班級學員表,{"姓名"},報名表,{"姓名"},"報名表",JoinKind.RightAnti)

    其實,我們可以透過變換【= Table.NestedJoin(班級學員表,{"姓名"},報名表,{"姓名"},"報名表",JoinKind.LeftAnti)】中“班級學員表”和“報名表”的位置,就直接得出了不在班級學員表中的報名人員:

    = Table.NestedJoin(報名表,{"姓名"},班級學員表,{"姓名"},"報名表",JoinKind.LeftAnti)

    載入資料到Excel表格。

    在彈出視窗中選擇載入到“表”:

    然後再重新命名下載入資料的sheet名稱,免得搞混,即完成。

    辛苦了一次,怎麼終生輕鬆呢?

    用PowerQuery處理表格資料比對的最大理由是可以辛苦一次,終生輕鬆,這樣遇到同樣的比對工作,就不用重複的步驟走了一遍又一遍了。

    假設我這個比對工作要天天做、週週做、月月做。

    現在我完成了今天的比對工作。

    明天,新的報名表來了,我要怎麼做呢?

    而班級學員表因為不會經常變動,所以我根本不用管它,保持在原位即可。就算有新增班級學員,我編輯該檔案將其新增進去即可。

    甚至還有更簡單的辦法:如果我有很多班級和報名表,每個班有個單獨的資料夾,下面有班級學員表和報名表,我只需要藉助PowerQuery的引數表格結合Excel的Cell()函式,建立來自於資料夾的資料來源。

    然後,每次需要某個班級的最新結果,就把該模型檔案丟到該班級所在的資料夾,開啟重新整理,即可獲取到最新結果。

    結語

    如果只是偶爾比對一下資料,直接用vlookup函式,便宜又實惠;如果經常要比對資料,那麼可以試試看“辛苦一次,終生輕鬆”的PowerQuery大法。

    當然,PowerQuery還有很多很多絕技。

  • 3 # 小豬佩奇在這裡呀

    只需要介面上選擇即可,根據需要有八種方式選擇。比v lookup簡單多了。不容易出錯。主要powerquery如果新新增或修改資料後,重新整理一下就自動更新了。vlookup還得重新拖拉一下。

  • 中秋節和大豐收的關聯?
  • 聚合收款碼和商家碼哪個好?