MDX技术问询:日期维度显示键值与获取最大日期对应金额
针对你遇到的两个MDX问题,我来逐一给出实用的解决方案:
问题1:在不修改维度属性设置的情况下,显示日期维度的键值
你不需要修改维度的属性配置,直接通过MDX的MEMBER_KEY属性就能获取日期成员的键值。这里提供两种实现方式:
方式1:新增计算成员展示键值(推荐)
这种方式可以同时保留原有的日期名称和键值,方便对比查看:
WITH MEMBER [Measures].[Ship Date Key] AS [Ship Date].[Date].CurrentMember.MEMBER_KEY SELECT {[Measures].[Internet Sales Amount], [Measures].[Ship Date Key]} ON COLUMNS, NON EMPTY [Ship Date].[Date].[Date] ON ROWS FROM [Mycube]
方式2:直接将键值作为行标签
如果你希望行轴直接显示键值而非名称,可以修改行轴的表达式:
SELECT [Measures].[Internet Sales Amount] ON COLUMNS, NON EMPTY [Ship Date].[Date].[Date].MEMBER_KEY ON ROWS FROM [Mycube]
问题2:获取最大日期对应的[Internet Sales Amount]
你的原查询没有生效,是因为Filter的条件逻辑有误——你只是取出了最大日期的键值,但没有做相等判断来筛选成员。这里有两种更可靠的实现方式:
方式1:用Tail直接取最后一个非空日期(简洁高效)
如果你的日期维度是按时间升序排列的,Tail函数取到的最后一个非空成员就是最大日期:
SELECT [Measures].[Internet Sales Amount] ON COLUMNS, Tail( NONEMPTY([Ship Date].[Date].[Date], [Measures].[Internet Sales Amount]), 1 ) ON ROWS FROM [Mycube]
方式2:通过最大键值筛选成员(兼容任意排序)
如果不确定维度的排序规则,可以先计算最大日期的键值,再筛选对应的成员,确保结果准确:
WITH -- 计算所有有销售额的日期中的最大键值 MEMBER [Measures].[Max Ship Date Key] AS Max( NONEMPTY([Ship Date].[Date].[Date], [Measures].[Internet Sales Amount]), [Ship Date].[Date].CurrentMember.MEMBER_KEY ) -- 筛选出键值等于最大键值的日期成员 SET [Max Sales Date] AS Filter( NONEMPTY([Ship Date].[Date].[Date], [Measures].[Internet Sales Amount]), [Ship Date].[Date].CurrentMember.MEMBER_KEY = [Measures].[Max Ship Date Key] ) SELECT [Measures].[Internet Sales Amount] ON COLUMNS, [Max Sales Date] ON ROWS FROM [Mycube]
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

