【问题标题】:Analysis service create recursive hierarchy分析服务创建递归层次结构
【发布时间】:2013-02-22 15:51:18
【问题描述】:

我有下表:

CatId    CatName    parent     CatId

1        Category   1           NULL
2        Category   2           NULL
3        SubCat     1           1
4        SubSubCat  1           3
5        SSSubCat   1           4

在分析服务中,我想在维度中创建层次结构,以便我可以向下钻取到 N 级。目前我只能做 2 个级别。类别和子类别。但我想去如果 N 级是不可能的,至少到 4-5 级,直到 N 级。

【问题讨论】:

    标签: sql-server ssas analysis business-intelligence


    【解决方案1】:

    您似乎正在尝试的层次结构类型称为父子维度。 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 并创建父子维度。这有点复杂,看起来像a great starter article。 SSAS 将根据需要不断添加级别,直到数据用完为止。

    【讨论】:

      【解决方案2】:

      在 AdventureWorks 中,Employee 维度有一个这样的例子。假设您的类别在您的事实表中:

      • 将您的 ParentCatID 设置为 DSV 中 CatID 的 FK
      • 在维度层次结构管理器中将您的父属性引用为父属性类型
      • 将属性添加到您的层次结构中

      嵌套级别应该可以在您的类别层次结构中浏览。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-22
        • 2017-02-04
        • 1970-01-01
        • 2019-12-18
        • 2018-01-17
        • 2021-07-04
        • 1970-01-01
        相关资源
        最近更新 更多