MDX技术问题:获取不规则层级中叶子节点的父节点
解决销售经理层级识别的MDX方案
嘿,我来帮你搞定这个销售经理统计的问题!你已经用IsLeaf精准识别了销售代表,现在核心是抓住销售经理的特征:不是叶子节点,但下属存在销售代表(叶子节点)——不管他们的层级有多灵活,这个特征是固定的。
核心思路
销售经理的判断逻辑可以拆解为两个条件:
- 当前成员不是叶子节点(排除销售代表本身)
- 当前成员拥有至少一个叶子节点后代(即有下属销售代表)
基于这个思路,我们可以在你的现有MDX代码中新增识别销售经理的度量,再做汇总统计。
完整MDX代码示例
WITH -- 你已有的销售代表识别度量 MEMBER [#Reps1] AS IIF(IsLeaf([FF Hierarchy].[FF Hierarchy].CurrentMember), [Measures].[#Employees], NULL) -- 新增:识别销售经理的度量 MEMBER [#Managers] AS IIF( NOT IsLeaf([FF Hierarchy].[FF Hierarchy].CurrentMember) AND Count(Descendants([FF Hierarchy].[FF Hierarchy].CurrentMember,, LEAVES)) > 0, [Measures].[#Employees], NULL ) -- 你已有的销售代表汇总度量 MEMBER [# of rep1] AS SUM(DESCENDANTS([FF Hierarchy].[FF Hierarchy].CurrentMember, 0, SELF_AND_AFTER), [Measures].[#Reps1]) -- 新增:销售经理汇总度量 MEMBER [# of managers] AS SUM(DESCENDANTS([FF Hierarchy].[FF Hierarchy].CurrentMember, 0, SELF_AND_AFTER), [Measures].[#Managers]) SELECT -- 同时展示销售代表和经理的数量 NON EMPTY { [Measures].[# of rep1], [Measures].[# of managers] } ON COLUMNS, NON EMPTY { ([FF Hierarchy].[Business Unit].[Business Unit].MEMBERS ) * Descendants([FF Hierarchy].[FF Hierarchy], 1, SELF) } ON ROWS FROM [FFE Cube]
代码细节解释
Descendants([FF Hierarchy].[FF Hierarchy].CurrentMember,, LEAVES):这个函数会获取当前成员所有层级下的叶子节点后代,不管中间隔了多少层,只要是下属的销售代表都会被筛选出来。Count(...) > 0:确保该成员确实有下属销售代表,避免把没有下属的高层管理者误统计为销售经理。NOT IsLeaf(...):直接排除本身就是销售代表的叶子节点,避免重复计数。
特殊场景调整(仅直接父节点为经理)
如果你的业务规则是只有销售代表的直接上级才算销售经理(而非所有上级),可以把经理度量改成下面的逻辑,只检查直接子节点是否为叶子:
MEMBER [#Managers] AS IIF( NOT IsLeaf([FF Hierarchy].[FF Hierarchy].CurrentMember) AND Count(Filter([FF Hierarchy].[FF Hierarchy].CurrentMember.Children, IsLeaf([FF Hierarchy].[FF Hierarchy].CurrentMember))) > 0, [Measures].[#Employees], NULL )
内容的提问来源于stack exchange,提问作者emad ahmed
相关产品推荐
相关产品推荐

