Ssas MDX中的相交选择查询
我想让客户在两个mdx查询中相交 一, 二, 我尝试的Ssas MDX中的相交选择查询,ssas,mdx,olap,Ssas,Mdx,Olap,我想让客户在两个mdx查询中相交 一, 二, 我尝试的mdx脚本: SELECT {} ON COLUMNS, INTERSECT( ( Select [Measures].[Cs] on 0, nonempty([Customers].[Customer].members) on 1 from [sfe cube] WHERE ([Calend].[Period].&[201506] ,[Customers].[BP Territory].&
mdx
脚本:
SELECT
{} ON COLUMNS,
INTERSECT(
( Select [Measures].[Cs] on 0,
nonempty([Customers].[Customer].members) on 1
from [sfe cube]
WHERE ([Calend].[Period].&[201506]
,[Customers].[BP Territory].&[38UZ1]
,[Materials].[Brand].&[Coca-Cola])
)
,
( Select [Measures].[Cs] on 0,
nonempty([Customers].[Customer].members) on 1
from [sfe cube]
WHERE ([Calend].[Period].&[201506]
,[Customers].[BP Territory].&[38UZ1]
,[Materials].[Brand].&[Fanta Orange CSD]))
) ON ROWS
FROM [sfe cube]
运行查询时出现错误:
子选择仅支持轴柱
我做错了什么?你的语法出了问题!检查
INTERSECT
的语法
我获得“普通”客户的方式如下:
WITH SET CommonCustomers AS
INTERSECT(
NonEmpty(
[Customers].[Customer].members,
(
[Calend].[Period].&[201506],
[Customers].[BP Territory].&[38UZ1],
[Materials].[Brand].&[Coca-Cola]
) * [Measures].[Cs]
)
,
NonEmpty(
[Customers].[Customer].members,
(
[Calend].[Period].&[201506],
[Customers].[BP Territory].&[38UZ1],
[Materials].[Brand].&[Fanta Orange CSD]
) * [Measures].[Cs]
)
)
SELECT {} ON COLUMNS,
CommonCustomers ON ROWS
FROM [sfe cube]
您可以为
和逻辑实现类似的功能:
WITH
SET [YourSet] AS
NonEmpty
(
NonEmpty
(
{[Customers].[Customer].MEMBERS}
,{[Materials].[Brand].&[Fanta Orange CSD]}
)
,{[Materials].[Brand].&[Coca-Cola]}
)
SELECT
[Measures].[Cs] ON 0
,NON EMPTY [YourSet] ON 1
FROM [sfe cube]
WHERE
(
[Calend].[Period].&[201506]
,[Customers].[BP Territory].&[38UZ1]
);
使用的另一个变体(我更喜欢)Exists
在本文中详细介绍:
我喜欢苏拉夫的想法。我认为他的剧本可以稍微简化为:
WITH
SET CommonCustomers AS
Intersect
(
NonEmpty
(
[Customers].[Customer].MEMBERS
,[Materials].[Brand].&[Coca-Cola]
)
,NonEmpty
(
[Customers].[Customer].MEMBERS
,[Materials].[Brand].&[Fanta Orange CSD]
)
)
SELECT
{[Measures].[Cs]} ON COLUMNS
,NON EMPTY
CommonCustomers ON ROWS
FROM [sfe cube]
WHERE
(
[Calend].[Period].&[201506]
,[Customers].[BP Territory].&[38UZ1]
);
对不起,我不同意。如果[Measures].[Cs]
不是“Measures”维度中的默认成员,它会将所有非空的单元格提取到默认度量值,而不是此度量值。因此,有机会选择较少或更多的客户。因此,我觉得如果在NonEmpty
的第二个参数中没有指定度量值,则过滤将是任意的(或者基于默认度量值,由引擎任意选择).@Sourav_Agasti有趣-包含非空
应该涵盖这种可能性?非空
对性能有害?!请添加一些支持本文的文章的参考资料?或者你的意思是在我的特定脚本中使用非空
对性能有害吗?一般来说,应该避免使用它,因为它会遍历整个行集以查找空元组。如果空元组可以在NonEmpty
中减少,我感觉会更好。另外,供您参考,它比非空
要慢得多。最后,这是我个人的看法。您有权拥有自己的:)此外,如果默认度量值不同于[Measures].[Cs]
,那么非空的将如何处理它返回更多或更少客户的可能性?
WITH
SET [YourSet] AS
NonEmpty
(
NonEmpty
(
{[Customers].[Customer].MEMBERS}
,{[Materials].[Brand].&[Fanta Orange CSD]}
)
,{[Materials].[Brand].&[Coca-Cola]}
)
SELECT
[Measures].[Cs] ON 0
,NON EMPTY [YourSet] ON 1
FROM [sfe cube]
WHERE
(
[Calend].[Period].&[201506]
,[Customers].[BP Territory].&[38UZ1]
);
WITH
SET CommonCustomers AS
Intersect
(
NonEmpty
(
[Customers].[Customer].MEMBERS
,[Materials].[Brand].&[Coca-Cola]
)
,NonEmpty
(
[Customers].[Customer].MEMBERS
,[Materials].[Brand].&[Fanta Orange CSD]
)
)
SELECT
{[Measures].[Cs]} ON COLUMNS
,NON EMPTY
CommonCustomers ON ROWS
FROM [sfe cube]
WHERE
(
[Calend].[Period].&[201506]
,[Customers].[BP Territory].&[38UZ1]
);