0

MDX クエリがあり、Mondrian エンジンで実行しています。

WITH 
  MEMBER [Measures].[HC Threshold] AS 
    Val(StrToMember("[HC Threshold].[HC Threshold].[All].[25000]").Name) 
   ,FORMAT_STRING = "$#,0" 
  SET ClaimantsSet AS 
    Order
    (
      Filter
      (
        NonEmpty
        (
          [Count Of Claimants].[Count Of Claimants].[ID].MEMBERS
         ,{[Measures].[Plan Paid]}
        )
       ,
        [Measures].[Plan Paid] > [Measures].[HC Threshold]
      )
     ,[Measures].[Plan Paid]
     ,desc
    ) 
  MEMBER [Measures].[ICD9Desc] AS 
    Tail
    (
      Order
      (
        NonEmpty
        (
          [ICD-9 Primary Diagnosis Code].[Diagnosis Code].[ID].MEMBERS
         ,{[Measures].[Plan Paid]}
        )
       ,[Measures].[Plan Paid]
       ,asc
      )
    ).Item(0).Item(0).Properties("Short Description") 
SELECT 
  {[Measures].[ICD9Desc]} ON 0
 ,NON EMPTY 
    {ClaimantsSet} ON 1
FROM [Combined Claims]
WHERE 
  (
    [Insights Group Structure].[Insights Group Structure].[Insights Report ID].&[1706].FirstChild
    /* StrToMember("No HRA",CONSTRAINED), */
   ,[Plan Period].[Plan Period].[Date Year Quart].&[20152].Lead(4)
   ,[Claim Status].[Claim Status].[Claim Status ID].&[1]
  );

実行すると、タイムアウトのために失敗します。

しかし、私が実行すると、

WITH 
  MEMBER [Measures].[HC Threshold] AS 
    Val(StrToMember("[HC Threshold].[HC Threshold].[All].[25000]").Name) 
   ,FORMAT_STRING = "$#,0" 
  SET ClaimantsSet AS 
    Order
    (
      Filter
      (
        NonEmpty
        (
          [Count Of Claimants].[Count Of Claimants].[ID].MEMBERS
         ,{[Measures].[Plan Paid]}
        )
       ,
        [Measures].[Plan Paid] > [Measures].[HC Threshold]
      )
     ,[Measures].[Plan Paid]
     ,desc
    ) 
SELECT 
  NON EMPTY 
    {ClaimantsSet} ON 0
FROM [Combined Claims]
WHERE 
  (
    [Insights Group Structure].[Insights Group Structure].[Insights Report ID].&[1706].FirstChild
    /* StrToMember("No HRA",CONSTRAINED), */
   ,[Plan Period].[Plan Period].[Date Year Quart].&[20152].Lead(4)
   ,[Claim Status].[Claim Status].[Claim Status ID].&[1]
  );

カラムにセットするだけで、3 分で正常に実行されます。

最初のクエリの SQL ログを調べたところ、セット「ClaimantSet」のタプルごとに ICD9Desc 値が計算されていることがわかりました。つまり、セット claimantSet に 300 タプルがある場合、ICD9Desc は 300 回計算され、300 SQL クエリ発生しています。そして、このため、時間とタイムアウトがかかります。

SQL クエリが何度も生成されないようにする解決策はありますか? Mondrian で MDX クエリまたはスキーマを最適化できますか?

4

1 に答える 1

0

注文をメジャーから外しても、同じ機能が得られ、より速く実行されますか?

WITH 
  MEMBER [Measures].[HC Threshold] AS 
    Val(StrToMember("[HC Threshold].[HC Threshold].[All].[25000]").Name) 
   ,FORMAT_STRING = "$#,0" 
  SET ClaimantsSet AS 
    Order
    (
      Filter
      (
        NonEmpty
        (
          [Count Of Claimants].[Count Of Claimants].[ID].MEMBERS
         ,{[Measures].[Plan Paid]}
        )
       ,
        [Measures].[Plan Paid] > [Measures].[HC Threshold]
      )
     ,[Measures].[Plan Paid]
     ,desc
    ) 
   SET [ICD9DescOrdered] AS
     Order
      (
        NonEmpty
        (
          [ICD-9 Primary Diagnosis Code].[Diagnosis Code].[ID].MEMBERS
         ,{[Measures].[Plan Paid]}
        )
       ,[Measures].[Plan Paid]
       ,asc
      )
  MEMBER [Measures].[ICD9Desc] AS 
    Tail
    (
      [ICD9DescOrdered]
    ).Item(0).Item(0).Properties("Short Description") 
SELECT 
  {[Measures].[ICD9Desc]} ON 0
 ,NON EMPTY 
    {ClaimantsSet} ON 1
FROM [Combined Claims]
WHERE 
  (
    [Insights Group Structure].[Insights Group Structure].[Insights Report ID].&[1706].FirstChild
    /* StrToMember("No HRA",CONSTRAINED), */
   ,[Plan Period].[Plan Period].[Date Year Quart].&[20152].Lead(4)
   ,[Claim Status].[Claim Status].[Claim Status ID].&[1]
  );
于 2016-02-02T08:02:41.113 に答える