按多个维度成员进行 MDX 过滤
MDX filtering by multiple dimension members
问题
我需要创建一个报告,其中将列出许多符合特定条件的帐户 - simulationDate
、statisticPeriod
、region
。
现在我的查询如下所示:
WITH MEMBER [Measures].[Count] as 1
SELECT [Measures].[Count] ON COLUMNS,
NON EMPTY
Crossjoin(
[Account].[Account Number].ALLMEMBERS,
{[simulationDate].[day].&[10010101]},
{[statisticPeriod].[period].&[201201]},
{[region].[code].&[SO]}
)
ON COLUMNS
FROM [myWH]
这个跨维度过滤可以吗?
使用 *
表示法而不是 Crossjoin
函数稍微现代一些:
WITH
MEMBER [Measures].[Count] AS 1
SELECT
[Measures].[Count] ON COLUMNS
,NON EMPTY
[Account].[Account Number].ALLMEMBERS*
{[simulationDate].[day].&[10010101]}*
{[statisticPeriod].[period].&[201201]}*
{[region].[code].&[SO]} ON COLUMNS
FROM [myWH];
我假设您的自定义度量 [Measures].[Count]
只是一个占位符?
如果您在 COLUMNS
上进行交叉连接,则此 table 将非常宽,但这可能只是一个错字:
WITH
MEMBER [Measures].[Count] AS 1
SELECT
[Measures].[Count] ON COLUMNS,
NON EMPTY
[Account].[Account Number].ALLMEMBERS*
{[simulationDate].[day].&[10010101]}*
{[statisticPeriod].[period].&[201201]}*
{[region].[code].&[SO]} ON ROWS
FROM [myWH];
您已在行交叉连接前添加关键字 NON EMPTY
。这告诉处理器排除任何空行 - [Measures].[Count]
为空......但是这个度量是 never 空它总是等于 1。所以下面没有 Non Empty
应该 return 完全相同的结果:
WITH
MEMBER [Measures].[Count] AS 1
SELECT
[Measures].[Count] ON COLUMNS,
[Account].[Account Number].ALLMEMBERS*
{[simulationDate].[day].&[10010101]}*
{[statisticPeriod].[period].&[201201]}*
{[region].[code].&[SO]} ON ROWS
FROM [myWH];
因此,就过滤而言,您没有做任何事情 - 您需要什么样的过滤?如果您将 [Measures].[Count]
替换为多维数据集的实际度量并使用 NON EMPTY,那么您应该看到更少的行:
SELECT
[Measures].[ReplaceWithActualMeasure] ON COLUMNS,
NON EMPTY
[Account].[Account Number].ALLMEMBERS*
{[simulationDate].[day].&[10010101]}*
{[statisticPeriod].[period].&[201201]}*
{[region].[code].&[SO]} ON ROWS
FROM [myWH];
最后我最终使用过滤器作为我的列,并让 NON EMPTY 子句负责过滤:
SELECT
NON EMPTY
{[simulationDate].[day].&[10010101]} *
{[statisticPeriod].[period].&[201201]} *
{[region].[code].&[SO]}
ON COLUMNS,
NON EMPTY
[Account].[Account Number].ALLMEMBERS
ON ROWS
FROM [myWH]
问题
我需要创建一个报告,其中将列出许多符合特定条件的帐户 - simulationDate
、statisticPeriod
、region
。
现在我的查询如下所示:
WITH MEMBER [Measures].[Count] as 1
SELECT [Measures].[Count] ON COLUMNS,
NON EMPTY
Crossjoin(
[Account].[Account Number].ALLMEMBERS,
{[simulationDate].[day].&[10010101]},
{[statisticPeriod].[period].&[201201]},
{[region].[code].&[SO]}
)
ON COLUMNS
FROM [myWH]
这个跨维度过滤可以吗?
使用 *
表示法而不是 Crossjoin
函数稍微现代一些:
WITH
MEMBER [Measures].[Count] AS 1
SELECT
[Measures].[Count] ON COLUMNS
,NON EMPTY
[Account].[Account Number].ALLMEMBERS*
{[simulationDate].[day].&[10010101]}*
{[statisticPeriod].[period].&[201201]}*
{[region].[code].&[SO]} ON COLUMNS
FROM [myWH];
我假设您的自定义度量 [Measures].[Count]
只是一个占位符?
如果您在 COLUMNS
上进行交叉连接,则此 table 将非常宽,但这可能只是一个错字:
WITH
MEMBER [Measures].[Count] AS 1
SELECT
[Measures].[Count] ON COLUMNS,
NON EMPTY
[Account].[Account Number].ALLMEMBERS*
{[simulationDate].[day].&[10010101]}*
{[statisticPeriod].[period].&[201201]}*
{[region].[code].&[SO]} ON ROWS
FROM [myWH];
您已在行交叉连接前添加关键字 NON EMPTY
。这告诉处理器排除任何空行 - [Measures].[Count]
为空......但是这个度量是 never 空它总是等于 1。所以下面没有 Non Empty
应该 return 完全相同的结果:
WITH
MEMBER [Measures].[Count] AS 1
SELECT
[Measures].[Count] ON COLUMNS,
[Account].[Account Number].ALLMEMBERS*
{[simulationDate].[day].&[10010101]}*
{[statisticPeriod].[period].&[201201]}*
{[region].[code].&[SO]} ON ROWS
FROM [myWH];
因此,就过滤而言,您没有做任何事情 - 您需要什么样的过滤?如果您将 [Measures].[Count]
替换为多维数据集的实际度量并使用 NON EMPTY,那么您应该看到更少的行:
SELECT
[Measures].[ReplaceWithActualMeasure] ON COLUMNS,
NON EMPTY
[Account].[Account Number].ALLMEMBERS*
{[simulationDate].[day].&[10010101]}*
{[statisticPeriod].[period].&[201201]}*
{[region].[code].&[SO]} ON ROWS
FROM [myWH];
最后我最终使用过滤器作为我的列,并让 NON EMPTY 子句负责过滤:
SELECT
NON EMPTY
{[simulationDate].[day].&[10010101]} *
{[statisticPeriod].[period].&[201201]} *
{[region].[code].&[SO]}
ON COLUMNS,
NON EMPTY
[Account].[Account Number].ALLMEMBERS
ON ROWS
FROM [myWH]