我希望有人能帮助我重组/重写我的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}?
答案 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}
然后按月以某种方式汇总。