在 Power BI 中使用 DirectQuery 連線 至 SAP HANA 數據源

您可以使用 DirectQuery 直接連線到 SAP HANA 數據源。 連線到 SAP HANA 時有兩個選項:

  • 將 SAP HANA 視為多維度來源(預設值): 在此情況下,當 Power BI 連接到 SAP Business Warehouse 或 Analysis Services 等其他多維度來源時,行為會類似。 當您使用此設定連線到 SAP HANA 時,會選取單一分析或計算檢視,並在欄位清單中提供該檢視的所有量值、階層和屬性。 建立視覺效果時,匯總數據一律會從 SAP HANA 擷取。 這項技術是建議的方法,而且是 SAP HANA 上新 DirectQuery 報表的預設值。

  • 將 SAP HANA 視為關係型來源: 在此情況下,Power BI 會將 SAP HANA 視為關係型來源。 這種方法提供更大的彈性。 請務必謹慎使用此方法,以確保量值如預期般匯總,並避免效能問題。

聯機方法取決於全域工具選項,其設定方式是選取 [檔案>選項和設定],然後選取 [選項>DirectQuery],然後選取 [將 SAP HANA 視為關係型來源] 選項,如下圖所示。

Screenshot of the Options dialog, showing the DirectQuery options.

將 SAP HANA 視為關係型來源的選項,可控制透過 SAP HANA 使用 DirectQuery 用於任何 報表的方法。 它不會影響目前報表中任何現有的 SAP HANA 連線,也不會對已開啟的任何其他報表中的連線產生任何影響。 因此,如果選項目前未核取,則在使用 [取得數據] 將新的連線新增至 SAP HANA 時,該聯機會將 SAP HANA 視為多維度來源。 不過,如果開啟不同的報表也會連線到 SAP HANA,則該報表會根據建立時所設定的選項繼續運作。 此事實表示任何連線到 2018 年 2 月之前所建立 SAP HANA 的報告都會繼續將 SAP HANA 視為關係型來源。

這兩種方法構成不同的行為,而且無法將現有的報表從某個方法切換到另一種方法。

將 SAP HANA 視為多維度來源 (預設值)

SAP HANA 的所有新連線預設都會使用此連線方法,將 SAP HANA 視為多維度來源。 若要將 SAP HANA 的連線視為關係型來源,您必須選取 [檔案>選項和設定>選項],然後核取 [直接查詢>將 SAP HANA 視為關係型來源] 底下的方塊。

當以多維度來源身分連線到 SAP HANA 時,適用下列考慮:

  • 在 [ 取得數據導覽器] 中,可以選取單一 SAP HANA 檢視。 您無法選取個別量值或屬性。 連線時未定義任何查詢,這與匯入數據不同,或在將 SAP HANA 視為關係型來源時使用 DirectQuery 時。 此考慮也表示您無法在選取此連線方法時直接使用 SAP HANA SQL 查詢。

  • 選取檢視的所有量值、階層和屬性都會顯示在欄位清單中。

  • 在視覺效果中使用量值時,會查詢 SAP HANA,以擷取視覺效果所需匯總層級的量值。 處理非加總量值時,例如計數器和比率,所有匯總都是由 SAP HANA 執行,Power BI 不會再執行任何匯總。

  • 若要確保一律可以從 SAP HANA 取得正確的匯總值,必須施加某些限制。 例如,您無法新增匯出數據行,或合併相同報表內多個SAP HANA 檢視的數據。

將 SAP HANA 視為多維度來源並不會提供替代關係型方法所提供的更大彈性,但更簡單。 此方法也會在處理更複雜的 SAP HANA 量值時確保正確的匯總值,而且通常會導致更高的效能。

[ 欄位 ] 清單包含 SAP HANA 檢視中的所有量值、屬性和階層。 請注意下列使用這個連接方法時套用的行為:

  • 默認會隱藏至少一個階層中包含的任何屬性。 不過,從欄位清單的操作功能表中選取 [隱藏 檢視],即可視需要看到它們。 視需要從相同的操作功能表中顯示它們。

  • 在 SAP HANA 中,可以定義屬性以使用另一個屬性作為其標籤。 例如,Product、具有值 、23等的 1ProductName 可以使用 ProductName,並將值 BikeShirtGloves等等當做其標籤使用。 在此情況下,欄位清單中會顯示單一欄位 Product ,其值為標籤 BikeShirtGloves等,但依排序方式,以及索引鍵值 123所決定的唯一性。 也會建立隱藏數據行 Product.Key ,必要時允許存取基礎索引鍵值。

在連線時,基礎 SAP HANA 檢視中定義的任何變數都會顯示,而且可以輸入必要的值。 稍後可以從功能區選取 [轉換數據],然後從顯示的下拉功能表中編輯參數,即可變更這些值。

