共用方式為


MDX 中的重要概念(Analysis Services)

適用於: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

您必須先瞭解多維度概念和詞彙,才能使用多維度表達式來查詢多維度數據或在 Cube 內建立 MDX 表達式。

最好的起點是您已經知道的數據摘要範例,然後查看 MDX 與它的關係。 以下是在 Excel 中建立的數據透視表,其中包含 Analysis Services 範例 Cube 中的數據。

具有量值和維度的數據透視表,

量值和維度

Analysis Services Cube 是由量值、維度和維度屬性所組成,這在數據透視表範例中都是顯而易見的。

量值 是在儲存格中找到的數值數據值,匯總為總和、計數、百分比、最小值、最大值或平均值。 量值是動態的,會實時計算,以回應使用者流覽與數據透視表的互動。 在此範例中,單元格會顯示根據您展開或折疊座標軸而增加或減少的轉銷商銷售金額。 針對日期(年、季、月或日期)和銷售領域(國家/地區、國家/地區)的任何組合,您可以取得轉銷商銷售金額,並加總該特定內容。 與量值同義的其他詞彙是事實(在數據倉儲中)和導出欄位(在表格式和 Excel 數據模型中)。

維度 位於數據透視表的數據行和數據列軸上,提供量值背後的意義。 維度類似於關係型數據模型中的數據表。 維度的常見範例包括 Time、Geography、Products、Customers、Employees 等等。 此範例有兩個維度:數據列上的 Sales Territory,以及頂端的 Date,但您可以輕鬆地拖放與轉銷商銷售相關聯的其他維度,例如促銷或產品,以檢視這些維度的銷售績效。 您以有趣的方式探索數據的能力取決於您建立的維度,以及它們是否與數據源中的事實數據表有關。

Dimension 屬性 是維度內的具名專案,類似於數據表中的數據行。 在此範例中,Sales Territory 維度屬性包含國家群組(歐洲、北美、太平洋)、國家/地區(加拿大、美國)和區域(中部、東北、西北、東南、西南)。

每個屬性都有與它相關聯的數據值或成員集合。 在我們的範例中,Country Group 屬性的成員是 Europe、North America 和 Pacific。 成員 是指屬於屬性的實際數據值。

注意

數據模型化的一個層面是將已存在於數據本身內的模式和關聯性正規化。 使用屬於自然階層的數據時,就像國家/地區-regions-cities-cities 的情況一樣,您可以建立 屬性關聯性,將關聯性正規化。 屬性關聯性是屬性之間的一對多關聯性,例如,州與城市之間的關聯性-一個州有許多城市,但城市只屬於一個州。 在模型中建立屬性關聯性可加速查詢效能,因此最好是在數據支援時加以建立。 您可以在 SQL Server Data Tools 的維度設計工具中建立屬性關聯性。 請參閱 定義屬性關聯性

在 Excel 內,模型元數據會顯示在 [資料透視表] 字段清單中。 比較上方的數據透視表與下方的欄位清單。 請注意,欄位清單包含 Sales Territory、Group、Country、Region (metadata),而數據透視表只包含成員(數據值)。 了解圖示的外觀可協助您輕鬆地將多維度模型的各個部分與 Excel 中的數據透視表產生關聯。

數據透視表欄位清單

屬性階層

幾乎不需要考慮它,您就知道數據透視表中的值會在您展開和折疊每個軸的層級時向上或向下移動,但這麼做是什麼? 答案在於屬性階層。

折疊所有層級,並注意每個國家/地區群組和行事歷年度的總計。 此值衍生自階層內稱為 (All) 成員 的專案。 (All) 成員是屬性階層中所有成員的計算值。

  • 所有國家/地區群組和日期的(全部)成員合併為80,450,596.98美元

  • CY2008 的 (All) 成員為 $16,038,062.60

  • 太平洋(全部)成員為1,594,335.38美元

這類匯總會預先計算並預先儲存,這是 Analysis Services 快速查詢效能的秘密的一部分。

