我有如下表:分析服務中創建遞歸層次結構
CatId CatName parent CatId
1 Category 1 NULL
2 Category 2 NULL
3 SubCat 1 1
4 SubSubCat 1 3
5 SSSubCat 1 4
在分析服務我想在維度來建立層次結構,使得它可以讓我鑽下來,直到氮水平。目前我能做到這一點只有2級..類別和次級類別..但我想要去N級,如果N級是不可能的,至少有4-5級。
我有如下表:分析服務中創建遞歸層次結構
CatId CatName parent CatId
1 Category 1 NULL
2 Category 2 NULL
3 SubCat 1 1
4 SubSubCat 1 3
5 SSSubCat 1 4
在分析服務我想在維度來建立層次結構,使得它可以讓我鑽下來,直到氮水平。目前我能做到這一點只有2級..類別和次級類別..但我想要去N級,如果N級是不可能的,至少有4-5級。
您似乎嘗試的層次類型稱爲父子維度。 SSAS將使用遞歸連接將數據「分解」爲樹狀。
但是您描述的表格有點令人困惑。所以我提供的解決方案需要你重新考慮一下你的桌子。一個經典的父子將有層次結構中的每個節點(記錄):爲節點
在您的示例中,標記爲「父母」的列似乎是多餘的。您示例中的最後一列(稱爲「CatID」)是維度的父類通常看起來像的內容。如果您認爲表中的每條記錄都是一個「孩子」,則該孩子的父母將充當指向擁有或包含該記錄的某條記錄的指針。在層次結構的最高級別中,記錄不會有父項,因此父項列設置爲NULL。
將第二個「CatID」重命名爲「父」,並刪除或重命名名爲「父」的原始列(您不需要它)。如果你調整你的表,我建議,你應該檢查的最高級別是通過運行下面的查詢正確的:
SELECT CatID, CatName, parent FROM mytable WHERE (parent IS NULL)
然後得到一個新的水平下降運行以下查詢:
SELECT HighestLevel.CatID, HighestLevel.CatName, HighestLevel.parent, Level2.CatID AS Level2ID, Level2.CatName AS Level2Name
FROM mytable AS HighestLevel
INNER JOIN mytable AS Level2 ON HighestLevel.CatID = Level2.parent
WHERE (HighestLevel.parent IS NULL)
注意遞歸INNER JOIN。運行至少一個或多個查詢,查看另一個水平降低到驗證密鑰「擴」你期望的方式:
SELECT HighestLevel.CatID, HighestLevel.CatName, HighestLevel.parent, Level2.CatID AS Level2ID, Level2.CatName AS Level2Name, Level3.CatID AS Level3ID, Level3.CatName AS Level3Name
FROM mytable AS HighestLevel
INNER JOIN mytable AS Level2 ON HighestLevel.CatID = Level2.parent
INNER JOIN mytable AS Level3 ON Level2.CatID = Level3.parent
WHERE (HighestLevel.parent IS NULL)
你可以不斷添加必要的水平,以說服自己的數據是正確的。這基本上是SSAS在構建Parent-Child層次結構時所做的。
最後,您將此表添加到DSV並創建父親維度維度。這有點複雜,看起來像a great starter article。 SSAS將根據需要繼續添加級別,直到數據用完。
在AdventureWorks中,員工維度就是一個例子。假設你的類是事實表:
嵌套的級別應該能夠在您的類別層次結構中瀏覽。