【问题标题】:MDX date range query with a missing boundry date缺少边界日期的 MDX 日期范围查询
【发布时间】:2012-12-25 11:59:06
【问题描述】:

我需要一个按日期过滤的蒙德里安 MDX 查询,其中一个或两个边界日期可能不存在。只要 2013-01-01 和 2013-01-08 维度都存在,我就使用下面的查询。如果两个日期之一不存在,则它不返回任何结果,即使两者之间的维度确实存在。即使在缺少边界日期维度的情况下,我如何让这个查询工作?

SELECT
NON EMPTY {Hierarchize({[Measures].[Number of Something]})} ON COLUMNS,
NON EMPTY {[Date].[2013-01-01]:[Date].[2013-01-08]} ON ROWS
FROM [Users]

【问题讨论】:

  • 你的维度是退化的还是单独的表?如果它是一个单独的表,那么通常它会被预先填充,因此您可以确保所有维度确实存在..(即使没有相关的事实)。示例文件夹中有一个 PDI Kettle 转换,用于生成日期维度。

标签: mdx data-warehouse olap pentaho mondrian


【解决方案1】:

MDX 是在假设您引用的每个成员都存在的情况下构建的;最好通过预先计算这些值的单独表来确保所有可能的日期维度成员确实存在。

您可能会变得棘手并将该表实现为存储过程,但日期维度在总体方案中不会占用大量空间,因此您几乎不会这样做。

我不知道有什么其他方法可以解决您的问题。

【讨论】:

    【解决方案2】:

    尝试消除 NON EMPTY

    【讨论】:

      【解决方案3】:

      即使我还没有理解实现这个逻辑的原因,你可以通过添加来隐藏它。如果您在 Mondrian 中添加自定义成员,请尝试一下。

          /* Exclude Missing Member */
      Create Set CurrentCube.[MissingMemberSet] As
      iif(IsError(StrToMember("[Dimension].[Hierarchy].&[MEMBER]")),
      {}, {[Dimension].[Hierarchy].&[MEMBER]});
      
      Create Member CurrentCube.Measures.[Calculation on Missing Member]
      AS
      IIF ([MissingMemberSet].Count > 0,
      ([Dimension].[Hierarchy].&[MEMBER],Measures.[X Measure]),
      0
      )
      ,
      FORMAT_STRING = "Currency",
      LANGUAGE = 1033,
      NON_EMPTY_BEHAVIOR = { [X Measure] },
      VISIBLE = 1 ,  DISPLAY_FOLDER = 'Display Folder'  ;
      

      您也可以使用 IIF(IsError 或 IIF(Exists MDX 函数来实现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多