數據透視表,且所有成員都已

展開階層,最後您會進入最低層級。 這稱為 分葉成員。 分葉成員是階層中沒有子系的成員。 在此範例中,西南是分葉成員。

具有分葉成員呼叫 dout 的數據透視表,

這個項目稱為 父成員。 美國是西南地區的父系。

屬性階層的元件

所有這些概念會一起建置為 屬性階層的概念,。 屬性階層是包含下列層級的屬性成員樹狀結構:

  • 包含每個相異屬性成員的分葉層級,分葉層級的每個成員也稱為 分葉成員

  • 如果屬性階層是父子式階層,則為中繼層級(稍後會進一步說明)。

  • 包含所有子屬性之匯總值的成員。 或者,當數據對數據沒有意義時,您可以隱藏或關閉 [全部] 層級。 例如,雖然 Product Code 是數值,但總和或平均值或匯總所有產品代碼並不合理。

注意

BI 開發人員通常會在屬性階層上設定屬性,以達到用戶端應用程式中的特定行為,或取得特定效能優勢。 例如,您會在 (All) 成員沒有意義的屬性上設定 AttributeHierarchyEnabled=False。 或者,也許您只想隱藏 (All) 成員,在此情況下,您會設定 AttributeHierarchyVisible=False。 如需屬性的詳細資訊,請參閱 維度屬性參考

在數據透視表內(至少在此範例中),數據列和數據行軸展開以顯示較低的屬性層級。 可展開的樹狀結構是透過您在模型中建立的導覽階層來達成。 在 AdventureWorks 範例模型中,Sales Territory 維度具有多層級階層,其開頭為國家/地區群組,後面接著國家/地區。

如您所見,階層可用來在數據透視表或其他數據摘要物件中提供導覽路徑。 有兩種基本類型:平衡和不平衡。

平衡階層

具有平衡階層的數據透視表,

平衡階層 是階層,其中最上層與任何分葉成員之間存在相同數目的層級。

自然階層 是基礎數據中自然出現的階層。 常見的範例是 Country-Region-State 或 Year-Month-Date 或 Category-Subcategory-Model,其中每個次級層級都能從父系預測流動。

在多維度模型中,大部分階層都是平衡階層,其中許多階層也是自然階層。

另一個相關的模型化詞彙是 用戶定義階層,通常用來作為與屬性階層的對比。 它只是表示 BI 開發人員所建立的階層,而不是定義屬性時 Analysis Services 自動產生的屬性階層。

不平衡階層

具有不完全階層的數據透視表,

不完全的階層不平衡階層 是階層,其中最上層與分葉成員之間存在不同層級數目。 同樣地,它是BI開發人員所建立的階層,但在此情況下,數據存在差距。

在 AdventureWorks 範例模型中,Sales Territory 會說明不完全的階層,因為此範例中美國有其他國家/地區不存在的額外層級(區域)。

如果用戶端應用程式不以簡潔的方式處理不完全的階層,則不完全階層對 BI 開發人員是一項挑戰。 在 Analysis Services 模型中,您可以建置 父子式階層,明確定義多層級數據之間的關聯性,並消除一個層級與下一個層級的關聯性的任何模棱兩可。 如需詳細資訊,請參閱 Parent-Child 維度

索引鍵屬性

模型是相關物件的集合,這些物件依賴索引鍵和索引來建立關聯。 Analysis Services 模型並無不同。 針對每個維度(回想一下它相當於關係模型中的資料表),有一個索引鍵屬性。 索引鍵屬性 用於事實數據表 (量值群組) 的外鍵關聯性中。 維度中的所有非索引鍵屬性都會連結(直接或間接)至索引鍵屬性。

通常,但並非總是,索引鍵屬性也是 數據粒度屬性。 數據粒度是指數據內的詳細數據層級或精確度。 同樣地,常見的範例會提供最快速的了解路徑。 考慮日期值:對於每日銷售,您需要指定給日期的日期值;若為配額,每季可能就已足夠,但如果您的分析數據是由體育賽事的比賽結果所組成,則粒紋可能非常需要毫秒。 數據值中的有效位數層級是粒紋。

