2017-02-17 68 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