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

how to use Group by with top count in MDX query

我有一个示例,我们在 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

输出-

我想要这个结果与 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];

您可以修改行片段以使用 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