Filter 如何使用MDX筛选函数按名称排除特定成员
我需要一个MDX查询来显示多组数据,并使用一个过滤器来排除某些ID号。 例如,此查询将只包含一个ID号Filter 如何使用MDX筛选函数按名称排除特定成员,filter,mdx,Filter,Mdx,我需要一个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 我想做的是排除一
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
我想做的是排除一组像这样的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成员的正确语法是什么?我相信您不需要()任何东西 第一个用例可以重写为:
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
希望能有所帮助。MarcP已经给了您答案,但另一个有趣的可能性是
子选择。这会将您的策略ID汇总到该层次结构的所有成员中
下面是一个针对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;
(upped)可能值得添加第二个脚本的版本,但第二个脚本的版本除外:我认为它更明确,更容易理解。感谢各位的回复,这非常有用。然而,我想做的不是排除一个我已经知道的特定ID,而是一组不同维度的ID[PolicyB]。PolicyB有[Policy ID]和[Policy Date]成员。所以我想做的是从Policy Exect中为Policy B中的任何ID为所选日期选择Policy ID。@BillyWinter您的问题只使用一个维度<代码>[策略]。
。如果这是错误的,请更改问题。问题的关键部分显示[PolicyB]维度:[Policy].[Policy ID]。名称****不在[PolicyB].[Policy ID]中。所有成员****