MDX 获取层次结构值

Posted

技术标签:

【中文标题】MDX 获取层次结构值【英文标题】:MDX Get Hierarchy Value 【发布时间】:2014-07-23 16:34:41 【问题描述】:

我已经搜索和搜索,但找不到看起来应该相当简单的答案。

我在一个维度中有一个员工层次结构。员工有积分(在事实表中)。当我将层次结构拖到行上时,我可以很容易地看到正确汇总的点。问题是员工的工作代码不同,它不一定对应层次结构中的级别。

例如,我有项目工程师。他们是根据个别点来判断的。我可以将 Name 拉到行中,按工作代码过滤,并将点放入度量中,我可以得到用户想要看到的内容。

项目工程师 II 是另一回事。他们根据 TEAM 积分进行评判。我将名称拉到行上,按工作代码过滤,我需要一个计算的度量来总结属于它们的所有点,就像我将层次结构拖到行上一样。问题是我似乎无法将 Name 或 EmployeeID 与层次结构相关联以获得该团队价值。事实上,我什至无法获取 Employee ID 主键,因为它隐藏在父子层次结构下。我得拿一份。

我怎样才能满足这个要求?我已经尝试了很多不同的 MDX(我不是专家的语言),但关键块似乎是我无法根据行值获取层次结构成员。就好像它们完全不相关,而事实上,我知道我的密钥副本与层次结构中的一个且仅一个特定成员相关。出于这个原因,我也认为它可能不是 MDX 而是可能需要更改的维度属性/关系/属性。

请帮忙!如果有任何关于多维数据集或需求的问题,请告诉我。

更新:我已经使用桥接表和多对多关系设置了维度,如以下链接所述:http://www.sqlbi.com/wp-content/uploads/The_Many-to-Many_Revolution_2.0.pdf(第 70 页)。我没有提到它,因为我认为它不相关它使问题变得模糊。我以这种方式设置它是因为既有正式的层次结构也有非正式的层次结构。从概念上讲,我看不出它有多重要,因为父子关系正是您所期望的 - 有一个父字段对应于一个键值。

【问题讨论】:

你是如何设置维度表的?你是如何设置层次结构的?这是什么意思?:“我什至无法获取员工 ID 主键,因为它隐藏在父子层次结构下” 我的意思是关键字段没有显示在多维数据集浏览器中。所有其他字段都可以,但我看到的不是关键字段,而是带有父字段名称标签的层次结构。据我所知,没有办法将关键字段放在行上,即使属性层次结构启用属性设置为 true。所以我在第二列中复制了它以强制它出现。但它没有链接到层次结构。 如果您创建一个属性并将您的关键字段分配给它,您应该能够通过将该属性拖放到行上来将其分配给多维数据集浏览器中的行。这就是你所追求的吗? 我不确定你的意思,但我能够解决我的问题。感谢您的帮助! 【参考方案1】:

我能够解决这个问题。

我使用以下 MDX 创建了一个命名集,以从本质上为我提供以前无法获得的东西 - 父子层次结构的实际叶成员,而不是其副本。

DESCENDANTS([Vw Dim Employee Hierarchies].[PIDH Name].&[37Informal]
                , [Vw Dim Employee Hierarchies].[PIDH Name].Levels.Count - 1
                , LEAVES)

Member 37Informal 是非正式层次结构的根,我指定了最底层,叶子选项返回根成员和指定级别之间的层次结构的所有叶级成员。

然后,通过将命名集中每个成员的值与其在层次结构中的父级进行比较,我能够创建我需要的“TeamPoints”计算成员。如果是同名,那我总结了他的积分和他所有兄弟姐妹的积分。如果没有,我只是退回了他的积分。代码如下:

CASE WHEN [Vw Dim Employee Hierarchies].[PIDH Name].CurrentMember.Parent.Name =
                [Vw Dim Employee Hierarchies].[PIDH Name].CurrentMember.Name
    THEN SUM(
            [Vw Dim Employee Hierarchies].[PIDH Name].CurrentMember.Siblings
                    * UNION([Vw Dim Employee Hierarchies].[Job Code].&[ENGOPROF]
                            , [Vw Dim Employee Hierarchies].[Job Code].&[PROJENG]
                            , [Vw Dim Employee Hierarchies].[Job Code].&[INTRNENG])
            , [Measures].[Points])
    ELSE [Measures].[Points]
    END

关键是真正的命名集。没有它,我无法从行中的层次结构中获取所有叶节点,我需要计算的成员在 CurrentMember 的上下文中正确评估。

【讨论】:

以上是关于MDX 获取层次结构值的主要内容,如果未能解决你的问题,请参考以下文章

使用 MDX 从层次结构中获取当前会计年度

如果当前成员有孩子,则展开用户层次结构 - MDX

MDX 排除层次结构中存在值的结果

SSAS MDX WHERE 子句语法 - 从同一层次结构中过滤多个值

MDX对一个维层次结构中的所有值求和

MDX 计算成员不允许多个层次结构元组