MDX - 即使过滤时总计相同

MDX - same grand total even when filtering

我有一个计算成员,它提供了所有商店的总销售额。我使用的公式是这样的:

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

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

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

但是我怎样才能创建一个计算成员,无论使用任何过滤器,它都能为我带来所有商店的总销售额?

您计算的是所有商店的总数,因为公式中有 [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] 成员,它将取代过滤器选择。

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

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];