如何在mondrian mdx公式中使用IsLeaf?

时间:2017-03-07 10:44:22

标签: function mdx pentaho cube mondrian

尝试在Pentaho Mondrian Cube中重新创建此公式。

IIF(ISLEAF([时间]。[月] .CurrentMember)),[措施] .m1,0)

此公式已在SSAS多维数据集中使用。需要在Pentaho Mondrian Cube中重新创建类似的公式。

IsLeaf可以在蒙德里安使用,还是有其他选择吗?

1 个答案:

答案 0 :(得分: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利用率(或者可能不会,我不确定),从而使您的服务器无响应。因此,请仔细选择您的测试环境。

免责声明:此刻我没有蒙德里安进行测试,因此以下示例很可能会出错。

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. 如果最后一个[Time]成员的空m1,则如何计算度量 衡量(如果这是您的衡量标准的有效案例)

  2. 如何在[时间]的不同级别计算度量 层次结构。

  3. 如果您未使用[时间]维度,则如何计算度量 明确报告。

  4. 如果在切片器上使用[时间]维度,则如何计算度量 仅限轴(在WHERE条件下)

  5. 如果使用受限制的[时间],如何计算度量 成员,例如明确枚举集合文字中的成员(例如 {[Time].[2006].[01], [Time].[2006].[02]})或通过使用Filter() 维度上的功能。

  6. 如果在其他方面使用fiters,如何计算度量 尺寸/措施。

  7. 如何计算[时间]的计算成员的指标 维度(包括由Analyzer生成的总计和小计)。

  8. 如果从不同的成员中选择成员,则如何计算度量 同一轴上的水平。