MDX - 按[日]过滤但显示[月]的类别

时间:2017-02-17 02:45:33

标签: mdx pentaho mondrian

我希望有人能帮助我重组/重写我的MDX查询 - 我对MDX很新,只知道危险。如果有所作为,我正在使用蒙德里安。

这是我正在制作的堆积条形图... Injuries by Month and Category

这是我的查询(简化以删除与此问题无关的所有内容)......

WITH
    SET [Date Range] AS {${mdxStartDateParam}.Parent : ${mdxEndDateParam}.Parent}

    MEMBER [Measures].[Month Name] as [Incident Date.YQMD].currentmember.parent.parent.name || "-" || [Incident Date.YQMD].currentmember.name

    SET [Classification Month Set] AS (
        Hierarchize(
            ORDER(
                Hierarchize(FILTER([Classification].[Classification].members,[Classification].CURRENTMEMBER IN {Descendants([Classification].[${paramInjClass}])})),
                [Measures].[Injury Count],
                BDESC
            )
        ) * [Date Range]
    )

SELECT {[Measures].[Injury Count], [Measures].[Month Name]} ON COLUMNS,
      NON EMPTY [Classification Month Set] ON ROWS
FROM [Injury Analysis]

我遇到的问题是我的两个日期参数($ {mdxStartDateParam}和$ {mdxEndDateParam})可以是[Day]级别的任何日期,而我的图表X Axis显示在[Month]级别,并且即使$ {mdxStartDateParam}在一个月中,我的查询也会返回该月的所有数据。

例如。如果我在2月2日发生了伤害,但是我的$ {mdxStartDateParam}是[事件日期.YQMD]。[2017]。[Q1]。[2月]。[17],那么伤害被包括在图表中。< / p>

有没有办法可以重构我的MDX,以便二月的栏不显示二月份的所有数据,只有Fenruary的数据是&gt; = $ {mdxStartDateParam}和&lt; = $ {mdxEndDateParam}?

2 个答案:

答案 0 :(得分:1)

由于Mondrian不支持子查询,因此不能将where calendar层次结构用于where子句和axis。此外,无法过滤天数并仅在轴上显示月份。因此,如果您有几天和几个月的单独层次结构,则可以使用以下内容:

WITH
    SET [Date Range] AS [YourDateDim].[YourHierarchyNotInDateParam].[MonthLevel].Members

    MEMBER [Measures].[Month Name] as [Incident Date.YQMD].currentmember.parent.parent.name || "-" || [Incident Date.YQMD].currentmember.name

    SET [Classification Month Set] AS (
        Hierarchize(
            ORDER(
                Hierarchize(FILTER([Classification].[Classification].members,[Classification].CURRENTMEMBER IN {Descendants([Classification].[${paramInjClass}])})),
                [Measures].[Injury Count],
                BDESC
            )
        ) * [Date Range]
    )

SELECT {[Measures].[Injury Count], [Measures].[Month Name]} ON COLUMNS,
      NON EMPTY [Classification Month Set] ON ROWS
FROM [Injury Analysis]
WHERE {${mdxStartDateParam}:${mdxEndDateParam}})

否则你必须处理显示的日期并将它们分组。

答案 1 :(得分:0)

在不了解MDX方言的情况下,您正在使用或能够看到维度结构,我的猜测是问题在于[日期范围]的定义:

WebView

如果这两个参数都是Day级别,那么.Parent会返回其父级月份吗?

解决方案可能是将日期范围设为一组天数:

SET [Date Range] AS {${mdxStartDateParam}.Parent : ${mdxEndDateParam}.Parent}

然后按月以某种方式汇总。