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

MDX-按[天]过滤,但显示[月]的类别,mdx,pentaho,mondrian,Mdx,Pentaho,Mondrian,我希望有人能帮助我重新构造/重写我的MDX查询——我对MDX相当陌生,只知道有足够的危险。如果有什么不同的话,我会用蒙德里安 这是我正在制作的堆叠条形图… 这是我的问题(简化为删除所有与此问题无关的内容) 我的问题是,我的两个日期参数(${mdxStartDateParam}和${mdxEndDateParam})可以是[Day]级别的任何日期,而我的图表X轴显示在[Month]级别,即使${mdxStartDateParam}在一个月的中途,我的查询也会返回该月的所有数据 例如,如果我的受伤

我希望有人能帮助我重新构造/重写我的MDX查询——我对MDX相当陌生,只知道有足够的危险。如果有什么不同的话,我会用蒙德里安

这是我正在制作的堆叠条形图…

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

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

例如,如果我的受伤发生在2月2日,但我的${mdxStartDateParam}是[Incident Date.YQMD].[2017].[Q1].[Feb].[17],则该受伤情况将包含在图表中


有没有一种方法可以重新构造我的MDX,使二月的条形图不显示二月的所有数据,而只显示Fenruary的数据,即>=${mdxStartDateParam}和,而不知道您使用的MDX方言,或者能够看到维度结构,我猜问题在于[日期范围]:

SET [Date Range] AS {${mdxStartDateParam}.Parent : ${mdxEndDateParam}.Parent}
如果这两个参数为天级别,则.Parent是否返回其父月份

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

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

然后以某种方式按月份进行聚合。

由于Mondrian不支持子查询,您不能对where子句和axis同时使用日历层次结构。此外,也无法筛选日期并仅在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}})

否则,您必须处理显示的日期,并在之后对其进行分组。

这应该有效:用户在多维数据集中至少有一个月的属性层次结构。然后,他们可能还需要更改
[Measures].[month Name]的定义
。我认为Danylo的答案应该行得通-如果用户在多维数据集中使用月属性层次结构?是的,应该行得通。我没有足够的关于层次结构的信息。问题的关键是不要使用日期参数创建一组月,然后使用这些月(作为一个整体)Danylo通过将参数放在WHERE中来解决这个问题。
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}})