MDX仅显示最佳销售人员的价值

时间:2015-04-08 08:29:48

标签: mdx olap

我们说我有两个简单的维度:

  

产品 - 具有ID和名称

     

销售员 - 具有ID和名称

我的事实表名为SALES,包含上述的ids。

假设产品X已由销售员A,B和C出售。

产品Y由销售员B,C和D

出售

我想生成一个MDX查询,它会告诉我销售这两种产品的销售人员的姓名。在这种情况下,结果将是B和C

我的尝试:

select {null} on 0,
DESCENDANTS (
[Salesmen].[Name].children
) on 1
FROM [Test]
where (
{
       (
             [Products].[Name].&[X]
       )
,
       (
             [Products].[Name].&[Y]
       )
}
)

1 个答案:

答案 0 :(得分:1)

请尝试嵌套exist这样的功能:

SELECT 
  {} on 0,
  EXISTS(
    EXISTS(
       {[Salesmen].[Name].MEMBERS}, //<<TRY THIS INSTEAD
       {[Products].[Name].&[X]}
    )
    ,{[Products].[Name].&[Y]}
  )
  ON 1
FROM [Test];

严格来说EXISTS需要一个度量组的名称作为它的第三个参数:

SELECT 
  {} on 0,
  EXISTS(
    EXISTS(
       {[Salesmen].[Name].MEMBERS} //<<TRY THIS INSTEAD
       ,{[Products].[Name].&[X]}
       ,"Reseller Sales" //<<replace with group name from your cube
    )
    ,{[Products].[Name].&[Y]}
    ,"Reseller Sales" //<<replace with group name from your cube
  )
  ON 1
FROM [Test];

另一种方法是使用层次结构[Measures]中的成员以及函数NonEmptyIntersect

SELECT 
  {} on 0,
  INTERSECT(
    NONEMPTY(
       {[Salesmen].[Name].MEMBERS}
       ,([Products].[Name].&[X],[Measures].[SomeMeasureInYourCube])
    )
   ,NONEMPTY(
       {[Salesmen].[Name].MEMBERS}
       ,([Products].[Name].&[Y],[Measures].[SomeMeasureInYourCube])
    )
  )
  ON 1
FROM [Test];

上述内容可能仅适用于仅限产品成员的简单元组

SELECT 
  {} on 0,
  INTERSECT(
    NONEMPTY(
       {[Salesmen].[Name].MEMBERS}
       ,([Products].[Name].&[X])
    )
   ,NONEMPTY(
       {[Salesmen].[Name].MEMBERS}
       ,([Products].[Name].&[Y])
    )
  )
  ON 1
FROM [Test];