允許的模型化作業比使用 DirectQuery 時的一般案例更嚴格,因為必須確保一律可以從 SAP HANA 取得正確的匯總數據。 不過,您仍然可以進行許多新增和變更,包括定義量值、重新命名和隱藏字段,以及定義顯示格式。 重新整理時會保留所有這類變更,並套用對 SAP HANA 檢視所做的任何非衝突變更。

其他模型限制

使用 DirectQuery 連線到 SAP HANA 時的其他主要模型限制(視為多維度來源)有下列限制:

  • 不支援匯出數據行: 無法建立匯出數據行。 這個事實也表示無法使用建立匯出數據行的群組和叢集。
  • 量值的其他限制: 在量值中使用的DAX運算式有其他限制,以反映SAP HANA所提供的支援層級。
  • 不支援定義關聯性: 報表內只能查詢單一檢視,因此不支援定義關聯性。
  • 無數據檢視:數據檢視通常會在數據表中顯示詳細數據層級數據。 由於 OLAP 來源的本質,例如 SAP HANA,此檢視無法透過 SAP HANA 取得。
  • 數據行和量值詳細數據是固定的: 欄位清單中看到的數據行和量值清單是由基礎來源所修正,而且無法修改。 例如,您無法刪除資料行,也無法變更其數據類型。 不過,它可以重新命名。
  • DAX 中的其他限制: DAX 有其他限制可用於量值定義,以反映來源的限制。 例如,您無法在數據表上使用聚合函數。

其他視覺效果限制

使用 DirectQuery 連線到 SAP HANA 時,視覺效果有限制(視為多維度來源):

  • 沒有數據行的匯總: 您無法變更視覺效果上數據行的匯總,而且一律 不會摘要

將 SAP HANA 視為關係型來源

選擇以關係型來源身分連線到 SAP HANA 時,會有一些額外的彈性可供使用。 例如,您可以建立匯出數據行、包含來自多個 SAP HANA 檢視的數據,以及建立結果數據表之間的關聯性。 不過,將 SAP HANA 視為多維度來源時的行為有差異,特別是當 SAP HANA 檢視包含非累加量值時,例如相異計數或平均值,而不是簡單的總和,與針對 SAP HANA 執行的查詢效率相關。

一開始,當取得數據或 Power Query 編輯器 執行匯總時,釐清關係型來源的行為,例如 SQL Server,就很有用。 在下列範例中,Power Query 編輯器 中定義的查詢會依 ProductID 傳回平均價格。

Diagram showing a query defined in Power Query Editor that returns the average price by Product ID.

如果數據正匯入 Power BI 與使用 DirectQuery,則會產生下列情況:

  • 數據會匯入 Power Query 編輯器 中所建立查詢所定義的匯總層級。 例如,依產品的平均價格。 這個事實會產生數據表,其中包含兩個數據行 ProductIDAveragePrice ,可用於視覺效果。
  • 在視覺效果中,任何後續匯總,例如 Sum、AverageMin 和其他匯總,都是透過該匯入的數據來執行。 例如,在視覺效果上加入 AveragePrice 預設會使用 Sum 匯總,並且會針對每個 ProductID 傳回 AveragePrice 的總和,在此範例中為 13.67。 這同樣適用於視覺效果上使用的任何替代聚合函數,例如 MinAverage。 例如,AveragePriceAverage 會傳回 6.66、4 和 3 的平均值,其等於 4.56,而不是基礎表中六筆記錄的 Price 平均值,也就是 5.17。

如果使用相同關係來源的 DirectQuery 而不是匯入,則會套用相同的語意,結果會完全相同:

  • 假設有相同的查詢,邏輯上完全相同的數據會呈現至報告層,即使實際上不會匯入數據也一樣。

  • 在視覺效果中,任何後續匯總,例如 SumAverageMin,會再次從查詢執行該邏輯數據表。 同樣地,包含 AveragePrice Average視覺效果會傳回相同的 4.56。

當連線被視為關係型來源時,請考慮 SAP HANA。 Power BI 可以在 SAP HANA 中使用分析檢視和計算檢視,這兩者都可以包含量值。 然而,目前 SAP HANA 的方法遵循與本節先前所述的相同原則:取得數據或 Power Query 編輯器 中定義的查詢會決定可用的數據,然後視覺效果中任何後續匯總都會超過該數據,而且同樣適用於 Import 和 DirectQuery。 不過,鑒於 SAP HANA 的性質,初始 [取得數據] 對話框或 Power Query 編輯器 中定義的查詢一律是匯總查詢,而且通常包含 SAP HANA 檢視所定義實際匯總的量值。

