求可按财年部分时段聚合销售数据的MDX分组查询方案
MDX解决方案:指定日期范围的财年部分时段聚合与多范围查询
方案一:按年份聚合指定日期范围内的部分月份数据
直接使用Year维度聚合,但通过Exists函数筛选出仅属于目标日期范围的Month成员,避免返回全年数据:
SELECT [Measures].[Sales] ON COLUMNS, NON EMPTY [Date].[Year].[Year].Members ON ROWS FROM [Cube] WHERE ( Exists( [Date].[Month].[Month].Members, [Date].[Date Key].&[20210601] : [Date].[Date Key].&[20230303] ) )
原理说明
Exists函数会返回所有与20210601-20230303日期范围有数据交集的Month成员- 外层通过
Year维度聚合这些筛选后的月份数据,最终每个年份仅展示指定时段内的销售总和,而非全年数据
如果你的维度结构中Month成员包含年份标识(比如2021:Jun),也可以用Filter函数直接匹配:
SELECT [Measures].[Sales] ON COLUMNS, NON EMPTY [Date].[Year].[Year].Members ON ROWS FROM [Cube] WHERE ( Filter( [Date].[Month Combined].[Month Combined].Members, [Date].[Month Combined].CurrentMember.Name >= '2021:Jun' AND [Date].[Month Combined].CurrentMember.Name <= '2023:Mar' ) )
方案二:单个查询返回多日期范围的结果并按年份别名
通过WITH子句定义计算成员,分别对应三个目标日期范围,实现一次查询返回所有结果:
方式1:将不同时段作为度量列展示
WITH MEMBER [Measures].[2021年下半年销售] AS Aggregate( [Date].[Date Key].&[20210601] : [Date].[Date Key].&[20211231], [Measures].[Sales] ) MEMBER [Measures].[2022年全年销售] AS Aggregate( [Date].[Date Key].&[20220101] : [Date].[Date Key].&[20221231], [Measures].[Sales] ) MEMBER [Measures].[2023年Q1销售] AS Aggregate( [Date].[Date Key].&[20230101] : [Date].[Date Key].&[20230303], [Measures].[Sales] ) SELECT { [Measures].[2021年下半年销售], [Measures].[2022年全年销售], [Measures].[2023年Q1销售] } ON COLUMNS FROM [Cube]
方式2:将不同时段作为行成员展示
WITH -- 定义每个时段的日期范围集合 SET [2021下半年] AS [Date].[Date Key].&[20210601] : [Date].[Date Key].&[20211231] SET [2022全年] AS [Date].[Date Key].&[20220101] : [Date].[Date Key].&[20221231] SET [2023Q1] AS [Date].[Date Key].&[20230101] : [Date].[Date Key].&[20230303] -- 基于集合创建自定义年份成员 MEMBER [Date].[Year].[2021下半年] AS Aggregate([2021下半年]) MEMBER [Date].[Year].[2022全年] AS Aggregate([2022全年]) MEMBER [Date].[Year].[2023Q1] AS Aggregate([2023Q1]) SELECT [Measures].[Sales] ON COLUMNS, { [Date].[Year].[2021下半年], [Date].[Year].[2022全年], [Date].[Year].[2023Q1] } ON ROWS FROM [Cube]
内容的提问来源于stack exchange,提问作者user8675309
相关产品推荐
相关产品推荐

