我需要一个MDX查询来显示几组数据,并使用过滤器排除某些ID号。 例如,此查询将仅包含一个ID号
SELECT [Measures].[Gross Amt] ON COLUMNS,
FILTER(
[Policy].[Policy Name].[Policy Name]
* [Policy].[Policy ID].[Policy ID],
[Policy].[Policy ID].Name = "622743"
)
ON ROWS
FROM EXPOSURE
我想要做的是EXLUDE一组像这样的ID
SELECT [Measures].[Gross GAAP Par OS Amt] ON COLUMNS,
FILTER(
[Policy].[Policy Name].[Policy Name]
* [Policy].[Policy ID].[Policy ID],
[Policy].[Policy ID].Name
****NOT IN [PolicyB].[Policy ID].AllMembers****
)
ON ROWS
FROM EXPOSURE
排除PolicyB成员的正确语法是什么?
答案 0 :(得分:3)
我相信你不需要Filter()任何东西。
第一个用例可以改写如下:
SELECT
[Measures].[Gross Amt] ON COLUMNS,
{ [Policy].[Policy Name].[Policy Name] } * { [Policy].[Policy ID].[622743] } ON ROWS
FROM EXPOSURE
对于要排除的ID集,您可以使用 - 运算符:
SELECT
[Measures].[Gross Amt] ON COLUMNS,
{ [Policy].[Policy Name].[Policy Name] } * ( [Policy].[Policy ID].members - { [Policy].[Policy ID].[622743], ... } ) ON ROWS
FROM EXPOSURE
希望有所帮助。
答案 1 :(得分:1)
MarcP给了你答案,但另一个有趣的可能性是sub-select
。这会将您的策略ID汇总到该层次结构的All成员中。
以下是针对AdvWks多维数据集的示例:
SELECT
[Date].[Calendar Year].[Calendar Year] ON 0
,
{[Customer].[Customer].MEMBERS} * {[Measures].[Internet Sales Amount]} ON 1
FROM
(
SELECT
[Customer].[Customer].&[20075] ON 0
FROM [Adventure works]
);
因此适用于您的场景:
SELECT
[Measures].[Gross Amt] ON COLUMNS
,
{[Policy].[Policy Name].[Policy Name]} * {[Policy].[Policy ID].MEMBERS} ON ROWS
FROM
(
SELECT
[Policy].[Policy ID].[622743] ON 0
FROM EXPOSURE
);
然后以比使用-
运算符更明显的方式排除我建议使用EXCEPT
:
SELECT
[Measures].[Gross Amt] ON COLUMNS
,
{[Policy].[Policy Name].[Policy Name]} * {[Policy].[Policy ID].MEMBERS} ON ROWS
FROM
(
SELECT
Except
(
[Policy].[Policy ID].MEMBERS
,[Policy].[Policy ID].[622743]
) ON 0
FROM EXPOSURE
);
以下(我认为)与Marc的第二个脚本完全相同,只是语法不同:
SELECT
[Measures].[Gross Amt] ON COLUMNS
,
{[Policy].[Policy Name].[Policy Name]}
*
Except
(
[Policy].[Policy ID].MEMBERS
,{[Policy].[Policy ID].[622743]}
) ON ROWS
FROM EXPOSURE;
进一步的想法是,您还可以在层次结构中添加一个成员,代表所有类似于此的集合:
WITH
MEMBER [Policy].[Policy ID].[All excl 622743] AS
Aggregate
(
Except
(
[Policy].[Policy ID].MEMBERS
,{[Policy].[Policy ID].[622743]}
)
)
SELECT
[Measures].[Gross Amt] ON COLUMNS
,
{[Policy].[Policy Name].[Policy Name]}
*
[Policy].[Policy ID].[All excl 622743] ON ROWS
FROM EXPOSURE;