Sql server 分析服务创建递归层次结构
我有以下表格:Sql server 分析服务创建递归层次结构,sql-server,ssas,analysis,business-intelligence,Sql Server,Ssas,Analysis,Business Intelligence,我有以下表格: CatId CatName parent CatId 1 Category 1 NULL 2 Category 2 NULL 3 SubCat 1 1 4 SubSubCat 1 3 5 SSSubCat 1 4 在AnalysisService中,我想在维度中创建层
CatId CatName parent CatId
1 Category 1 NULL
2 Category 2 NULL
3 SubCat 1 1
4 SubSubCat 1 3
5 SSSubCat 1 4
在AnalysisService中,我想在维度中创建层次结构,这样就可以向下钻取到N级。。目前我只能做两个级别的。。类别和子类别。。但是,如果N级别至少在4-5个级别之前不可能,我想一直到N级别。您尝试的层次结构类型称为父子维度。SSAS将使用递归连接将数据“分解”成树形 但是你描述的桌子有点让人困惑。因此,我提供了一个解决方案,要求您重新思考一下您的桌子。对于层次结构中的每个节点(记录),经典父子节点将具有:
- 节点的密钥(ID)
- 节点的文字文本(名称)
- 称为父级的外键
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)
然后,要获得下一个级别,请运行以下查询:
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)
注意递归内部联接。至少再运行一个查询以向下查看另一个级别,以验证键是否按预期方式“扩展”:
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在构建父子层次结构时所做的事情
最后,将此表添加到DSV并创建父子维度。这看起来有点复杂。SSAS将根据需要不断添加级别,直到数据耗尽。在AdventureWorks中,员工维度就是一个例子。假设您的类别在事实表中:
- 将父CatID设置为DSV中CatID的FK
- 在维度层次结构管理器中将父属性引用为父属性类型
- 将属性添加到层次结构中