[英]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.