Power Query
保留排序
您可能會假設,如果您排序資料,任何下游作業都會保留排序順序。
例如,如果您排序銷售資料表,以便先顯示每家商店的最大銷售額,您可能會預期執行「移除重複項」作業只會傳回每家商店的最高銷售額。 事實上,這種操作似乎有效。 不過,無法保證此行為。
由於 Power Query 優化特定作業的方式,包括略過這些作業或將其卸載至資料來源 (可以有自己唯一的排序行為),因此不保證透過彙總 (例如 Table.Group)、合併 (例如 Table.NestedJoin) 或重複移除 (例如 Table.Distinct)來保留排序順序。
有多種方法可以解決這個問題。 以下是一些建議:
- 在套用下游作業 之後 執行排序。 例如,將列分組時,請先排序每個群組中的巢狀表格,然後再套用進一步的步驟。 以下是一些示範此方法的範例 M 程式碼:
Table.Group(Sales_SalesPerson, {"TerritoryID"}, {{"SortedRows", each Table.Sort(_, {"SalesYTD", Order.Descending})}}) - 在套用下游作業之前,先緩衝資料 (使用
Table.Buffer)。 在某些情況下,此作業會導致下游作業保留緩衝排序順序。 - 使用 排名。 例如,您可以根據包含重複值的欄位進行排序,然後根據決勝資料行(例如
Table.Distinct)進行排名,接著篩選出僅保留排名為1的資料列,而不是使用modified_date。
資料類型推斷
有時 Power Query 可能會錯誤地偵測資料行的資料類型。 這是因為 Power Query 僅使用前 200 行數據來推斷數據類型。 如果前 200 列中的資料與第 200 列之後的資料有所不同,Power Query 最終可能會挑選錯誤的類型。 (請注意,不正確的類型不一定會產生錯誤。有時結果值根本不正確,使問題更難檢測。
例如,假設一欄在前 200 列中包含整數 (例如全部為零),但在第 200 列之後包含十進位數。 在此情況下,Power Query 會將資料行的資料類型推斷為整數 (Int64.Type)。 此推斷會導致任何非整數的小數部分被截斷。
或者想像一個直欄,其中包含前 200 列中的文字日期值,以及第 200 列之後的其他類型的文字值。 在此情況下,Power Query 會將資料行的資料類型推斷為 Date。 此推斷會導致非日期文字值被視為類型轉換錯誤。
由於類型偵測適用於前 200 列,但資料分析可以在整個資料集上運作,因此您可以考慮使用資料分析功能,在查詢編輯器中取得前 N 列以外的錯誤 (來自類型偵測或任意數目其他原因) 的早期指示。
遠端主機強制關閉連線
連線到各種 API 時,您可能會收到下列警告:
Data source error: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host
如果您遇到此錯誤,很可能是網路問題。 一般而言,最先檢查的人員是您嘗試連線的資料來源擁有者。 如果他們認為自己不是關閉連線的人,那麼在此過程中可能會發生某些問題(例如,代理伺服器、中間路由器/閘道器等)。
無論這僅以任何資料或更大的資料大小重現,都可能是路由上的某處存在網路逾時。 如果只有較大的資料,客戶應諮詢資料來源擁有者,以查看其 API 是否支援分頁,以便將請求分割成較小的區塊。 如果做不到這一點,則應遵循從 API 擷取資料的替代方法 (遵循資料來源最佳實務)。
TLS RSA 加密套件已遭到取代
2020 年 10 月 30 日開始生效,我們的伺服器不再建議使用下列加密套件。
- “TLS_RSA_WITH_AES_256_GCM_SHA384”
- “TLS_RSA_WITH_AES_128_GCM_SHA256”
- “TLS_RSA_WITH_AES_256_CBC_SHA256”
- “TLS_RSA_WITH_AES_128_CBC_SHA256”
下列清單是支援的密碼套件:
- “TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256”
- “TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384”
- “TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256”
- “TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384”
- “TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256”
- “TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384”
- “TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256”
- “TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384”
加密套件可用來加密訊息,以保護用戶端/伺服器與其他伺服器之間的網路連接。 我們正在移除上述加密套件清單,以符合目前的安全性通訊協定。 從 2021 年 3 月 1 日起,客戶只能使用我們的標準加密套件。
這些是您連線的伺服器必須支援的密碼套件,才能從 Power Query Online 或 Power BI 連線。
在 Power Query Desktop (Power BI、Excel) 中,我們不會控制您的密碼套件。 如果您嘗試連線到 Power Platform (例如 Power Platform 資料流程) 或 Power BI 服務,則需要在您的作業系統上啟用其中一個密碼套件。 您可以升級 Windows 版本或更新 Windows TLS 登錄,確保您的伺服器端點支援其中一個密碼。
若要驗證您的伺服器是否符合安全通訊協定,您可以使用 TLS 密碼和掃描器工具執行測試。 一個例子可能是 SSLLABS。
客戶必須在 2021 年 3 月 1 日之前升級其伺服器。 如需設定 TLS 加密套件順序的詳細資訊,請參閱管理傳輸層安全性 (TLS)。
憑證撤銷
當 SSL 鏈結中的任何憑證缺少撤銷狀態時,即將推出的 Power BI Desktop 版本會導致 Desktop 版本上的 SSL 連線出現故障。 這與目前狀態不同,撤銷只有在憑證被明確撤銷的情況下才會導致連線失敗。 其他憑證問題可能包括無效的簽章和憑證到期。
由於有些設定可能會移除撤銷狀態,例如公司 Proxy 伺服器,因此我們將提供另一個選項來忽略沒有撤銷資訊的憑證。 此選項允許在某些情況下刪除撤銷資訊的情況,但您不想完全降低安全性以繼續工作。
不建議這樣做,但使用者仍然可以完全關閉撤銷檢查。
錯誤:評估已取消
Power Query 會在停用背景分析,且使用者在查詢之間切換,或在查詢重新整理過程中關閉查詢編輯器時,傳回訊息「評估已取消」。
錯誤:鍵值不符合資料表中的任何資料列
Power Query 可能會因為多種原因而傳回錯誤,指示鍵不符合資料表中的任何資料列。 發生此錯誤時,混搭引擎無法找到它正在搜尋的表格名稱。 可能發生此錯誤的原因包括:
- 表格名稱已變更,例如在資料來源本身中。
- 用來存取資料表的帳戶沒有足夠的權限來讀取資料表。
- 單一資料來源可以有多組認證,但
在使用個人雲端連線時,Power BI 服務不支援 。 例如,當資料來源是雲端資料來源,且使用多個帳戶以不同的認證同時存取資料來源時,可能會發生此錯誤。 如果資料來源是內部部署,您必須使用內部部署資料閘道。
限制:使用 Windows 驗證時,閘道機需加入網域
使用 Windows 驗證來搭配內部部署閘道時,閘道機器必須加入網域。 這適用於使用「透過閘道進行 Windows 驗證」設定的任何連線。 用來存取資料來源的 Windows 帳戶可能需要 Windows 目錄和閘道安裝中共用元件的讀取權。
限制:Power BI 服務不支援跨租用戶 OAuth2 重新整理
如果您想要使用 OAuth2 從 Power BI 服務連線到資料來源,資料來源必須歸屬於同一租戶與 Power BI 服務。 目前,OAuth2 不支援多租用戶連線案例。
限制:Power BI 服務不支援自訂 AD FS 驗證端點
Power BI 服務不支援使用自訂 Active Directory 同盟服務 (AD FS) 驗證端點的功能。 使用者可能會遇到下列錯誤: 資源所報告的權杖服務不受信任。
限制:不支援來賓帳戶
目前不支援使用租戶的來賓帳戶,透過 Power Query 連接器連接到資料。
Expression.Error:評估導致堆疊溢位,無法繼續
堆疊溢位錯誤可能是由 M 程式碼中的錯誤所造成。 例如,下列函式會產生堆疊溢位,因為它會重複回呼本身,而沒有任何類型的結束條件。 像這樣呼叫自己的函數稱為「遞歸」函數。
let f = (x) => @f(x + 1) in f(0)
以下是解決 M 程式碼中堆疊溢位的一些常見方法。
- 請確定遞迴函數在達到預期結束條件時實際終止。
- 以反覆專案取代遞迴 (例如,使用 List.Transform、 List.Generate 或 List.Accumulate 等函式)。
Expression.Error:記憶體耗盡導致執行失敗,無法繼續。
「記憶體不足」錯誤 (或 OOM) 可能是因為對非常大的資料表執行太多記憶體密集型作業所造成。 例如,下列 M 程式碼會產生 OOM,因為它會嘗試一次將十億個資料列載入記憶體。
Table.Buffer(Table.FromList({1..1000000000}, Splitter.SplitByNothing()))
若要解決記憶體不足錯誤,請最佳化記憶體密集型作業,例如排序、聯結、分組和相異,方法是確保它們折疊到來源,或盡可能將其完全刪除。 例如,排序通常是不必要的。
當私人端點設定為儲存體時,Power Query Online 無法透過公用端點連線
設定儲存體帳戶的私人端點時,Power Query Online 一律會解析私人連結位址,而且無法透過公用因特網連線,即使私人端點設定中的公用存取設定為 [允許]。
發生此行為的原因是私人端點優先於公用連線。 因此,任何在沒有閘道的情況下連線的嘗試都會失敗。
執行特定字元操作時的錯誤對話框
在 Power Query 中使用韓文 IME 鍵盤時,當你在進階編輯器、自訂欄位對話框或公式列輸入某些特殊字元時,可能會跳出錯誤對話框。
此問題影響 Power BI Desktop 與 Excel 中的 Power Query 編輯器。 它不會影響 Power Query Online(資料流)。
要解決這個問題,請在 Power Query 編輯器中停用 M Intellisense。
Dataflows
取消資料流的同步更新
有時您會啟動資料流程重新整理,但在啟動之後,您會意識到您想要在重新整理資料之前再變更一件事。 在這種情況下,您必須等到刷新完成。 目前不支援中途停止重新整理,因為程式已經在取得資料並更新工作區或環境中的資料表。
我們確實計劃在未來新增取消資料流程重新整理的支援。