2017-03-07 37 views
0

試圖在Pentaho Mondrian Cube中重新創建該公式。如何在mondrian mdx公式中使用IsLeaf?

IIF(ISLEAF([時間]。[月] .CurrentMember)),[措施] .m1,0)

該公式被在SSAS立方體使用已經。需要在Pentaho Mondrian Cube中重新創建類似的公式。

IsLeaf可以在mondrian中使用還是有其他選擇嗎?

+0

我不知道與SSAS。但你的要求是什麼? 如果你想要類似的例子:假設我想要所有男性的總和然後我將正確的是: SUM([categorized]。[MALE],[度量]。[性別])這是我的維度名稱。 –

+0

@WorkingHard ..感謝您的輸入..我的要求是爲維度月的最後一個節點查找度量m1的值..例如,將有12個月的選擇..所以在報告中最後一行應該顯示上個月(本例中爲第12個月)的m1值。如何在Pentaho中執行此操作? – Akira

+0

[Dim Month.columnname]。[1]如果它工作與否,請嘗試此操作。 –

回答

0

像下面這樣的東西應該在默認層次結構中的任意級別上工作。

如果您選擇[Time].[Year]成員,它將返回去年的[Mesures] .m1,其中(具有非空m1度量並滿足您的過濾條件)。

或者如果您選擇[Time].[Month]成員,它將返回去年最後一個月的度量值,該度量值具有非空m1度量。

雖然我不認爲如果混合使用不同級別的成員(例如WITH SET time_members AS {[Time].[2017], [Time].[2017].[1]. [Time].[2017].[1].[31]}

如果你不需要這樣一個通用的方法,那麼這種解決方案可以簡化和測量計算速度,將工作可能會得到改善。

警告:該查詢可能導致100%的CPU利用率(或者可能不會,我不確定),從而使您的服務器無響應。所以,請仔細選擇您的測試環境。

免責聲明:我目前沒有mondrian測試,所以下面的例子很可能有錯誤。

Iif(
    // Check if current [Time] member is the last member: 
    [Time].CurrentMember 
    IS 
    // Take the 0th member from the end of the set (AFAIK, mondrian sets are guaranteed to be ordered): 
    Tail(
     // AFAIK, Level.Members returns the full set of members, disregarding query filters. 
     // So I use Filter function to filter members, which don't exist in context of current cell. 
     // It should leave only members, which (are related to current cell and satisfy filter conditions of the query). 
     Filter(
      [Time].CurrentMember.Level.members 
      // If your measure is nullable, then you might want to use count measure in this condition instead of m1: 
      , NOT IsEmpty([Measures].m1) 
     ) 
     // Number of members to get by the Tail() function: 
     , 1 
     // Return the only member of the set as a Member (not as a Set): 
    ).Item(0) 
    // return if true 
    , [Measures].m1 
    // else: 
    , 0 
) 

可能有問題,需要一些點進行測試:

  1. 如何測量計算,如果最後的[時間]成員都有空M1 措施(如果這是一個有效的情況下,爲您的措施)

  2. 如何在[時間] 層次結構的不同級別上計算度量值。

  3. 如果您不明確使用 報告中的[時間]維度,如何計算度量值。

  4. 如何如果你只使用[時間]維上限幅器 軸線量度被計算(在條件)

  5. 如何如果使用受限集合[時間] 成員,例如的所述量度來計算明確地枚舉集合文字中的成員(例如, {[Time].[2006].[01], [Time].[2006].[02]})或者通過使用維度上的過濾器() 函數。

  6. 如果在其他 尺寸/度量上使用度量單位,度量方式是如何計算的。

  7. 如何在[時間] 維度(包括由分析器生成的總計和小計)的計算成員上計算度量值。

  8. 如果在同一軸上選擇不同 級別的成員,該度量是如何計算的。

+0

謝謝您的輸入..其爲我工作截至目前.. – Akira

+0

您可以請查看以下查詢?當我在Pentaho Aggregation設計器中創建一個名爲AggTable1的聚合表時,此查詢就會生成。 選擇 'Dim_Time'.'Time_Id'如'c0', 'Dim_Time'.'month_no'從 'Dim_Time'如'c1' 如'Dim_Time' 其中 'Dim_Time'.'Time_Id' =' AggTable1'.'Dim_Time_Month_(鍵)' 組由 'Dim_Time'.'Time_Id', 'Dim_Time'.'month_no' 爲了通過 ISNULL('Dim_Time'.'Time_Id')ASC,'Dim_Time'.' Time_Id' ASC 爲什麼在from子句中沒有選擇AggTable1表? – Akira

+0

對不起,沒有太多的聚合表經驗。我可以建議的唯一事情是檢查是否有不同的表具有相同的別名 - 在這種情況下,其中一個表不會出現在from子句中。 – user4637357