当在Excel中过滤子成员时,Adventureworks MDX计算不会更新成员

我有一个MDX计算问题。

基本上在立方体中的计算是

[Operating Profit] = [Gross Margin] - [Operating Expenses]

当我使用excel过滤掉[Operating Expenses]子成员时,这个计算不会更新。 例如取消选中[Labor Expenses]营业利润应该改变,但是它保持不变。

在Excel2013中创build了以下计算成员作为testing,但是这也是静态的。

 WITH MEMBER [Account].[Accounts].[Operating Profit Calc] as [Account].[Accounts].&[49] - [Account].[Accounts].&[58] 

我已经花了一些时间尝试MDX existing function ,但我无法得到这与[Operating Expenses] (&[58]) memberDescendants [Operating Expenses] (&[58]) member

(请下载并更新连接到您当地的AW多维数据集)

AdventureWorks例子

想通了,关键是要用dynamic设置

创build以下dynamic集。

create hidden dynamic set currentcube.[OPEX_dyn] as { intersect( existing [Account].[Accounts].members , descendants([Account].[Accounts].&[58],,LEAVES) ) };

mdx existing函数在维度中的所有成员在Excel中处于活动状态(选中状态)。

descendants函数返回目标“操作费用”(key&[58])成员下的所有叶子成员。 这包括所有的孩子,不pipe后代叶子成员是否在excel中被选中/过滤。

intersect函数基本上将existingfunction应用于目标成员的后代,返回被select的目标下的一组叶子成员。

通过添加以下计算的成员,仅聚合目标成员的选定子/ desc

WITH MEMBER [Account].[Accounts].[OPEX dynamic] as sum([OPEX_dyn],[Measures].currentmember)

上面的例子只能部分解决AdventureWorks立方体中的初始计算问题,因为AW立方体在分支级别使用正负号一元运算符进行聚合,而此方法将只求和叶子成员。 即

 [Operating Profit] = [Gross Margin] - [Operating Expenses] 
Interesting Posts