簡體   English   中英

基於另一個計算量度的SSAS計算量度

[英]SSAS Calculated Measure based on another calculated measure

我在下面有一個MDX查詢。 此查詢有效,但問題是它很慢,即使數據集不大,返回結果也要花費> 15秒的時間。 我相信查詢應在2秒內執行(它也用於登錄頁面,等待時間很麻煩)。 由於所有“ IF THEN ELSE”邏輯,[Measures]。[Star Rating]導致速度變慢。 它的所有操作均基於[均值],它根據查找表中的范圍從查找表中查找[星級]。 例如,如果[平均得分] <86,則[星級評分] = 1,如果[平均得分]> = 86並且<= 90,則[星級評分] = 2

[平均得分]是一個簡單的總和/計數計算。 可以根據用作參數的日期范圍進行更改。 您可以在下面的現有查詢中推薦優化方案,還是建議一種替代方法來計算“星級”?

MDX查詢如下:

    WITH 
       MEMBER [Measures].[MeanScore] AS ([Measures].[Standard Point Assignment - Sum]/[Measures].[Episode Of Care HCAHPS Count])
       MEMBER [Measures].[StarRating] AS 
       CASE 
       WHEN [HCAHPS Star Rating].[HCAHPS Star Rating ID].CurrentMember IS [HCAHPS Star Rating].[HCAHPS Star Rating ID].[All] 
          THEN 
         CASE 
           WHEN [Measures].[HSR-HCHCAHPS Domain ID] = TAIL([HCAHPS Star Rating].[HCAHPS Star Rating ID].[HCAHPS Star Rating ID]).Item(0).Item(0).Properties('HCHCAHPS Domain ID') 
                  THEN 
               (
                [Measures].[Rating], 
                Tail([HCAHPS Star Rating].[HCAHPS Star Rating ID].[HCAHPS Star Rating ID]).Item(0).Item(0)
               )
           ELSE 
               (
                [Measures].[StarRating],
                Tail([HCAHPS Star Rating].[HCAHPS Star Rating ID].[HCAHPS Star Rating ID]).Item(0).Item(0).PrevMember
               )
         END 
       ELSE 
         CASE 
           WHEN [Measures].[MeanScore] > [HCAHPS Star Rating].[HCAHPS Star Rating ID].CurrentMember.Properties('Start', typed)
           AND [Measures].[HC-HCAHPS Domain ID] = [HCAHPS Star Rating].[HCAHPS Star Rating ID].CurrentMember.Properties('HCHCAHPS Domain ID', typed) 
                  THEN 
               (
               [Measures].[Rating], 
                [HCAHPS Star Rating].[HCAHPS Star Rating ID].CurrentMember
                )
           ELSE 
               (
                [Measures].[StarRating],
                [HCAHPS Star Rating].[HCAHPS Star Rating ID].CurrentMember.PrevMember
               ) 
         END 
     END 
SELECT 
    {
        [Measures].[Episode Of Care HCAHPS Count]
        ,[Measures].[Is Top Box]
        ,[Measures].[CompositeScore]   
        ,[Measures].[PromoterCount]
        ,[Measures].[PromoterPercent]
        ,[Measures].[PassiveCount]
        ,[Measures].[PassivePercent]
        ,[Measures].[DetractorCount]     
        ,[Measures].[DetractorPercent]
        ,[Measures].[StarRating]
        ,[Measures].[MeanScore]
    } ON COLUMNS, 
    NONEMPTYCROSSJOIN
    (
        {NONEMPTY([HCAHPS Domain].[HCAHPS Survey Methodology ID].[HCAHPS Survey Methodology ID])}
        ,DESCENDANTS(StrToSet('[Org Hierarchy].[Parent Key].&[118418]'))
        ,{[HCHCAHPS Domain].[HC Domain Group].[HC Domain Group]}
        ,{[HCHCAHPS Domain].[HCAHPS Domain Name].[HCAHPS Domain Name]}
        ,{[HCAHPS Question Answer].[Question Number].AllMembers}
     ) ON ROWS 
     FROM [CAHPS] 
     WHERE 
     (
        StrToMember("[Date].[Date].&[" + FORMAT(NOW()-365,"yyyy-MM-ddT00:00:00")  + "]",CONSTRAINED):StrToMember("[Date].[Date].&[" + FORMAT(NOW(),"yyyy-MM-ddT00:00:00")  + "]",CONSTRAINED)
     )

通常,Analysis Services MDX中的IIF和CASE語句可能會看到性能下降。 盡管大多數IIF語句是相對便宜的,復雜的嵌套條件(具有許多IIF語句),但這將導致Analysis Services公式引擎最終將逐個單元地運行查詢。

對於高性能查詢,目標是使查詢以子空間模式(或塊計算)而不是逐個單元模式運行。 為此,如果使用IIF語句,請嘗試使用SCOPE語句。 Mosha Pasumansky的博客文章MDX中的IIF函數的性能是將IIF語句轉換為SCOPE一個很好的參考。

順便說一句,有關子空間計算(逐個單元)的更多信息,請參閱《 Analysis Services性能指南》的 3.2.1節

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM