適用於: SQL Server Analysis Services
Azure Analysis Services
Fabric/Power BI Premium
本主題說明 Analysis Services 中的多對多維度,包括使用時機,以及如何建立維度。
介紹
Analysis Services 支援多對多維度,允許比傳統星型架構中所述更複雜的分析。 在傳統星型架構中,所有維度都有與事實數據表的一對多關聯性。 每個事實都會聯結至一個維度成員;單一維度成員與許多事實相關聯。
多對多可藉由讓事實(例如帳戶餘額)與相同維度的多個成員相關聯,來移除此模型限制(聯合帳戶的餘額可以歸因於聯合帳戶的兩個或多個擁有者)。
從概念上講,Analysis Services 中的多對多維度關聯性相當於關係模型中的多對多關聯性,支援相同種類的案例。 多對多的常見範例包括:
學生就讀於許多課程:每個課程都有許多學生。
醫生有很多病人:病人有很多醫生。
客戶有許多銀行帳戶:銀行帳戶可能屬於一個以上的客戶。
在 Adventure Works 中,許多客戶有許多訂購產品的原因,而且銷售原因可以與許多訂單相關聯。
分析上,多對多關聯性所解決的問題是相對於維度關聯性之計數或總和的準確表示法(通常是在執行特定維度成員的計算時消除雙計數)。 需要一個範例來釐清這一點。 請考慮屬於多個類別的產品或服務。 如果您要依類別計算服務數目,您會想要將屬於這兩個類別的服務包含在每一個類別中。 同時,您不想過度指定您提供的服務數目。 藉由指定多對多維度關聯性,您更有可能在依類別或服務查詢時傳回正確的結果。 不過,請務必進行徹底的測試,以確保這是這種情況。
在結構上,建立多對多維度關聯性類似於在關係型數據模型中建立多對多關係的方式。 雖然關係型模型使用 連接資料表 來儲存數據列關聯,但多維度模型會使用 中繼量值群組。 中繼量值群組是用來參考對應不同維度成員之數據表的詞彙。
從視覺上看,Cube 圖表中不會指出多對多維度關聯性。 請改用 [維度使用方式] 索引標籤,快速識別模型中的任何多對多關聯性。 下列圖示表示多對多關聯性。
維度使用量
按鍵開啟 [定義關聯性] 對話框,確認關聯性類型是多對多,並檢視關聯性中使用的中繼量值群組。
在後續章節中,您將瞭解如何設定多對多維度和測試模型行為。 如果您想要先檢閱其他資訊或嘗試教學課程,請參閱本文結尾的 深入瞭解。
建立多對多維度
簡單的多對多關聯性包括具有多對多基數的兩個維度、用於儲存成員關聯的中繼量值群組,以及包含可測量數據的事實量值群組,例如總銷售額的總和或銀行帳戶餘額。
多對多關聯性中的維度可能會有 DSV 中的對應數據表,其中模型中的每個維度都是以數據源中的現有數據表為基礎。 相反地,模型中的維度可能衍生自 DSV 中較少或不同的實體數據表。 使用 Sales Reasons 和 Sales Orders 作為案例,Adventure Works 範例 Cube 會使用以模型專用數據結構的形式存在維度來示範多對多關聯性,而 DSV 中沒有實體對應專案。 Sales Order 維度是以基礎數據源中的事實數據表而非維度數據表為基礎。
下一個程式假設您已經知道哪些實體參與多對多關聯性。 如需進一步研究,請參閱 深入瞭解。
為了說明用來建立多對多關聯性的步驟,此程式會重新建立 Adventure Works 範例 Cube 中的其中一個多對多關聯性。 如果您已在關係資料庫引擎實例上安裝源數據(也就是 Adventure Works 範例數據倉儲),您可以遵循下列步驟。
步驟 1:驗證 DSV 關聯性
在 SQL Server Data Tools 的多維度專案中,建立 Sql Server Database Engine 實例上裝載之 Adventure Works DW 2012 關係型數據倉儲的數據源。
使用下列現有資料表建立資料來源檢視:
FactInternetSales
FactInternetSalesReason
DimSalesReason
請確認您打算在多對多關聯性中使用的所有數據表,都透過主鍵關聯性,在 DSV 中相關。 這是在後續步驟中建立中繼量值群組連結的需求。
注意
如果基礎數據源未提供主鍵和外鍵關聯性,您可以在 DSV 中手動建立關聯性。 如需詳細資訊,請參閱 在資料源檢視中定義邏輯關聯性 (Analysis Services)。
下列範例會確認此程式中所使用的數據表會使用主鍵連結。
步驟 2:建立維度和量值群組
在 SQL Server Data Tools 的多維度專案中,以滑鼠右鍵按兩下 [維度] ,然後選取 [[新增維度]。
根據現有的資料表建立新的維度,DimSalesReason。 指定來源時接受所有預設值。
針對屬性,請選取 [全部]。
根據現有的數據表 Fact Internet Sales 建立第二個維度。 雖然這是事實數據表,但它包含銷售訂單資訊。 我們將使用它來建置銷售訂單維度。
在 [指定來源資訊] 中,您會看到警告,指出必須指定 Name 數據行。 選擇 [SalesOrderNumber 作為 [名稱]。
在精靈的下一個頁面上,選擇屬性。 在這裡範例中,您可以只選取 SalesOrderNumber。
將維度重新命名為 Dim Sales Orders,讓維度具有一致的命名慣例。
以滑鼠右鍵按兩下 [Cube],然後選取 [[新增 Cube]。
在量值群組數據表中,選擇 FactInternetSales 和 FactInternetSalesReason。
您選擇 FactInternetSales,因為它包含您想要在 Cube 中使用的量值。 您選擇 FactInternetSalesReason,因為它是中繼量值群組,提供將銷售訂單與銷售原因相關的成員關聯數據。
為每個事實數據表選擇量值。
若要簡化模型,請清除所有量值,然後只選取清單底部 Sales Amount,並 事實因特網銷售計數。 FactInternetSalesReason 只有一個量值,因此會自動為您選取它。
在維度清單中,您應該會看到 Dim Sales Reason 和 Dim Sales Orders。
在 [選取新維度] 頁面中,精靈會提示您為事實因特網銷售維度 建立新的維度。 您不需要此維度,因此您可以從清單中清除它。
將 Cube 命名為 ,然後按兩下 [完成]
。
步驟 3:定義多對多關聯性
在 Cube 設計工具中,按兩下 [維度使用量] 索引標籤。請注意,Dim Sales Reason 與 Fact Internet Sales之間已經有多對多關聯性。 回想一下,下列圖示表示多對多關聯性。
維度使用量
按兩下 Dim Sales Reason 和 Fact Internet Sales之間的交集數據格,然後按下按鈕以開啟 [定義關聯性] 對話框。
您可以看到此對話框可用來指定多對多關聯性。 如果您要改為新增具有一般關聯性的維度,您可以使用此對話框將其變更為多對多。
將專案部署至 Analysis Services 多維度實例。 在下一個步驟中,您將流覽 Excel 中的 Cube 以確認其行為。
測試多對多
當您在 Cube 中定義多對多關聯性時,測試必須確保查詢傳回預期的結果。 您應該使用使用者將使用的用戶端應用程式工具來測試 Cube。 在下一個程式中,您將使用 Excel 連線到 Cube 並驗證查詢結果。
在 Excel 中流覽 Cube
部署專案,然後流覽 Cube 以確認匯總有效。
在 Excel 中,按兩下 [從 Analysis Services從其他來源
數據 。 輸入伺服器的名稱,選擇資料庫和 Cube。 建立使用下列項目的資料分析:
以值 銷售金額
數據行上的銷售原因名稱
數據列上的銷售訂單號碼
分析結果。 因為我們使用範例數據,因此初始印象是所有銷售訂單都有相同的值。 不過,如果您向下捲動,就會開始看到數據變化。
下一部分,您可以找到訂單號碼 SO5382的銷售金額和銷售原因。 此特定訂單的總和 539.99,而此訂單的購買原因包括促銷、其他和價格。
請注意,已正確計算訂單的銷售金額;整個訂單 539.99。 雖然 539.99 的每個原因都表示該值,但該值並未加總這三個原因,錯誤地誇大我們的總計。
為什麼先將銷售金額放在每個銷售原因之下? 答案是,它允許我們識別我們可以歸因於每個原因的銷售量。
捲動至工作表底部。 現在很容易看到,價格是客戶購買最重要的原因,相對於其他原因以及總計。
處理非預期查詢結果的秘訣
隱藏中繼量值群組中的量值,例如計數,不會在查詢中傳回有意義的結果。 這可防止人們嘗試使用產生無意義的數據匯總。 若要隱藏量值,請將 Visibility 設定為在維度設計工具中屬性上 False。
建立檢視方塊,以使用量值和維度子集,以支援您想要提供的分析體驗。 可能,包含許多量值群組和維度的 Cube 在所有情況下都無法一起運作。 藉由隔離您想要一起使用的維度和量值群組,可確保更可預測的結果。
請務必記得在變更模型之後部署和重新連線。 在 Excel 中,使用 [數據透視表分析] 功能區上的 [重新整理] 按鈕。
避免在多個多對多關聯性中使用連結量值群組,特別是當這些關聯性位於不同的 Cube 時。 這樣做可能會導致模棱兩可的匯總。
瞭解更多資訊
使用下列連結來取得可協助您瞭解概念的其他資訊。
教學課程:SQL Server Analysis Services 的多對多維度範例