计算结果集

时间:2016-10-20 21:10:29

标签: sql-server ssas mdx

我陷入了一个有趣的问题。我有一个名为Product的维度,层次结构为Product Rolodex1-> Rolodex2-> Rolodex3->产品ID

我正在尝试创建计算度量[产品数量]来计算"产品ID"成员(最低级别)正在选择中。

我的衡量标准如下:

MEMBER [Measures].[Product Count] AS                                         
    COUNT(
      FILTER( 
         EXISTING [Product].[Product].[Product ID].MEMBERS
       , NOT ISEMPTY( [Measures].[Distinct Product Count] ) ))
) 

[Distinct Product Count]是产品ID的独特计数。选择中现有的产品ID应为1。

当我从同一级别选择2个成员并将它们组合在一起并放入条件时,该措施有效。例如,它适用于以下查询:

WITH
MEMBER [Product].[Product].[All Products].[Aggregation] AS 
  ' AGGREGATE( 
       { [Product].[Product].[Rolodex1].&[44], 
         [Product].[Product].[Rolodex1].&[45] }
   ) ' 
 SELECT 
   { [Measures].[Product Count] } ON COLUMNS ,   
   { [Paid Date].[Paid Date].[Paid Quarters].&[2016 - Q2]
    ,[Paid Date].[Paid Date].[Paid Quarters].&[2016 - Q3]  } ON ROWS     
 FROM [MyCube]   
 WHERE ( [Product].[Product].[All Products].[Aggregation] )  

但是当选择并组合2个不同级别的成员时,它无法使用以下查询:

WITH       
MEMBER [Product].[Product].[All Products].[Aggregation1] AS 
    ' AGGREGATE( 
        GENERATE( 
           FILTER( 
             { [Product].[Product].[Rolodex1].&[44], 
               [Product].[Product].[Rolodex2].&[4505] }
           , NOT ISEMPTY( 
               [Product].[Product].CURRENTMEMBER 
             )
           ), 
         HEAD( 
           HIERARCHIZE( 
             INTERSECT( 
              { [Product].[Product].[Rolodex1].&[44]
              , [Product].[Product].[Rolodex2].&[4505] } 
             ,ASCENDANTS( [Product].[Product].CURRENTMEMBER )
             )
            )
          )
         )
       ) '  
SELECT 
   { [Measures].[Product Count] } ON COLUMNS ,   
   { 
      [Paid Date].[Paid Date].[Paid Quarters].&[2016 - Q2]
     ,[Paid Date].[Paid Date].[Paid Quarters].&[2016 - Q3]  } ON ROWS     
FROM [Cost and Utilization]    
WHERE ( [Product].[Product].[All Products].[Aggregation1] ) 

此处生成的计算成员的MDX [产品]。[产品]。[所有产品]。[聚合1]是当我从不同级别选择2个成员并组合在一起时由Proclarity生成的查询。

请帮忙。有没有人以前遇到过这个问题?

提前谢谢。

2 个答案:

答案 0 :(得分:0)

最初的建议是使用以下更有效的模式进行衡量:

MEMBER [Measures].[Product Count] AS                                         
    SUM(
       EXISTING [Product].[Product].[Product ID].MEMBERS
       IIF (
         NOT ISEMPTY( [Measures].[Distinct Product Count] )
         ,1
         ,NULL
        )
     ) 

Proclarity脚本的替代方法可能如下 - 这是否会返回您期望的结果?

WITH       
MEMBER [Product].[Product].[All Products].[Aggregation1] AS 
    ' AGGREGATE(
        EXISTS( 
          [Product].[Product].[Product ID].MEMBERS
         ,{ [Product].[Product].[Rolodex1].&[44]
          , [Product].[Product].[Rolodex2].&[4505] } 
         )
       ) '  
SELECT 
   { [Measures].[Product Count] } ON COLUMNS ,   
   { 
      [Paid Date].[Paid Date].[Paid Quarters].&[2016 - Q2]
     ,[Paid Date].[Paid Date].[Paid Quarters].&[2016 - Q3]  } ON ROWS     
FROM [Cost and Utilization]    
WHERE ( [Product].[Product].[All Products].[Aggregation1] ) 

答案 1 :(得分:0)

通过使用动态集来保存产品ID以解决问题。如果有人需要具体答案,请告诉我。我会提供所有细节。谢谢。