【问题标题】:Convert sql rank to mdx rank将 sql rank 转换为 mdx rank
【发布时间】:2019-11-03 07:02:49
【问题描述】:

这是我的 sql 代码 - 我想将其转换为 mdx 查询。 这些结果集也用于 power bi 报告。 我无法将此 sql 查询写入 mdx 查询。有人可以帮帮我吗?

    Select * From(
    Select 
    dense_RANK()over(partition by t.MonthName order by t.amount desc)rank
    ,t.*
    From( 
    Select DSP.SalesPointShortName ,dd.MonthName 
    ,SUM(fs.salesAmount)Amount
      From FactSales FS
    INNER JOIN DimDate dd on fs.DateKey=dd.DateKey
    INNER JOIN DimSalesPoint DSP on DSP.SalesPointID=FS.SalesPointID
    group by dsp.SalesPointShortName ,dd.MonthName 
    )as t  
    )as f where f.rank=1

我的预期输出是:

【问题讨论】:

    标签: ssas mdx


    【解决方案1】:

    很多谷歌搜索我从下面的链接得到答案 遵循此链接后,期望结果就来了。 https://bipassion.wordpress.com/2013/06/22/mdx-dense-rank/

    `

     WITH SET [Sorted Models] AS
        // For each month get Top 25 records, choosed a Top 25 from business case
         Generate ( 
            [Dim Date].[Month Name].[Month Name].Members,
            TopCount 
              ( nonempty(
                   {
                       [Dim Date].[Month Name].CurrentMember
                      * [Dim Sales Point].[SalesPoint].[Sales Point Short Name].MEMBERS              
                    }
                   ,[Measures].[Sales Amount] 
                     ) 
               , 1
               ,[Measures].[Sales Amount]
              )
              )
        //Select 
        //[Measures].[Sales Amount] on 0,[Sorted Models] on 1
       //From  [MdCubeTest]
       //where [Dim Product Group Item].[Sub Category Name].&[Bag]
        MEMBER [Measures].[Rank] AS
        // Get the Rank of current member Tuple to Current Month Set
        // Do not use Sorted Models set due to dynamic for each set
        Rank ( 
            (
            [Dim Date].[Month Name].CurrentMember 
            , [Dim Sales Point].[SalesPoint].CurrentMember    
            )
      ,  Generate ( [Dim Date].[Month Name].CurrentMember,
        TopCount 
          ( nonempty(
             { [Dim Date].[Month Name].CurrentMember
              * [Dim Sales Point].[SalesPoint].[Sales Point Short Name]          
                      }
               ,[Measures].[Sales Amount] 
               ) 
           , 25
           ,[Measures].[Sales Amount]
          )
         )
        , [Measures].[Sales Amount] 
        )
    
    MEMBER [Measures].[Previous Set Index] AS
    // Get the Set Index using Rank 
    ( 
    [Measures].[Rank] - 2 
    ) 
    MEMBER [Measures].[Dense Rank] AS
    // Get the Dense Rank using the Index position value 
    CASE
     WHEN [Measures].[Rank] = 1 
      THEN 1 
     ELSE
            ( 
            [Sorted Models].Item([Measures].[Previous Set Index]), 
            [Measures].[Dense Rank] 
            ) 
         + 
            Iif 
            ( 
                 ( 
                 [Sorted Models].Item([Measures].[Previous Set Index]), 
                 [Measures].[Sales Amount] 
                 ) 
              = 
                 [Measures].[Sales Amount] 
             ,0 
             ,1 
            ) 
    End
    
    SELECT
      {
          [Measures].[Sales Amount]
        , [Measures].[Rank]
        , [Measures].[Dense Rank]
        //, [Measures].[Previous Set Index]
      } ON rows
     ,NON EMPTY
         {
         // FILTER Can be used to get the TOP 3 using DENSE RANK 
          FILTER (  
                   [Sorted Models]
              , [Measures].[Dense Rank] <=1
              )
    
         } ON columns
        FROM  [MdCubeTest]
        where [Dim Product Group Item].[Sub Category Name].&[Bag]`
    

    【讨论】:

      猜你喜欢
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多