【问题标题】:MDX - Filter from unrelated measure groupMDX - 从不相关的度量值组中过滤
【发布时间】:2017-07-25 03:18:46
【问题描述】:

因此,是否可以按一个度量值组进行过滤,并从该度量值组中获取不同的成员/人员,并将其用作来自不同度量值组的另一个查询的过滤器。

等价的sql查询

SELECT 
    sum(spend)
FROM
    (SELECT distinct person_id FROM enrollment_fact WHERE program = 'blah') AS a
    JOIN
    (SELECT person_id, sum(spend) AS spend FROM sales_fact GROUP BY person_id) AS b 
    ON a.person_id = b.person_id

假设我在 SSAS 中有两个不同的度量值组,一个用于支出,一个来自注册,除了时间和 person_id 之外不相关

还假设有两个许多程序(数千个)为每个人创建列/属性,以便每个程序充当成员过滤器。

【问题讨论】:

    标签: ssas mdx


    【解决方案1】:

    是否和以下一样:

    SELECT sum(spend) AS spend 
    FROM   sales_fact 
    WHERE  person_id IN 
    (
      SELECT person_id 
      FROM   enrollment_fact 
      WHERE  program = 'blah'
      GROUP  BY person_id
    )
    

    如果这两个度量值组都在同一个多维数据集中并且 person_id 维度是共享的,那么在mdx 中看起来是可能的。

    子查询可以通过NonEmpty函数完成:

    NONEMPTY( 
      [person].[person_id].[person_id].MEMBERS
    , (  
         [program].[program].[blah]
       , [measures].[someEnrollmentMeaure]
      )
    )
    

    因此,将其添加到 mdx WHERE 子句将通过这些 person_ids 对多维数据集进行切片:

    SELECT
       [measures].[someEnrollmentMeaure] ON 0   
    FROM [youCube]
    WHERE
      NONEMPTY( 
          [person].[person_id].[person_id].MEMBERS
         ,(  
            [program].[program].[blah]
           ,[measures].[someEnrollmentMeaure]
          )
        );
    

    【讨论】:

    • 谢谢!我觉得我几乎尝试了所有其他变体,但给出了正确答案。
    • @KevinGrossman 不用担心凯文 - 很高兴它有帮助(我提高了你的问题)
    猜你喜欢
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 2016-04-27
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    相关资源
    最近更新 更多