共用方式為


常見的問題

Power Query

保留排序

您可能會假設如果您排序數據,則任何下游作業會保留排序順序。

例如,如果您排序銷售數據表,讓每個商店最大的銷售先顯示,您可能會預期執行「移除重複專案」作業只會傳回每個商店的最高銷售。 事實上,這項作業可能運作正常。 不過,不保證此行為。

由於 Power Query 優化某些作業的方式,包括略過它們或將其卸除至數據源(這可以有自己的唯一排序行為),排序順序不保證會透過匯總(例如)、合併(Table.GroupTable.NestedJoin例如)或重複移除來保留(例如 )。Table.Distinct

有多種方式可以解決這個問題。 以下是一些建議:

  • 套用下游作業之後,執行排序。 例如,在分組數據列時,請先排序每個群組中的巢狀數據表,再套用進一步的步驟。 以下是示範此方法的一些範例 M 程式代碼: Table.Group(Sales_SalesPerson, {"TerritoryID"}, {{"SortedRows", each Table.Sort(_, {"SalesYTD", Order.Descending})}})
  • 在套用下游作業之前,請先緩衝處理數據(使用 Table.Buffer)。 在某些情況下,此作業會導致下游作業保留緩衝排序順序。
  • 使用 排名。 例如,您可以 Table.Distinct依據包含重複值的數據行排序、根據系結中斷器數據行 (例如 ), modified_date然後篩選,只保留排名 1 個數據列。

數據類型推斷

有時候 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

如果您遇到此錯誤,很可能是網路問題。 一般而言,第一個要檢查的人員是您嘗試連線之數據源的擁有者。 如果他們不認為他們是關閉連線的網關,那麼一路上可能會有一些東西(例如 Proxy 伺服器、中繼路由器/網關等等)。

不論這是否只以任何數據或較大的數據大小重現,路由上可能會有網路逾時。 如果只有較大的數據,客戶應該諮詢數據源擁有者以查看其 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 服務,您需要在 OS 上啟用其中一個加密套件。 您可以升級 Windows 版本或更新 Windows TLS 登錄,確保您的伺服器端點支援其中一個密碼。

若要確認您的伺服器符合安全性通訊協定,您可以使用 TLS 加密和掃描器工具來執行測試。 其中一個範例可能是 SSLLABS

客戶必須在 2021 年 3 月 1 日之前升級其伺服器。 如需設定 TLS 加密套件順序的詳細資訊,請參閱管理傳輸層安全性 (TLS)

憑證撤銷

即將推出的 Power BI Desktop 版本會在 SSL 鏈結中的任何憑證遺失證書吊銷狀態時,導致 Desktop 的 SSL 連線失敗。 這是目前狀態的變更,其中撤銷只會在明確撤銷憑證的情況下造成聯機失敗。 其他憑證問題可能包括無效的簽章和憑證到期。

由於有可能會移除撤銷狀態的設定,例如使用公司 Proxy 伺服器,我們將提供另一個選項來忽略沒有撤銷信息的憑證。 此選項允許在某些情況下移除撤銷資訊,但您不想完全降低安全性,以繼續運作的情況。

不建議這麼做,但使用者可以繼續完全關閉撤銷檢查。

錯誤:評估已取消

Power Query 會在停用背景分析時傳回「評估已取消」訊息,而使用者在查詢之間切換,或在查詢進行重新整理時關閉 查詢編輯器。

錯誤:索引鍵不符合數據表中的任何數據列

Power Query 可能會傳回錯誤的原因有很多,指出 索引鍵不符合數據表中的任何數據列。 發生此錯誤時,Mashup 引擎找不到其搜尋的數據表名稱。 此錯誤發生的原因包括:

  • 數據表名稱已變更,例如數據源本身。
  • 用來存取數據表的帳戶沒有足夠的許可權可讀取數據表。
  • 單一數據源可以有多個認證,在使用 個人雲端連線時,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.TransformList.GenerateList.Accumulate 等函式)。

Expression.Error:評估用盡記憶體,無法繼續

「記憶體不足」錯誤(或 OOM)可能是因為對非常大的數據表執行太多記憶體密集作業所造成。 例如,下列 M 程式代碼會產生 OOM,因為它會嘗試一次將十億個數據列載入記憶體中。

Table.Buffer(Table.FromList({1..1000000000}, Splitter.SplitByNothing()))

若要解決記憶體不足錯誤,請優化記憶體密集作業,例如排序、聯結、分組和相異,方法是確保它們摺疊至來源,或盡可能將其完全移除。 例如,排序通常是不必要的。

資料流程

取消數據流重新整理

有時候您會開始數據流重新整理,但在啟動數據流之後,您才意識到您想要在重新整理數據之前再變更一件事。 在此情況下,您必須等到重新整理完成為止。 由於程式已經在取得數據,且目前不支援更新工作區或環境中的數據表,因此停止重新整理。

我們確實計劃在未來新增取消數據流重新整理的支援。