處理 Power Query 中的錯誤
在 Power Query 中,您可以遇到兩種類型的錯誤:
- 步驟層級錯誤
- 數據格層級錯誤
本文提供如何修正每個層級可能找到的最常見錯誤的建議,並說明每個層級的錯誤原因、錯誤訊息和錯誤詳細數據。
步驟層級錯誤
步驟層級錯誤可防止查詢載入,並在黃色窗格中顯示錯誤元件。
- 錯誤原因:冒號之前的第一個區段。 在上述範例中,錯誤原因為 Expression.Error。
- 錯誤訊息:原因之後的區段。 在上述範例中,錯誤訊息是 找不到數據表的數據行 'Column'。
- 錯誤詳細數據:詳細數據:字串後面的區段。 在上述範例中,錯誤詳細數據是 Column。
常見的步驟層級錯誤
在所有情況下,我們建議您仔細查看錯誤原因、錯誤訊息和錯誤詳細數據,以瞭解造成錯誤的原因。 如果有的話,您可以選取 [移至錯誤 ] 按鈕,以檢視發生錯誤的第一個步驟。
找不到來源 - DataSource.Error
當使用者無法存取數據源、用戶沒有正確的認證來存取數據源,或來源已移至不同位置時,通常會發生此錯誤。
範例:您有位於磁碟驅動器 D 中的文字圖格查詢,並由使用者 A 建立。使用者 A 會與無法存取磁碟驅動器 D 的使用者 B 共享查詢。當此人嘗試執行查詢時,他們會收到 DataSource.Error ,因為其環境中沒有磁碟驅動器 D。
可能的解決方案:您可以將文字檔的檔案路徑變更為兩位使用者都可以存取的路徑。 身為使用者 B,您可以將檔案路徑變更為相同文字檔的本機複本。 如果錯誤窗格中有 [編輯設定] 按鈕可用,您可以選取它並變更檔案路徑。
找不到數據表的數據行
當步驟直接參考查詢中不存在的數據行名稱時,通常會觸發此錯誤。
範例:您有文本文件的查詢,其中其中一個數據行名稱為 Column。 在您的查詢中,您有將該數據行重新命名為 Date 的步驟。 但是原始文本檔中有變更,而且它不再有名稱 為 Column 的數據行標題,因為它已手動變更為 Date。 Power Query 找不到名為 Column 的數據行標題,因此無法重新命名任何數據行。 它會顯示下圖所示的錯誤。
可能的解決方案:此案例有多個解決方案,但它們全都取決於您想要做什麼。 在此範例中,由於正確的 Date 數據 行標頭已經來自文字檔,因此您可以移除重新命名數據行的步驟。 這可讓您的查詢在沒有此錯誤的情況下執行。
其他常見的步驟層級錯誤
在多個數據源之間合併或合併數據時,您可能會收到 Formula.Firewall 錯誤,例如下圖所示的錯誤。
此錯誤可能是因為許多原因所造成,例如數據源之間的數據隱私權等級,或這些數據源的合併或合併方式。 如需如何診斷此問題的詳細資訊,請移至 數據隱私權防火牆。
數據格層級錯誤
數據格層級錯誤不會防止查詢載入,但會將錯誤值 顯示為儲存格中的 Error 。 選取資料格中的空格元會在資料預覽下方顯示錯誤窗格。
注意
數據分析工具可協助您更輕鬆地使用數據行品質功能來識別數據格層級錯誤。 詳細資訊: 數據分析工具
處理數據格層級的錯誤
遇到任何數據格層級錯誤時,Power Query 會提供一組函式,藉由移除、取代或保留錯誤來處理它們。
在接下來的各節中,提供的範例將會使用與起點相同的範例查詢。 在此查詢中,您有一個 Sales 數據行,其具有一個數據格,且發生轉換錯誤所造成的錯誤。 該儲存格內的值為 NA,但當您將該資料行轉換成整數 Power Query 時,無法將 NA 轉換成數位,因此會顯示下列錯誤。
拿掉錯誤
若要移除 Power Query 中含有錯誤的數據列,請先選取包含錯誤的數據行。 在 [首頁] 索引標籤的 [減少數據列] 群組中,選取 [移除數據列]。 從下拉功能表中,選取 [ 移除錯誤]。
該作業的結果會提供您要尋找的數據表。
取代錯誤
如果您想要以固定值取代錯誤,而不是移除具有錯誤的數據列,您也可以這麼做。 若要取代有錯誤的數據列,請先選取包含錯誤的數據行。 在 [轉換] 索引標籤的 [任何數據行] 群組中,選取 [取代值]。 從下拉功能表中,選取 [ 取代錯誤]。
在 [ 取代錯誤 ] 對話框中,輸入值 10,因為您想要以值 10 取代所有錯誤。
該作業的結果會提供您要尋找的數據表。
保留錯誤
即使您未修正錯誤,Power Query 也可以作為良好的稽核工具,以識別任何發生錯誤的數據列。 這是保留錯誤很有説明的地方。 若要保留有錯誤的數據列,請先選取包含錯誤的數據行。 在 [首頁] 索引標籤的 [減少數據列] 群組中,選取 [保留數據列]。 從下拉功能表中,選取 [ 保留錯誤]。
該作業的結果會提供您要尋找的數據表。
常見的數據格層級錯誤
如同任何步驟層級錯誤,我們建議您仔細查看數據格層級所提供的錯誤原因、錯誤訊息和錯誤詳細數據,以瞭解造成錯誤的原因。 下列各節將討論Power Query 中一些最常見的數據格層級錯誤。
資料類型轉換錯誤
變更數據表中數據行的數據類型時,通常會觸發。 數據列中找到的某些值無法轉換成所需的數據類型。
範例:您有一個查詢,其中包含名為 Sales 的數據行。 該數據行中的一個儲存格具有 NA 做為儲存格值,而其餘的數據格則以整數做為值。 您決定將數據行的數據類型從文字轉換成整數,但具有 NA 值的儲存格會造成錯誤。
可能的解決方案:識別錯誤的數據列之後,您可以修改數據源來反映正確的值,而不是 NA,或者您可以套用 Replace 錯誤作業來提供任何造成錯誤的 NA 值值。
作業錯誤
嘗試套用不支持的作業時,例如將文字值乘以數值,就會發生錯誤。
範例:您想要建立包含 Sales 數據行值串連的文字字串,以建立查詢的自定義數據行。 發生錯誤的原因是串連作業只支援文字數據行,而不是數值數據行。
可能的解決方案:建立此自定義數據行之前,請將 Sales 數據行的資料類型變更為文字。
顯示為錯誤的巢狀值
使用包含巢狀結構化值的數據時(例如數據表、清單或記錄),您有時可能會遇到下列錯誤:
Expression.Error: We cannot return a value of type {value} in this context
Details: In the past we would have returned a text value of {value}, but we now return this error. Please see https://go.microsoft.com/fwlink/?linkid=2099726 for more information.
這些錯誤通常會因為下列兩個原因而發生:
- 當數據隱私權防火牆緩衝數據源時,巢狀非純量值會自動轉換成錯誤。
- 當以
Any
數據類型定義的數據行包含非純量值時,這類值會在載入期間回報為錯誤(例如 Excel 中的活頁簿或 Power BI Desktop 中的數據模型)。
可能的解決方案:
- 拿掉包含錯誤的數據行,或為這類資料行設定非
Any
數據類型。 - 將涉及之數據源的隱私權層級變更為允許合併的數據源,而不需緩衝處理。
- 在合併之前將數據表壓平,以排除包含巢狀結構化值的數據行(例如數據表、記錄或清單)。