因为在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 语句定义的多个计算度量。
谢谢!
答案 0 :(得分:2)
你所做的是标准的 - 是这个简单的方法!
使用子选择时要记住的一件事是它不是完整的过滤器,因为原始的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成员时有点混乱,但这种行为很有用。