您似乎正在尝试的层次结构类型称为父子维度。SSAS 将使用递归连接将数据“分解”成树形。
但是您描述的表格有点令人困惑。所以我提供了一个解决方案,需要你重新考虑一下你的桌子。层次结构中的每个节点(记录)都有一个经典的父子节点:
- 节点的密钥 (ID)
- 节点的文字(名称)
- 称为父级的外键
在您的示例中,标记为“父”的列似乎是多余的。您示例中的最后一列(称为“CatID”)是维度的父级通常的样子。如果您认为表中的每条记录都是“子”,则子的父项充当指向拥有或包含该记录的某个记录的指针。在层次结构的最高级别,记录将没有 Parent,因此 Parent 列设置为 NULL。
将第二个“CatID”重命名为“parent”并删除或重命名名为“Parent”的原始列(您不需要它)。如果您按照我的建议调整表格,则应通过运行以下查询来检查最高级别是否正确:
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 在构建父子层次结构时所做的事情。
最后,您将此表添加到 DSV 并创建父子维度。这有点复杂,这看起来像是一篇很棒的入门文章。SSAS 将根据需要不断添加级别,直到数据用完。