2021年6月22日 星期二

Power Query_00查詢很慢的原因_重複查詢

           最近執行Power Query整理較多重查詢時發生明明檔案只有10幾M結果程式在跑時出現幾百M的狀況,原本應該很快的查詢反而花了幾分鐘以上,後來在官方說明發現原因了,在同一個檔案裡的來源(可能幾M~幾十M)經過不同查詢表多次引用來源,產生不同查詢結果,不同的結果可能又互相引用,這種情況下會造成查詢一直重複,而且會針對源頭資料一直跑,如果電腦不夠強可能就會當掉。(在初學Power Query時最好養成常常存檔,避免檔案當掉,步驟沒存到)

         我自己的解決方式是將源頭,還有部分查詢會被多次引用的查詢表另外存一個檔,這樣這部分的查詢不會在每次重新整理時再跑一次。


官方的資料標題是參考 Power Query 查詢,下面是官方說明資料:


請考慮數個查詢:Query1 的資料來源是 Web 服務,且其載入已停用。 Query2Query3 與 Query4 都參考 Query1,且其輸出會載入至資料模型。

Power Query多重查詢變慢原因說明
Power Query多重查詢變慢原因說明

         當資料模型重新整理時,通常會假設 Power Query 是擷取 Query1 的結果,且參考查詢會重複使用它。 此想法不正確。 事實上,Power Query 會分別執行 Query2、Query3 與 Query4

您可以想成 Query1 步驟內嵌在 Query2 中。 Query3 與 Query4 的情況也是如此。 下列圖表呈現更清楚的查詢執行方式。

Power Query多重查詢變慢原因說明
Power Query多重查詢變慢原因說明(拆解)

       Query1 會執行三次。 多次執行可能會導致資料重新整理緩慢,並對資料來源造成負面影響。


        在 Query1 中使用 Table.Buffer 函式,不會消除額外資料擷取。 此函式會在記憶體緩衝資料表。 而且,已緩衝的資料表只能在相同查詢執行中使用。 因此,在範例中,如果在執行 Query2 時緩衝 Query1,則在執行 Query3 與 Query4 時,會無法使用已緩衝的資料。 它們本身會再緩衝資料兩次。 (事實上,此結果可能會造成負面效能惡化,因為每個參考查詢都會緩衝該資料表。)

建議


一般來說,我們建議您參考查詢,以避免在整個查詢中重複邏輯。 不過,如此文章所述,此設計方法可能造成資料重新整理變慢,且使資料來源負擔過重。

我們建議您改為建立資料流程。 使用資料流程可以改善資料重新整理時間,並降低對資料來源的影響。

您可以設計資料流程來封裝來源資料和轉換。 因為資料流程是 Power BI 服務中的持續性資料存放區,所以其資料擷取速度很快。 因此,即使參考查詢導致多個資料流程要求,資料重新整理時間仍可獲得改善。

在此範例中,如果將 Query1 重新設計為資料流程實體,則 Query2Query3 與 Query4 可以將它作為資料來源使用。 若使用此設計,系統只會評估 Query1 的來源實體一次。


2021年6月17日 星期四

Power Query_00處理200萬筆資料

             Power Query在處理資料量基本上是沒限制,可以輕易處理上億筆資料,但電腦的配備最好強一點,如果要將資料轉到Excel還是會受限excel本身能顯示的資料列數1,048,576,如果是將資料以樞紐分析方式呈現,那就能輕易分析超過1,048,576筆資料。

         下面以期交所2020年的選擇權資料做示範,因為手上資料沒有超過100萬筆資料,所以用期交所資料做示範,以我的這台電腦彙整超過200萬筆資料,重新整理更新資料約2分鐘。(我的電腦算5年前規格不高,最近將記憶體更新8G)

         office 365版本比公司 中小企業版2016的Power Query功能多了不少,就學習國外網站例子,發現Power Query越新版本有些Code不支援舊版本(這是有些困擾...)。



1.選取資料夾


Power Query 選取資料夾_365版本
Power Query 選取資料夾_365版本



2.選取所有檔案


Power Query 選取資料夾_合併所有檔案_365版本
Power Query 選取資料夾_合併所有檔案_365版本


3.合併時會顯示範例檔案格式


Power Query 檔案範例_365版本
Power Query 檔案範例_365版本

4.確認一下資料量共240萬筆


Power Query 統計檔案資料量_365版本
Power Query 統計檔案資料量_365版本

用GPT修改M語法_以日期列處理

在2023年GPT開始使用時我就詢問過GPT,可能當時的GPT還不夠聰明,給予的答案無法運行,我認為原始的語法應該可以更聰明點,詢問過Power BI社群的人,但沒有人提供答案,終於在現在再度詢問GPT給予的答案與我思考的方向依樣,只是我懂得語法不多,透過GPT幫忙解答,我也學到...