MDX中如何计算Count累计和至小于Stock值并统计累加行数
实现方案
我们通过定义MDX计算成员实现需求,你可以直接使用调整后的查询语句:
WITH -- 固定取DEKA产品组的总库存值,避免随时间维度变化产生取值误差 MEMBER [Measures].[TotalStock] AS ( [Product Group].[Group].&[DEKA], [Measures].[Stock], [Date].[Year Month].[All] ) -- 按年月升序从当前行往后累加Count值,如果需要从首行开始累计,把范围换成 NULL:[Date].[Year Month].CurrentMember MEMBER [Measures].[累计Count] AS SUM( [Date].[Year Month].CurrentMember:NULL, [Measures].[Count] ) -- 统计满足累计Count小于总库存的总行数 MEMBER [Measures].[累计行数] AS COUNT( FILTER( [Date].[Year Month].Members, SUM( [Date].[Year Month].CurrentMember:NULL, [Measures].[Count] ) < [Measures].[TotalStock] ) ) SELECT { [Measures].[Count], [Measures].[Stock], [Measures].[累计Count], [Measures].[累计行数] } ON COLUMNS, ( [Product Group].[Group].&[DEKA], -- 筛选出符合累计条件的年月行 FILTER( [Date].[Year Month].Members, [Measures].[累计Count] < [Measures].[TotalStock] ) ) ON ROWS FROM [CUBENAME]
逻辑说明
- 行维度增加了Filter判断,只会返回累计Count未超过总库存的行,自动停止在累计和超过Stock的前一行
- 如果你的需求是从首个年月开始向前累加而非从当前行向后累加,替换
累计Count和累计行数中的求和范围即可,注释中已经给出替换方案 - 累计行数每一行都会返回满足条件的总行数,如果你只需要在结果末尾展示该值,可以把该计算成员移到行维度最后单独输出
内容的提问来源于stack exchange,提问作者arturm
相关产品推荐
相关产品推荐

