MDX查询 - 销售所有特定产品的最佳销售人员

时间:2015-04-08 12:38:31

标签: mdx data-warehouse

假设我有两个简单的维度:

  

产品 - 具有ID和名称

     

销售员 - 具有ID和名称   我的事实表名为SALES,包含上述的ids。

我需要生成一个查询,显示销售所有给定产品的销售人员的姓名。

此代码解决了两个项目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种随机产品......

1 个答案:

答案 0 :(得分: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的产品1}}。您需要使用第一个脚本提供给您的成员值来确定多维数据集上下文中应包含的值100和500(...我不知道多维数据集中的键值,因此只使用100和500作为占位符)