MDX - 即使在过滤时也相同

时间:2015-02-16 10:26:37

标签: mdx mondrian

我有一个计算成员,它会带来所有商店的总销售额。我使用的公式是:

SUM(([SHOP].[SHOP].Members), [Measures].[SALES])

所以,即使我过滤了一家商店,上面计算的会员仍然会给我带来所有商店的总数。

问题在于,如果我过滤任何其他维度(让我们说区域),我的计算成员将为我带来所选区域的总数 - 我知道这是正确的行为。

但是,我如何制作一个计算成员,为我带来所有商店的总销售额而不管任何过滤器?

2 个答案:

答案 0 :(得分:1)

您需要预测任何可能的切片器,然后将它们添加到您的度量中的元组中:

SUM(
  (
    [SHOP].[(All)]
   ,[REGION].[(All)]
  )
, [Measures].[SALES]
)

AdvWrks中嘲讽我通过将成员[(All)]添加到我的自定义度量的第一个参数中来预期添加时间切片器:

WITH 
  MEMBER [Measures].[X] AS 
    Sum
    (
      (
        [Subcategory].[(All)]
       ,[Date].[Calendar].[(All)]
      )
     ,[Measures].[Internet Sales Amount]
    ) 
SELECT 
  {
    [Measures].[Internet Sales Amount]
   ,[Measures].[X]
  } ON 0
 ,[Subcategory].[Subcategory].MEMBERS ON 1
FROM [Adventure Works]
WHERE 
  [Date].[Calendar].[Calendar Year].&[2008];

答案 1 :(得分:0)

由于您在公式中有[SHOP].[SHOP].Members,因此您获得所有商店的总数。

这一点让我困惑:

how can I make a calculated member that brings me the total Sales for all the Shops regardless of any filter?

您已经有这样的会员。如果你想要一个让你获得所选SHOP销售额的会员,你真正需要的是:

SUM([SHOP].[SHOP].CurrentMember, [Measures].[SALES])

修改

回想起来,我可能理解你的难题。如果您希望此计算不受选择任何其他过滤器的影响,您可能需要做的是编辑成员的定义以包含多维数据集中每个层次结构的ALL成员。像

这样的东西
SUM(([SHOP].[SHOP].Members, [Region].[Region].Members),......), [Measures].[SALES])

为什么需要这样做是因为引擎首先完成了每个不完整的元组。它隐式添加了每个层次结构中的[ALL]成员,除非该层次结构也存在于切片器中。 ,如果您明确添加[ALL]成员,则会取代过滤器选择。