行有餘力,則以學文。
你重新整理 Excel 或者 Power BI 報表模型的時候,一定也遇到過這樣的錯誤:
其實這裡的錯誤提示也很明顯。那就是你的資料模型裡找不到訂單日期這一列。
你建立模型的時候也許是存在這一列的,但是由於資料不斷在更新,訂單日期列在新的資料來源中也許叫日期、Date等新的列名。這種情況下就會出現重新整理錯誤。
出現錯誤的查詢會出現黃色的感嘆號標識
這個問題的解決辦法也很簡單,單擊轉換資料進入 PQ 編輯器,在編輯器中根據錯誤提示定位錯誤的查詢,然後將使用了該列名的查詢步驟刪掉就行了。
示例中使用了列名的步驟是
「更改的型別
」,這是 PQ 自動檢測資料型別,並新增的更改資料型別的步驟。
雖然大部分時候 PQ 對資料型別的檢測都是正確的。但是我還是建議大家將這個功能關閉,因為大部分時候我們的模型錯誤都是來自於對固定列名的引用。
↑
檔案>選項
>資料載入,勾選從不檢測未結構化的列型別和標題
勾選以上選項,資料載入到 PQ 後,就不會每次都自動檢測並更改資料型別了。
無論你是選擇直接刪除
「更改的型別
」,還是關閉自動檢測資料型別,這只是緩兵之計,因為 Power BI 的資料必須有正確的資料型別才能順利計算。
我們可以藉助 M 函式來更靈活地處理這種問題。
我們都知道 Power Query 可以將使用者單擊介面功能的步驟轉換成 M 程式碼,這是 PQ 實現資料處理流程自動化的前提。
但是它在轉換時更傾向於選擇固定的名字而不是相對的位置,
比如更改資料型別時,它轉換成的 M 程式碼是對錶中列名的引用,而不是列位置的引用。
「更改的型別
」
步驟中的程式碼如下:
既然訂單日期這一列,有可能會存在不同的列名,那麼我們可以考慮將步驟中的對訂單日期列的名字的固定引用,改成是對其位置的引用。
(這裡存在一個假設條件:訂單日期列,列名名稱會變但是保持在第一列)
接下來我們就來看看如何透過 M 程式碼來獲取列的位置。
點選
「提升的標題
」回到出現錯誤的上一步驟。
在 PQ 中每一個步驟都可以透過對步驟名的引用來獲取該步驟的結果。單擊編輯欄中的
fx,在查詢中插入新的步驟
公式編輯欄中輸入
「= 提升的標題
」標題時,返回的結果就是上一步驟的表。
在公式
「= 提升的標題
」
前新增 M 函式
「
= Table。ColumnNames(提升的標題)
」
,該函式返回的是表的每一列的名字,並且返回結果是列表。
Table。ColumnNames(table
as
table)
as
list
進一步想要得到列表的第一個取值,輸入
「
= Table。ColumnNames(提升的標題){0}
」
將
「更改的型別
」
中 對訂單日期名稱的絕對引用改成是上面的 M 程式碼就實現了對第一列的引用了。
這時候只要你的第一列儲存的是日期列,無論列名稱是日期、訂單日期、date、Date 或者 order date,重新整理時都不會提示找不到列的錯誤了。
PQ 在將使用者操作轉換成 M 程式碼時候,傾向於使用絕對引用,大部分時候,這個特性是導致資料重新整理錯誤的原因。
我們將 PQ 對列名、表名或者步驟名的引用,稱為
絕對引用
,而對位列位置、表位置的引用稱為
相對引用
。絕對引用缺乏靈活性,容易導致錯誤,而相對引用可以實現更靈活和穩定的資料處理。
Power BI人力資源分析:視覺化圖表設計
這個神奇的網站,可以一鍵下載很多好看的模板
這些資料視覺化工具,你用過哪個