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 日志时,我发现 ICD9Desc 值正在为集合“ClaimantSet”的每个元组计算,因此如果集合 claimantSet 中有 300 个元组,则 ICD9Desc 被计算 300 次,因此 300 个 SQL 查询正在生成。正因为如此,它需要时间和时间。

是否有任何解决方案可以避免多次生成 SQL 查询,我可以在 Mondrian 中优化我的 MDX 查询或 Schema 吗?

4

1 回答 1

0

如果您将 Order 排除在度量之外,您是否仍然获得相同的功能并且它运行得更快?

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 回答