MDX查询 - 谁销售的所有产品给出的最好的推销员(MDX query - best salesme

2019-10-22 13:27发布

比方说,我有两个简单的维度:

产品 - 具有ID和名称

销售人员 - 通过ID和名字我的事实表名为SALES,包含上述的ID。

我需要生成查询,将显示谁卖的所有产品给出的销售人员的名字。

此代码解决了两个项目X和Y的问题:

SELECT 
  {} on 0,
  EXISTS(
    EXISTS(
       {[Salesmen].[Name].MEMBERS}, 
       {[Products].[Name].&[X]}
    )
    ,{[Products].[Name].&[Y]}
  )
  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];

但是,这种方法变得麻烦,如果给定的产品列表很大,例如 - 100个随机产品..

Answer 1:

你有一个属性member_key的层次结构[Products].[Name] ? 我们可以测试这样的:

WITH
MEMBER [Measures].[Meas1] AS
 [Products].[Name].CurrentMember.PROPERTIES("KEY ID")
MEMBER [Measures].[Meas2] AS
 [Products].[Name].CurrentMember.MEMBER_Key
MEMBER [Measures].[Meas3] AS
 [Products].[Name].CurrentMember.MEMBERvalue
select
 {
  [Measures].[Meas1]
 ,[Measures].[Meas2]
 ,[Measures].[Meas3]
 } on COLUMNS, 
 [Products].[Name].MEMBERS on ROWS
FROM [Test];

希望的定制措施之一给你一个价值? 我假设将Meas2工作(交换到不同的一个,如果MEAS1或Meas3正在恢复的数字)

WITH
  MEMBER [Measures].[Meas2] AS
   [Products].[Name].CurrentMember.MEMBER_Key
  SET [ProdsetA] AS
   FILTER(
     [Products].[Name].MEMBERS
     ,[Measures].[Meas2] <100
   )
  SET [ProdsetB] AS
   FILTER(
     [Products].[Name].MEMBERS
     ,[Measures].[Meas2] >500
   )
SELECT 
 {} on 0,
 INTERSECT(
   NONEMPTY(
      {[Salesmen].[Name].MEMBERS}
      ,[ProdsetA]
   )
  ,NONEMPTY(
      {[Salesmen].[Name].MEMBERS}
      ,[ProdsetB]
   )
 )
 ON 1
FROM [Test];

...的>100<500是重要的。 这些都是标准的filter功能使用。 设置自定义[ProdsetA]将仅包含具有产品MEMBER_Key<100而设置的自定义[ProdsetB]将仅包含具有产品MEMBER_Key>500 。 您需要通过第一个脚本使用呈现给大家的成员值来决定哪些值100和500应该在你的立方体上下文(...我不知道在你的立方体键值所以只使用了100和500作为占位符)



文章来源: MDX query - best salesmen who sold all of given products