尝试在Pentaho Mondrian Cube中重新创建此公式。
IIF(ISLEAF([时间]。[月] .CurrentMember)),[措施] .m1,0)
此公式已在SSAS多维数据集中使用。需要在Pentaho Mondrian Cube中重新创建类似的公式。
IsLeaf可以在蒙德里安使用,还是有其他选择吗?
答案 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
)
可能存在问题且需要测试的一些要点:
如果最后一个[Time]成员的空m1,则如何计算度量 衡量(如果这是您的衡量标准的有效案例)
如何在[时间]的不同级别计算度量 层次结构。
如果您未使用[时间]维度,则如何计算度量 明确报告。
如果在切片器上使用[时间]维度,则如何计算度量 仅限轴(在WHERE条件下)
如果使用受限制的[时间],如何计算度量
成员,例如明确枚举集合文字中的成员(例如
{[Time].[2006].[01], [Time].[2006].[02]}
)或通过使用Filter()
维度上的功能。
如果在其他方面使用fiters,如何计算度量 尺寸/措施。
如何计算[时间]的计算成员的指标 维度(包括由Analyzer生成的总计和小计)。
如果从不同的成员中选择成员,则如何计算度量 同一轴上的水平。