如何在Excel中为计算成员使用MDX集?

时间:2015-11-24 18:31:56

标签: excel ssas mdx pivot-table

我正在使用Excel 2013和SSAS 2014.我正在尝试根据报告上下文将多个成员组合在一起以生成报告。

我正在尝试通过创建一个包含我要分组的所有成员的自定义成员来实现此目的。如果我对该成员进行硬编码,它可以正常工作,但是使用MDX会失败。

这有效:

[Terminals].[Terminal].[Terminal 1] + [Terminals].[Terminal].[Terminal 2]

这不起作用:

Union([Terminals].[Terminal].[Terminal 1], [Terminals].[Terminal].[Terminal 2])

根据+ {运算符的documentation

  

+(Union)运算符在功能上等同于Union(MDX)函数。

然而,情况并非如此,因为用联合函数的加号替换不会产生相同的结果。我在MDX参考中找不到另一种形式的加号运算符。

最终我要做的是通过数据定义规则过滤层次结构中的成员:

Filter(
  [Terminals].[Terminal].Children,
  ClosingPeriod([Date].[By Week].[Date], [Measures].[Days])
)

上述函数返回一组终端,其中在查询中选择的句点的最后一天存在记录。用户可能希望从报告中包含或排除这些内容。

如何在Excel中为计算成员使用MDX集?

UPDATE:

Greg的建议使用以下语法与Filter一起使用:

Aggregate(
    FILTER(
        NonEmpty([Terminals].[Terminal ID].Members),
        (ClosingPeriod([Date].[By Week].[Date]),[Measures].[Days]) = 1
    )
)

请注意,儿童无效,但会员无效。

1 个答案:

答案 0 :(得分:2)

如果要将计算所得成员添加到“终端”维度,则可以使用:

Aggregate(
 Union([Terminals].[Terminal].[Terminal 1], [Terminals].[Terminal].[Terminal 2])
)

如果要创建新的计算度量,请执行以下操作:

Aggregate(
 Union([Terminals].[Terminal].[Terminal 1], [Terminals].[Terminal].[Terminal 2])
,[Measures].[Your Other Measure]
)

相同的模式可以应用于更复杂的Filter()表达式。