2017-02-17 67 views
1

我希望有人可以帮助我重组/重写我的MDX查询 - 我对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],那么伤害包括在图表中。

有没有一种方法可以重构我的MDX,以便2月的条形不会显示2月份的所有数据,但只有Fenruary的数据是> = $ {mdxStartDateParam}和< = $ {mdxEndDateParam}?

回答

0

不知道有关MDX的话你使用,还是能够看到维度结构什么,我的猜测是,这个问题是[日期范围]的定义:

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

如果这两个参数是在Day级别,.Parent是否返回父级月份?

的解决方案可能是导致日期范围是一组天数:

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

,然后通过总莫名其妙一个月。

+0

我认为Danylo的答案应该可行 - 如果用户在其多维数据集中使用月份属性hierachy? – whytheq

+0

是的,它应该工作。我没有关于可用层次结构的足够信息。问题的关键不在于使用日期参数来创建一组月份,然后将这些月份(作为整体)用作过滤器。 Danylo通过将参数放在WHERE中解决了这个问题。 – SebTHU

1

由于Mondrian不支持子查询,因此无法将日历层次结构用于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}}) 

否则,您必须处理显示的天,并将它们组合后。

+0

这应该起作用:用户将在多维数据集中至少有一个属性层次结构。他们可能还需要更改'[Measures]。[Month Name]'的定义。 – whytheq