如何在MDX查询中使用Group by和top count

时间:2016-04-04 06:08:22

标签: sql-server ssas mdx

我有一个例子,我们在sql中准备查询以获取适当的结果

SQL查询 -

select partnerid,BrandDesc,ActualRetailValue
from
(
select DENSE_RANK() over (partition by partnerid order by sum(ActualRetailValue) desc) as rnk,
partnerid,BrandDesc,sum(ActualRetailValue) as ActualRetailValue
from JDASales
where partnerid in (693,77)
group by partnerid,BrandDesc
) as A
where rnk <=5
order by partnerid,rnk

输出 -

enter image description here

我希望这个结果带有mdx query.Even试用这段代码

SELECT 
  NON EMPTY 
    {[Measures].[Actual Retail Value]} ON COLUMNS
 ,NON EMPTY 
      [DimBrands].[Brand].[Brand].ALLMEMBERS
    * 
      TopCount
      (
          [DimPartners].[Partner].[Partner].ALLMEMBERS
        * 
          [DimSKU].[XXX Desc].[XXX Desc].ALLMEMBERS
       ,5
       ,[Measures].[Actual Retail Value]
      ) ON ROWS
FROM 
(
  SELECT 
    {[DimPartners].[Partner].&[1275]} ON COLUMNS
  FROM 
  (
    SELECT 
      {[Dim Date].[Fiscal Year].&[2014-01-01T00:00:00]} ON COLUMNS
    FROM [SALES]
  )
)
WHERE 
  [Dim Date].[Fiscal Year].&[2014-01-01T00:00:00];

1 个答案:

答案 0 :(得分:2)

您可以修改行代码段以使用GENERATE函数:

SELECT 
  NON EMPTY 
    {[Measures].[Actual Retail Value]} ON 0
 ,NON EMPTY 
    GENERATE( 
     [DimBrands].[Brand].[Brand].ALLMEMBERS AS B
    , 
     TopCount(
          B.CURRENTMEMBER
         *[DimPartners].[Partner].[Partner].ALLMEMBERS
         *[DimSKU].[XXX Desc].[XXX Desc].ALLMEMBERS
       ,5
       ,[Measures].[Actual Retail Value]
      )
    ) ON ROWS
...
...

此功能用法详见:https://msdn.microsoft.com/en-us/library/ms145526.aspx