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 成员时有点混乱,但这种行为很有用。
由于在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 成员时有点混乱,但这种行为很有用。