Ssas 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查询中相交

一,

二,

我尝试的
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]
  );