MDX:定义维度子集并显示总数

MDX: Define dimension sub set and show the total

由于在MDX中可以指定成员[all]来添加维度所有成员之间的聚合,如果我想显示某个度量的总计我可以构建类似

的查询
SELECT {
    [MyGroup].[MyDimension].[MyDimension].members, 
    [MyGroup].[MyDimension].[all] 
    } *
    [Measures].[Quantity] on 0
FROM [MyDatabase]

现在我想 过滤 MyDimension 以获得一堆值并显示所选值的总和,当然如果我生成查询

SELECT {
    [MyGroup].[MyDimension].[MyDimension].&[MyValue1], 
    [MyGroup].[MyDimension].[MyDimension].&[MyValue2], 
    [MyGroup].[MyDimension].[all] 
    } *
    [Measures].[Quantity] on 0
FROM [MyDatabase]

它显示了 MyValue1、MyValue2 的数量以及所有 MyDimension 成员的总数,而不仅仅是我选择的成员

我进行了一些调查并提出了一个解决方案,其中包括生成一个子查询来过滤我的值

SELECT {
    [MyGroup].[MyDimension].[MyDimension].members, [MyGroup].[MyDimension].[all]
    } * [Measures].[Quantity] ON 0
FROM (
    SELECT {
        [MyGroup].[MyDimension].[MyDimension].&[MyValue1], 
        [MyGroup].[MyDimension].[MyDimension].&[MyValue2]
        } ON 0
    FROM [MyDatabase]
)

假设这可行,是否有更简单或更直接的方法来实现此目的

我尝试使用 SET 语句来定义我的自定义元组集,但后来我无法显示总数。

请记住,在我的示例中,我让事情尽可能简单,但在实际情况下,我可以在行和列上有多个维度,以及用 MEMBER[= 定义的多个计算度量35=]声明。

谢谢!

您所做的是标准的 - 最简单的方法!

使用 sub-select 时要记住的一件事是它不是完整的过滤器,因为原始的 All 仍然可用。我认为这与 mdx 中的子句的查询处理有关 - 这是我的意思的示例:

WITH 
  MEMBER [Product].[Product Categories].[All].[All of the Products] AS 
    [Product].[Product Categories].[All] 
SELECT 
  [Measures].[Internet Sales Amount] ON 0
 ,NON EMPTY 
    {
      [Product].[Product Categories].[All]                        //X
     ,[Product].[Product Categories].[All].[All of the Products]  //Y
     ,[Product].[Product Categories].[Category].MEMBERS
    } ON 1
FROM 
(
  SELECT 
    {
      [Product].[Product Categories].[Category].&[4]
     ,[Product].[Product Categories].[Category].&[1]
    } ON 0
  FROM [Adventure Works]
);

所以标记 X 的行将是类别 4 和 1 的总和,但 Y 行仍将指代整个 Adventure Works:

虽然在 WITH 子句中使用 All 成员时有点混乱,但这种行为很有用。