我有一个 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 吗?