使用 IIF 和 SUM 的 MDX
Posted
技术标签:
【中文标题】使用 IIF 和 SUM 的 MDX【英文标题】:MDX using IIF and SUM 【发布时间】:2015-08-06 11:20:59 【问题描述】:在下面的 MDX
代码中,我只想获取指定最后一次成员的度量聚合(例如 01/06/2015),否则我不想要它们。
我尝试了存在和存在,但没有任何运气。
我相信我必须使用IIF
功能
喜欢:
IIF DAYTIME, MEASURE D NOT NULL THEN AGGREGATE....
(如果对于特定月份,度量 D 大于 0,则对特定时间范围的 SUM 度量 D)
ELSE NULL.
(否则不在输出上打印)
然后过滤 E.members 其中SUM
测量D >1
ON ROWS。
WITH
MEMBER A AS
b + C
MEMBER [Measures].[Aggregate] AS
Aggregate
(
DAYTIME.[Month].&[2013-01-01T00:00:00]
:
[DAYTIME].[Month].&[2015-06-01T00:00:00]
,[Measures].[D]
)
SELECT
[Measures].[Aggregate] ON 0
,Filter
(
Exists
(
[E].MEMBERS
,[DAYTIME].[Month].&[2015-06-01T00:00:00]
)
,
[Measures].[Aggregate] > 1
) ON 1
FROM [CUBE];
【问题讨论】:
MEMBER A
与您的要求有什么关系?
问题中没有任何内容,我将其用作过滤器。我有一个想法:在开头添加一个 SET AS,如过滤器 [E].members where measure.D >0 and are in [DAYTIME].[Month].&[2015-06-01T00:00:00] 2) c
【参考方案1】:
MSDN 论坛的某个人提醒我使用 NONEMPTY。所以首先我使用了 NONEMPTY 之类的 非空 ( [E] , ( [DAYTIME].[Month].&[2015-06-01T00:00:00], [measures].[D] ) ) 为了返回所有在 2015 年 6 月 1 日对 measure.D 具有非空值的 E.Members 然后我用另一个措施过滤它
我没有得到正确的数据,但我认为 BI 解决方案内部存在问题。
【讨论】:
似乎有点奇怪 - 您的度量[Measures].[Aggregate]
已经包含此日期 [DAYTIME].[Month].&[2015-06-01T00:00:00]
因此过滤器 Filter( ... [Measures].[Aggregate] > 1)
将已经在 [E].MEMBERS
上执行 nonEmpty
操作 [DAYTIME].[Month].&[2015-06-01T00:00:00]
【参考方案2】:
尝试使用Sum
而不是Aggregate
。此外,[DAYTIME].[Month].&[2015-06-01T00:00:00]
是措施 [Measures].[Aggregate]
的一部分,您可以删除 Exists
函数:
WITH
MEMBER [Measures].[Aggregate] AS
Sum
(
DAYTIME.[Month].&[2013-01-01T00:00:00]
:
[DAYTIME].[Month].&[2015-06-01T00:00:00]
,[Measures].[D]
)
SELECT
[Measures].[Aggregate] ON 0
,Filter
(
[E].MEMBERS
,[Measures].[Aggregate] > 1
) ON 1
FROM [CUBE];
注意:重要的是[Measures].[D]
与这些成员[E].MEMBERS
相关
【讨论】:
以上是关于使用 IIF 和 SUM 的 MDX的主要内容,如果未能解决你的问题,请参考以下文章
MDX Excel 中的 IIF + 过滤器 + inst 函数
Sum() 使用 IIF() 或 MS Access 中的 Where 子句