多維度模型的DAX
適用於: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium
本文說明 Power BI 如何使用 DAX(數據分析表達式)查詢,針對 SQL Server Analysis Services 中的多維度模型進行報告。
在過去,報告應用程式會使用 MDX(多維度表示式)作為多維度資料庫的查詢語言。 MDX 已針對 Excel 中的數據透視表和其他以多維度商務語意為目標的報表應用程式等常見視覺模式優化。 從 SQL Server 2012 SP1 開始,Analysis Services 支援針對多維度和表格式模型使用 DAX 和 MDX。 不過,DAX 原本是針對表格式數據模型所設計。 雖然 DAX 被認為更容易使用,但它也更著重於更簡單的數據視覺效果,例如報表和儀錶板中的數據表、圖表和地圖。 Power BI 會使用 DAX 來查詢表格式和多維度模型,。
因為 DAX 主要是針對表格式模型所設計,因此針對多維度模型使用 DAX 時,必須瞭解一些有趣且實用的對應和條件約束。
相容性
Power BI 會使用 DAX 來查詢 SQL Server 2016 和更新版本的 Enterprise 或 Standard 版本中的 Analysis Services 多維度模型。 SQL Server 2012 和 SQL Server 2014 Enterprise 或 Business Intelligence 版本也受到支持,不過,這些版本現在已脫離主流支援。
特徵
DAX 不是 MDX 的子集。 DAX 最初設計成類似於 Excel 公式語言。 在表格式模型中,DAX 會針對由數據表和關聯性所組成的關係型數據存放區使用。 DAX 也可用來建立自定義量值、匯出數據行和數據列層級安全性規則。
除了做為計算語言之外,DAX 也可以用來執行查詢。 本文說明 DAX 查詢如何針對多維度模型運作。
MDX 與 DAX 之間的互動
DAX 運算式僅支援在表格式模型中。 您無法在多維度模型中使用 DAX 運算式所建立的量值。 多維度模型的 DAX 查詢可以參考該模型中定義的量值或其他計算,但這些計算必須使用 MDX 語言撰寫。 當需要 MDX 運算式,反之亦然時,無法使用 DAX 運算式,而 PATH 等某些 DAX 函式完全不適用於多維度模型化。
DAX 語法
DAX 公式的語法與 Excel 公式的語法非常類似,並使用函數、運算符和值的組合。 若要深入瞭解個別函式的語法,請參閱 DAX 函式參考。
多維度到表格式對象對應
Analysis Services 提供多維度模型的表格式模型元數據表示。 然後,多維度模型中的物件會以表格式物件表示在Power BI 中。 此對應會使用 DISCOVER_CSDL_METADATA 架構數據列集向 Power BI 公開。
對象對應
多維度物件 | 表格式物件 |
---|---|
立方體 | 型 |
Cube 維度 | 桌子 |
維度屬性 (索引鍵,名稱) | 列 |
量值群組 | 桌子 |
量 | 量 |
不含量值群組的量值 | 在名為 Measure 的數據表中 |
量值群組 Cube 維度關聯性 | 關係 |
透視 | 透視 |
KPI | KPI |
使用者/Parent-Child 階層 | 等級制度 |
顯示資料夾 | 顯示資料夾 |
量值、量值群組和 KPI
多維度 Cube 中的量值群組會顯示在 Power BI 欄位清單中,做為具有計算機圖示的數據表。
量值群組內的量值會顯示為量值。 如果計算量值沒有相關聯的量值群組,則會分組在稱為 Measure 的特殊數據表下。
為了協助簡化更複雜的多維度模型,模型作者可以在要位於顯示資料夾內的 Cube 中定義一組量值或 KPI。 Power BI 可以顯示資料夾中的顯示資料夾和量值和 KPI。
量值群組中的量值和 KPI
量值做為變體
多維度模型中的量值是變體。 這表示量值不是強型別,而且可以有不同的數據類型。 例如,在下圖中,根據預設,財務報告數據表中的 Amount 量值是 Currency 數據類型,但也具有 NA 的字串值,統計帳戶的小計,也就是 String 數據類型。 Power BI 會將某些量值辨識為變體,並在不同的視覺效果中顯示正確的值和格式設定。
以 variant 形式
隱含量值
表格式模型可讓使用者在欄位上建立隱含量值,例如計數、總和或平均值。 對於多維度模型,因為維度屬性數據的儲存方式不同,因此查詢隱含量值可能需要很長的時間。 因此,Power BI 中無法使用針對多維度模型的隱含量值。
維度、屬性和階層
Cube 維度會公開為表格式元數據中的數據表。 在 Power BI 欄位清單中,維度屬性會顯示為顯示資料夾中的數據行。 AttributeHierarchyEnabled 屬性設定為 False的維度屬性;例如:Customer 維度中的 [出生日期] 屬性,或 [AttributeHierarchyVisible] 屬性設定為 false 將不會出現在 Power BI 字段清單中。 多層級階層或用戶階層;例如 Customer 維度中的 Customer Geography,會在 Power BI 字段清單中公開為階層。 維度屬性的隱藏 UnknownMembers 會在 DAX 查詢和 Power BI 中公開。
SQL Server Data Tools (SSDT) 和 Power BI 字段清單中的維度、屬性和階層清單
維度屬性類型
多維度模型支援將維度屬性與特定維度屬性類型產生關聯。 下圖顯示 Geography 維度,其中 City、State-Province、Country 和 Postal Code 維度屬性具有與其相關聯的地理位置類型。 這些會在表格式元數據中公開。 Power BI 可辨識元數據,讓用戶能夠建立地圖視覺效果。 這表示 Power BI 字段清單 [地理位置] 資料表中 [城市]、[國家/地區]、[郵遞區號] 和 [State-Province] 資料行旁的地圖圖示。
SSDT 和 Power BI 欄位清單中的 [地理位置] 維度清單
維度匯出成員
多維度模型支援具有單一實際成員之 All 子系的導出成員。 公開此類型的導出成員時,其他條件約束如下:
- 當維度有多個屬性時,必須是單一實際成員。
- 包含匯出成員的屬性不能是維度的索引鍵屬性,除非它是唯一的屬性。
- 包含匯出成員的屬性不能是父子屬性。
用戶階層的導出成員不會在Power BI中公開,不過,使用者仍能夠連線到包含用戶階層上導出成員的 Cube。
默認成員
多維度模型支援維度屬性的預設成員。 在匯總查詢的數據時,Analysis Services 會使用預設成員。 維度屬性的預設成員會公開為表格式元數據中對應數據行的預設值或篩選。
套用屬性時,Power BI 的行為與 Excel 數據透視表大相等。 當使用者將數據行新增至包含預設值的 Power BI 視覺效果(資料表、矩陣或圖表)時,將不會套用預設值,而且會顯示所有可用的值。 如果使用者將數據行新增至 [篩選],則會套用預設值。
維度安全性
多維度模型透過角色支援維度和數據格層級安全性。 使用 Power BI 連線到 Cube 的使用者會針對使用者所屬角色所定義的適當許可權進行驗證和評估。 套用維度安全性時,Power BI 中的使用者不會看到個別的維度成員。 不過,如果使用者具有定義特定儲存格限制的儲存格安全性許可權,則該使用者就無法使用 Power BI 連線到 Cube。 在某些情況下,當使用者從受保護的數據計算出部分數據時,可以看到匯總數據。
不可匯總的屬性/階層
在多維度模型中,維度的屬性可以設定為 False,IsAggregatable 屬性。 這表示模型作者已指定報表應用程式在查詢數據時,不應跨階層(屬性或多層級)匯總數據。 在 Power BI 中,此維度屬性會公開為無法使用小計的數據行。 在下圖中,您會看到無法匯總的階層帳戶範例。 帳戶父子式階層的最上層是不可匯總的,而其他層級則是可匯總的。 在帳戶階層的矩陣視覺效果中(前兩個層級),您會看到帳戶層級 02
Power BI 中不可匯總的階層
圖像
Power BI 提供轉譯影像的能力。 在多維度模型中,您可以在Power BI 中提供影像的其中一種方式,就是公開包含影像URL(統一資源定位器)的數據行。 Analysis Services 支援將維度屬性標記為類型,ImageURL。 此數據類型接著會在表格式元數據中提供給 Power BI。 Power BI 接著可以下載並顯示視覺效果內 URL 中指定的影像。
在 SSDT 中
SSDT 中的
父子式階層
多維度模型支援父子式階層,這些階層會在表格式元數據中公開為階層。 父子式階層的每個層級都會公開為隱藏數據行。 父子維度的索引鍵屬性不會在表格式元數據中公開。
SSDT 和 Power BI 欄位清單中的父子式階層清單
檢視方塊和翻譯
檢視方塊是 Cube 的檢視,其中用戶端工具中只會顯示特定維度或量值群組。 您可以將檢視方塊名稱指定為 Cube 連接字串屬性的值。 例如,在下列連接字串中,'Direct Sales' 是多維度模型中的檢視方塊:
Data Source=localhost;Initial Catalog=AdventureWorksDW-MD;Cube='Direct Sales'
Cube 可以針對模型中的各種語言指定元數據和數據翻譯。 若要查看翻譯(資料和元數據),應用程式可以將選擇性 地區設定識別子 屬性新增至連接字串,例如:
Data Source=localhost;Initial Catalog=AdventureWorksDW-MD;Cube='Adventure Works'; Locale Identifier=3084
當 Power BI Desktop 連接到多維度模型時,會自動將識別的目前用戶地區設定傳遞給伺服器。 不過,這不會針對發行至 Power BI 服務的報表發生。
不支援的功能
Power BI 報表不支持數據格層級安全性。
動作 - 在 Power BI 報表或針對多維度模型的 DAX 查詢中不支援。
命名集 - 在多維度模型中,Power BI 或 DAX 查詢不支援多維度模型。
注意
不支持的動作和具名集不會防止使用者在使用Power BI時連線和探索多維度模型。
CSDLBI 註釋
多維度 Cube 元數據會透過概念架構定義語言與商業智能註釋 (CSDLBI) 公開為以實體數據模型 (EDM) 為基礎的概念模型。
當DISCOVER_CSDL_METADATA要求傳送至 Analysis Services 實例時,多維度元數據會以 CSDLBI 檔或 CSDL out 中的表格式模型命名空間表示。
範例:DISCOVER_CSDL_METADATA要求
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
<RequestType>DISCOVER_CSDL_METADATA</RequestType>
<Restrictions>
<RestrictionList>
<CATALOG_NAME>"catalogname"<CATALOG_NAME>
</RestrictionList>
</Restrictions>
<Properties>
<PropertyList>
</PropertyList>
</Properties>
</Discover>
</Body>
</Envelope>
DISCOVER_CSDL_METADATA要求具有下列限制:
名字 | 必填 | 描述 |
---|---|---|
CATALOG_NAME | 是的 | catalog\database 名稱。 |
PERSPECTIVE_NAME | 是,如果 Cube 包含一個以上的檢視方塊。 如果只有一個 Cube 或有預設檢視方塊,則為選擇性。 | 多維度資料庫中的 Cube 名稱或檢視方塊名稱。 |
版本 | 是的 | 用戶端要求的 CSDL 版本。 2.0 版支援多維度功能和建構。 |
傳回 CSDL out 檔會將模型表示為命名空間,其中包含實體、關聯和屬性。
若要深入瞭解 CSDLBI 批註,請參閱 CSDL的 BI 註釋技術參考和 [MS-CSDLBI]:概念架構定義檔格式與商業智慧批註。
SuperDAXMD
隨著 SQL Server Analysis Services 的每個版本,改善支援新的和現有的 DAX 函式和功能。 在 SQL Server 2019 CU5 中,第一個針對表格式模型引進的 DAX 函式類別,稱為 SuperDAX 現在已針對多維度模型啟用。
雖然某些現有的 DAX 查詢模式可能需要重新設計,但 SuperDAX 函式可大幅改善查詢效能。 針對多維度模型使用 SuperDAX 的新式 DAX 查詢模式,為使用 Power BI 的組織將多維度數據源伺服器升級至具有 CU5 的 SQL Server 2019 提供強大的激勵措施。 若要深入瞭解,請參閱 多維度模型的 SuperDAX。