使用 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 IIF 语句根据度量和层次结构叶计算新成员

MDX Excel 中的 IIF + 过滤器 + inst 函数

Sum() 使用 IIF() 或 MS Access 中的 Where 子句

MDX 计算成员不允许多个层次结构元组

s-s-rS 表达式在 SUM 和 IIF 时给出 #Error

MS 访问 iif 语句