貨幣是另一個範例:金融應用程式可能會將貨幣值追蹤到許多小數位數,而您當地學校的募捐者可能只需要值到最接近的美元。 瞭解粒紋很重要,因為您想要避免儲存不必要的數據。 修剪時間戳的毫秒,或銷售金額的一分錢,可以節省儲存和處理時間,因為該層級的詳細數據與分析無關。

若要設定數據粒度屬性,請使用 SQL Server Data Tools 中 Cube 設計師中的 [維度使用方式] 索引卷標。 在 AdventureWorks 範例模型中,Date 維度的索引鍵屬性是 Date 索引鍵。 對於 Sales Orders,數據粒度屬性相當於索引鍵屬性。 針對銷售目標,數據粒度層級是每季,因此數據粒度屬性會據以設定為 [行事歷季]。

顯示數據粒度屬性的模型

注意

如果數據粒度屬性和索引鍵屬性不同,則所有非索引鍵屬性都必須直接或間接連結至數據粒度屬性。 在 Cube 中,數據粒度屬性會定義維度的數據粒度。

查詢範圍 (Cube 空間)

查詢的範圍是指選取數據所在的界限。 它可以範圍從整個 Cube(Cube 是最大的查詢物件)到儲存格。

Cube 空間 是 Cube 屬性階層成員與 Cube 量值之乘積。

Subcube 是 Cube 子集,代表 Cube 的篩選檢視。 Subcube 可以使用 MDX 計算腳本中的 Scope 語句,或在 MDX 查詢或會話 Cube 中的子選取子句中定義。

Cell 是指量值維度成員成員和 Cube 中每個屬性階層中成員交集處的空間。

其他模型詞彙

本節是一組概念和詞彙集合,這些概念和詞彙並不容易納入其他區段,但您仍然需要瞭解。

匯出成員 是在查詢時間定義和計算的維度成員。 匯出成員可以在用戶查詢或 MDX 計算文本中定義,並儲存在伺服器上。 匯出成員會對應至定義其維度之維度數據表中的數據列。

Distinct Count 是一種特殊類型的量值,用於只應計算一次的數據項。 AdventureWorks 範例模型包含因特網訂單、轉銷商訂單和銷售訂單的相異計數量值。

量值群組 是一或多個量值集合。 大部分是用戶定義,而您使用它們來將相關量值保持在一起。 相異計數量值是例外狀況。 這些一律會放在只包含相異量值的專用量值群組中。 您無法在數據透視表範例圖例中看到量值群組,但它會顯示在數據透視表欄位清單中,做為量值的具名集合。

量值維度 是包含 Cube 中所有量值的維度。 它不會在 SQL Server Data Tools 中建置的多維度模型中公開,但其存在完全相同。 因為它包含量值,所以量值維度的所有成員通常會匯總(通常是依總和或計數)。

資料庫維度和 Cube 維度。 在模型中,您可以定義獨立維度,然後包含在相同模型中任意數目的 Cube 中。 當您將維度新增至 Cube 時,它稱為 Cube 維度。 本身在專案內,做為物件總管中的獨立專案,它稱為資料庫維度。 為什麼要區分? 因為您可以獨立設定屬性。 在產品檔中,您會看到使用這兩個詞彙,因此值得瞭解它們的意義。

後續步驟

現在您已掌握重要概念和術語,接下來可以繼續進行這些其他主題,進一步說明 Analysis Services 中的基本概念:

另請參閱

Cube 空間
Tuple
自動存在
使用成員、Tuple 和集合 (MDX)
視覺效果總計和非視覺效果總計
MDX 查詢基本概念 (Analysis Services)
MDX 腳本基本概念 (Analysis Services)
MDX 語言參考 (MDX)
多維度表達式 (MDX) 參考