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

Posted

技术标签:

【中文标题】mondrian mdx 过滤日期维度中年份级别的集合【英文标题】:mondrian mdx filter a set on year level in a date dimension 【发布时间】:2014-06-15 06:53:46 【问题描述】:

mdx 新手。 我有一个具有日期维度的查询。年份是整数并且在级别 CalYear 中。 我正在使用蒙德里安(通过 Pentaho)

如何显示 2012 年之后的年份?整数值为 2012、2013、2014 的数据年份。 它是一个时间维度;这个级别是一年。

如果我从这个查询开始:

SELECT
     [Measures].[SalesMonth] ON COLUMNS,
    [YearMonth.CalYearMonth].CalYear.members ON ROWS
    FROM [mt_report] 

我得到三行的结果。

我试试这个:

SELECT
    [Measures].[SalesMonth] ON COLUMNS,
    Filter([YearMonth.CalYearMonth].CalYear.members,
[YearMonth.CalYearMonth].CalYear.CurrentMember.Value > 0) ON ROWS
    FROM [mt_report]

它返回所有数据(与第一个查询相同)

但是

   SELECT
     [Measures].[SalesMonth] ON COLUMNS,
    Filter([YearMonth.CalYearMonth].CalYear.members,
[YearMonth.CalYearMonth].CalYear.CurrentMember.Value > 9999) ON ROWS
    FROM [mt_report]

但这也返回相同的结果。


这行得通...

Filter([YearMonth.CalYearMonth].[CalYear].Members,
[YearMonth.CalYearMonth].[CalYear].CurrentMember.name > '2012')

【问题讨论】:

【参考方案1】:

在 MDX 中,您可以使用 range operator,并将 NULL 作为第二个参数:

如果 [年月].[2012]是 2012 年的成员:

SELECT
  [YearMonth].[Year].[2013]:NULL on 0
...

使用 2012 和使用 nextMember MDX 函数也是如此。

SELECT
  [YearMonth].[Year].[2012].nextMember:NULL on 0
...

【讨论】:

在蒙德里安,它什么也不返回。这被报告为一个错误,但基本上标记为“不会修复”。 jira.pentaho.com/browse/MONDRIAN-264。但是使用您的想法,这适用于蒙德里安: SELECT [Measures].[SalesMonth] ON COLUMNS, [YearMonth.CalYearMonth].[CalYear].[2013] :[YearMonth.CalYearMonth].[CalYear].[2013].LastSibling 来自 [mt_report] 的行

以上是关于mondrian mdx 过滤日期维度中年份级别的集合的主要内容,如果未能解决你的问题,请参考以下文章

使用 Mondrian 在 MDX 查询中获取每个轴的级别

MDX 查询以对具有特定日期范围的日期维度进行分组

如何从 MDX 查询中提取日期中的月份年份

每天在 Mondrian MDX 中获取用户数量

如何在 MDX 中对同一维度进行分组和过滤

如何根据另一个维度的当前级别过滤一个维度?