與上一個 SQL Server 範例相等的是,有一個 SAP HANA 檢視,其中包含標識碼、ProductID、DepotID,以及包含 AveragePrice 的量值,這些量值定義在檢視中定義為[平均價格]。

如果在 [取得數據] 體驗中,所做的選取專案是 ProductIDAveragePrice 量值,則會定義檢視的查詢,要求該匯總數據。 在先前的範例中,為了簡單起見,會使用與 SAP HANA SQL 完全語法不符的虛擬 SQL。 然後,視覺效果中定義的任何進一步匯總會進一步匯總這類查詢的結果。 同樣地,如先前針對 SQL Server 所述,此結果適用於 Import 和 DirectQuery 案例。 在 DirectQuery 案例中,從 Get Data 或 Power Query 編輯器 的查詢會用於傳送至 SAP HANA 的單一查詢內的子選擇中,因此實際上並不是所有數據都會在進一步匯總之前讀取的數據。

在透過 SAP HANA 使用 DirectQuery 時,所有這些考慮和行為都需要下列重要考慮:

  • 每當 SAP HANA 中的量值不是加總時,就必須注意視覺效果中執行的任何進一步匯總,例如,不是簡單的 SumMinMax

  • [取得數據] 或 [Power Query 編輯器] 中,只應包含必要的數據行來擷取必要的數據,以反映結果必須是可傳送至 SAP HANA 之合理查詢的事實。 例如,如果選取了數十個數據行,並認為後續視覺效果上可能需要這些數據行,則即使針對 DirectQuery,簡單視覺效果也表示子選取中使用的匯總查詢包含數十個數據行,通常執行效能不佳。

在下列範例中,選取 [取得數據] 對話框中的五個數據行(CalendarQuarter、ColorLastName、ProductLineSalesOrderNumber),以及量值 OrderQuantity,表示稍後建立包含 Min OrderQuantity 的簡單視覺效果會導致 SAP HANA 的下列 SQL 查詢。 陰影是子選取專案,其中包含 Get Data / Power Query 編輯器 的查詢。 如果這個子選擇提供高基數結果,則產生的 SAP HANA 效能可能會很差。

Screenshot of a query example, showing the SQL query to SAP HANA.

基於此行為,我們建議選取 [取得數據] 或 [Power Query 編輯器] 中選取的專案受限於所需的專案,同時仍會產生合理的 SAP HANA 查詢。

最佳作法

對於連線到 SAP HANA 的這兩種方法,使用 DirectQuery 的建議也適用於 SAP HANA,特別是與確保良好效能相關的建議。 如需詳細資訊,請參閱 在Power BI中使用 DirectQuery。

考量與限制

下列清單描述所有未完全支援的 SAP HANA 功能,或使用 Power BI 時的行為不同。

  • 父子階層: Power BI 中看不到父子階層。 這是因為 Power BI 會使用 SQL 介面存取 SAP HANA,且無法使用 SQL 完全存取父子階層。
  • 其他階層元數據: 階層的基本結構會顯示在Power BI中,不過有些階層元數據,例如控制不完全階層的行為,沒有任何作用。 同樣地,這是因為 SQL 介面所施加的限制。
  • 使用 SSL 進行 連線:您可以使用匯入和多維度與 TLS 進行連線,但無法連線到設定為使用關係型連接器 TLS 的 SAP HANA 實例。
  • 支援屬性檢視: Power BI 可以連線到分析和計算檢視,但無法直接連線到屬性檢視。
  • 支援 Catalog 物件: Power BI 無法連線到 Catalog 物件。
  • 發佈后變更為 [變數]:在發佈報表之後,您無法直接在 Power BI 服務 中變更任何 SAP HANA 變數的值。

已知問題

下列清單說明使用Power BI 連線到 SAP HANA (DirectQuery) 時的所有已知問題。

  • 查詢計數器和其他量值時發生 SAP HANA 問題: 如果連接到分析檢視,以及計數器量值和其他一些比例量值,則會包含在相同的視覺效果中,從 SAP HANA 傳回不正確的數據。 SAP 附注2128928涵蓋此問題(查詢匯出數據行和計數器時非預期的結果)。 在此情況下,比率量值不正確。

  • 來自單一 SAP HANA 數據行的多個 Power BI 數據行: 對於某些計算檢視,其中 SAP HANA 數據行用於多個階層中,SAP HANA 會將數據行公開為兩個不同的屬性。 此方法會導致在Power BI中建立兩個數據行。 不過,這些數據行預設為隱藏,而且所有涉及階層的查詢或數據行都會正確運作。

如需 DirectQuery 的詳細資訊,請參閱下列資源: