如何在 MDX 中将级别的总和显示为其最后一个子级的值

Posted

技术标签:

【中文标题】如何在 MDX 中将级别的总和显示为其最后一个子级的值【英文标题】:How to display the total of a level as the value of its last child in MDX 【发布时间】:2010-09-12 08:19:09 【问题描述】:

我有一个 MDX 查询,它列出了 OLAP 数据库中所有“周”和“日”级别的度量。例如

SELECT 

    HIERARCHIZE( [Business Time].[Week].members, [Business Time].[Date].members )
 
ON ROWS,

    [Measures].[Quantity]
 
ON COLUMNS 
FROM [Sales]

但是,在显示一周的度量值的地方,我想显示一周内最后一天的值,而不是显示所有 Day 值的总和。例如

第 1 周:12 9 月 15 日:10 9 月 16 日:20 9 月 17 日:12 9 月 18 日:15 9 月 19 日:8 9 月 20 日:9 9 月 21 日:12第 2 周:15 9 月 22 日:12 9 月 23 日:15

如何在 MDX 中实现这一点?

【问题讨论】:

【参考方案1】:

在 MDX 的开头添加一个新的计算度量,仅当它以周级别显示时才显示最后一天的值,否则保持不变:

WITH MEMBER [Measures].[Blah] AS 
'IIF(
   [Business Time].currentMember.level.name = "Week",
   ([Business Time].currentMember.lastChild, [Measures].[Quantity]),
   ([Business Time].currentMember, [Measures].[Quantity])
)'

我预计会有客户提出这个奇怪的要求,并且我预计您会在一个月内接到来自同一办公室的某人的电话,说此报告中的每周“总计”有误!

【讨论】:

实际上,如果您将 Quantity 视为“期末存货金额”,这并不是一个奇怪的请求。所以一周的期末库存实际上是该项目最后一天的期末库存。 好答案。我只做一个改变:使用 IS 来找出成员所在的级别。例如。 [Business Time].currentMember.level IS [Business Time].[Week] 这样效率更高。

以上是关于如何在 MDX 中将级别的总和显示为其最后一个子级的值的主要内容,如果未能解决你的问题,请参考以下文章

如何计算 MDX 中组的总和?

范围内总和计数的 MDX 计算

如何构建仅考虑 2 月最后 10 天发生的事实的 MDX 查询?

mondrian mdx 过滤日期维度中年份级别的集合

如何使用 MDX 获得类似 T-SQL 的单轴叶级结果

如何在laravel中将两级数组转换为一个级别数组