如何在 mondrian mdx 公式中使用 IsLeaf?
How to use IsLeaf in mondrian mdx formula?
尝试在 Pentaho Mondrian Cube 中重新创建此公式。
iif(ISLEAF([时间].[月].CurrentMember)),[措施].m1,0)
此公式已在 SSAS 多维数据集中使用。需要在 Pentaho Mondrian Cube 中重新创建类似的公式。
IsLeaf 可以在 mondrian 中使用还是有其他替代方法?
像下面这样的东西应该可以在默认层次结构中的任意级别工作。
它将 return [Mesures].m1 用于最后一年,如果您 select [Time].[Year]
成员(具有非空 m1 测量并满足您的过滤条件) .
或者它会 return 去年最后一个月的度量,如果你 select [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
)
一些可能有问题需要测试的点:
最后一个[Time]成员m1为空时如何计算度量
测量(如果这是您测量的有效案例)
如何在 [时间] 的不同级别计算度量
层次结构。
如果不使用 [Time] 维度,度量是如何计算的
明确报告。
如果在切片器上使用 [时间] 维度,则如何计算度量
仅轴(在 WHERE 条件下)
如果使用 [Time] 的限制集,度量是如何计算的
成员,例如显式枚举集合文字中的成员(例如
{[Time].[2006].[01], [Time].[2006].[02]}
) 或通过使用 Filter()
维度上的函数。
如果您在其他设备上使用 fiter,该度量是如何计算的
dimensions/measures.
如何在 [Time] 的计算成员处计算度量值
维度(包括 Analyzer 生成的总计和小计)。
如果 select 来自不同国家的成员,如何计算度量
水平在同一轴上。
尝试在 Pentaho Mondrian Cube 中重新创建此公式。
iif(ISLEAF([时间].[月].CurrentMember)),[措施].m1,0)
此公式已在 SSAS 多维数据集中使用。需要在 Pentaho Mondrian Cube 中重新创建类似的公式。
IsLeaf 可以在 mondrian 中使用还是有其他替代方法?
像下面这样的东西应该可以在默认层次结构中的任意级别工作。
它将 return [Mesures].m1 用于最后一年,如果您 select [Time].[Year]
成员(具有非空 m1 测量并满足您的过滤条件) .
或者它会 return 去年最后一个月的度量,如果你 select [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
)
一些可能有问题需要测试的点:
最后一个[Time]成员m1为空时如何计算度量 测量(如果这是您测量的有效案例)
如何在 [时间] 的不同级别计算度量 层次结构。
如果不使用 [Time] 维度,度量是如何计算的 明确报告。
如果在切片器上使用 [时间] 维度,则如何计算度量 仅轴(在 WHERE 条件下)
如果使用 [Time] 的限制集,度量是如何计算的 成员,例如显式枚举集合文字中的成员(例如
{[Time].[2006].[01], [Time].[2006].[02]}
) 或通过使用 Filter() 维度上的函数。如果您在其他设备上使用 fiter,该度量是如何计算的 dimensions/measures.
如何在 [Time] 的计算成员处计算度量值 维度(包括 Analyzer 生成的总计和小计)。
如果 select 来自不同国家的成员,如何计算度量 水平在同一轴上。