多維度模型的 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 語言來撰寫這些計算。 DAX 運算式不能用於需要 MDX 運算式,反之亦然,而某些 DAX 函式,例如 PATH,完全不適用於多維度模型化。

DAX 語法

DAX 公式的語法與 Excel 公式的語法非常類似,都是使用函數、運算子和值的組合。 若要深入瞭解個別函式的語法,請參閱 DAX 函式參考

多維度與表格式物件的對應

Analysis Services 提供多維度模型的表格式模型中繼資料表示。 然後,多維度模型中的物件會以表格式物件表示于 Power BI 中。 此對應會使用 DISCOVER_CSDL_METADATA 架構資料列集向 Power BI 公開。

物件對應

多維度物件 表格式物件
Cube 型號
Cube 維度 資料表
維度屬性(索引鍵、名稱) 資料行
量值群組 資料表
Measure Measure
不含量值群組的量值 在名為量值的資料表中
量值群組 Cube 維度關聯性 關聯性
檢視方塊 檢視方塊
KPI KPI
使用者/父子式階層 階層
顯示資料夾 顯示資料夾

量值、量值群組和 KPI

多維度 Cube 中的量值群組會顯示在 Power BI 欄位清單中,做為具有計算機圖示的資料表。

量值群組內的量值顯示為量值。 如果有沒有相關聯量值群組的匯出量值,它們會分組在名為 Measure 的特殊資料表下。

為簡化複雜的多維度模型,模型作者可以在 Cube 中定義一組量值或 KPI,以便在顯示資料夾中找到。 Power BI 可以顯示資料夾及其中的量值和 KPI。

量值群組中的量值和 KPI

Power BI 欄位清單中的量值和 KPI

量值做為變化

多維度模型中的量值是變化。 這表示,量值不是強型別,可以有不同的資料類型。 例如,在下圖中,[財務報告] 資料表中的Amount量值預設為 Currency 資料類型,但也有統計帳戶小計的字串值NA,也就是 String 資料類型。 Power BI 會將某些量值辨識為變體,並在不同的視覺效果中顯示正確的值和格式設定。

量值做為變化

以變異形式測量

隱含量值

表格式模型讓使用者能夠建立隱含量值,例如欄位的計數、加總或平均。 對於多維度模型,因為維度屬性資料的儲存方式不同,查詢隱含量值可能很耗時。 因此,Power BI 不提供多維度模型的隱含量值。

維度、屬性和階層

Cube 維度在表格式中繼資料中公開為資料表。 在 Power BI 欄位清單中,維度屬性會顯示為顯示資料夾中的資料行。 AttributeHierarchyEnabled屬性設定為False的維度屬性;例如:Customer 維度中的 [生日] 屬性,或 [AttributeHierarchyVisible] 屬性設定為 false,不會出現在 Power BI 欄位清單中。 多層級階層或使用者階層;例如,客戶維度中的 Customer Geography 會公開為 Power BI 欄位清單中的階層。 維度屬性的 Hidden UnknownMembers 會在 DAX 查詢和 Power BI 中公開。

SQL SERVER DATA TOOLS (SSDT) 和 Power BI 欄位清單中的維度、屬性和階層

SSDT 和 Power BI 欄位清單中的維度、屬性、階層

維度屬性類型

多維度模型支援維度屬性與特定維度屬性類型產生關聯。 下圖顯示 [地理位置 ] 維度,其中城市、州/省、國家/地區和郵遞區號維度屬性具有與其相關聯的地理位置類型。 這些是在表格式中繼資料中公開。 Power BI 可辨識可讓使用者建立地圖視覺效果的中繼資料。 這會以 Power BI 欄位清單中 [地理位置] 資料表中 [城市]、[國家/地區]、[郵遞區號] 和 [State-Province] 資料行旁的地圖圖示表示。

SSDT 和 Power BI 欄位清單中的地理位置維度

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 中,此維度屬性會公開為無法使用小計的資料行。 在下圖中,您會看到不可匯總階層帳戶的範例。 Accounts 父子式階層的最頂層為非彙總,其他層級為可彙總的。 在 [帳戶] 階層的矩陣視覺效果中, (前兩個層級) ,您會看到 帳戶層級 02 的小計,但不適用於最上層 帳戶層級 01

Power BI 中不可匯總的階層

以變異形式測量

映像

Power BI 可讓您轉譯影像。 在多維度模型中,您可以在 Power BI 中提供影像的其中一種方式是公開包含 URL 的資料行, (統一資源定位器) 影像。 Analysis Services 支援將維度屬性標記為 ImageURL類型。 然後,此資料類型會在表格式中繼資料中提供給 Power BI。 Power BI 接著可以下載並顯示視覺效果內 URL 中指定的影像。

SSDT 中的 ImageURL 維度屬性類型

SSDT 中的 ImageURL 維度

父子式階層

多維度模型支援父子式階層,這些階層會在表格式中繼資料中公開為階層。 父子式階層的每個層級會公開為隱藏的資料行。 父子式維度的索引鍵屬性不會在表格式中繼資料中公開。

SSDT 和 Power BI 欄位清單中的父子式階層

SSDT 和 Power BI 欄位清單中的父子式階層

檢視方塊和翻譯

檢視方塊是在用戶端工具中只看到某些維度或量值群組的 Cube 檢視。 您可以將檢視方塊名稱指定為Cube連接字串 屬性的值。 例如,在下列連接字串中,「直接銷售」是多維度模型中的觀點:

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 輸出) 的表格式模型命名空間。

範例:DISCOVER_CSDL_METADATA要求

<Envelopexmlns="http://schemas.xmlsoap.org/soap/envelope/">
   <Body>
      <Discoverxmlns="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 Yes 目錄\資料庫名稱。
PERSPECTIVE_NAME 是,如果 Cube 包含一個以上的檢視方塊。 如果只有一個 Cube 或有預設檢視方塊,則為選擇性。 多維度資料庫中的 Cube 名稱或檢視方塊名稱。
VERSION Yes 用戶端要求的 CSDL 版本。 2.0 版中支援多維度功能和建構。

傳回的 CSDL 輸出文件將模型表示為命名空間,其中包含實體、關聯和屬性。

若要深入瞭解 CSDLBI 注釋,請參閱 CSDL 的 BI 注釋技術參考[MS-CSDLBI]:概念架構定義檔案格式與商業智慧注釋

SuperDAXMD

隨著每個版本的SQL Server Analysis Services,改善支援新的和現有的 DAX 函式和功能。 在 SQL Server 2019 CU5 中,第一次針對表格式模型引進的 DAX 函式類別,稱為SuperDAX現在已針對多維度模型啟用。

雖然某些現有的 DAX 查詢模式可能需要重新設計,但 SuperDAX 函式可大幅改善查詢效能。 針對多維度模型使用 SuperDAX 的新式 DAX 查詢模式,可為使用 Power BI 的組織提供強大的獎勵,使其多維度資料來源伺服器升級至 2019 年具有 CU5 SQL Server。 若要深入瞭解,請參閱 多維度模型的 SuperDAX

另請參閱

DAX 參考