Mdx 蒙德里安的优化集计算
我有一个MDX查询,我正在Mondrian Engine上执行它Mdx 蒙德里安的优化集计算,mdx,mondrian,rolap,Mdx,Mondrian,Rolap,我有一个MDX查询,我正在Mondrian Engine上执行它 WITH MEMBER [Measures].[HC Threshold] AS Val(StrToMember("[HC Threshold].[HC Threshold].[All].[25000]").Name) ,FORMAT_STRING = "$#,0" SET ClaimantsSet AS Order ( Filter ( No
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值是为集合'ClaimentSet'的每个元组计算的,因此,如果集合ClaimentSet中有300个元组,ICD9Desc将被计算300次,因此将生成300个SQL查询。正因为如此,这需要时间和时间
是否有任何解决方案可以避免SQL查询生成那么多次,我可以在Mondrian中优化我的MDX查询或模式吗?如果您不按顺序进行度量,您是否仍然获得相同的功能,并且运行得更快
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]
);
谢谢你的回复。不幸的是,这对我来说不起作用。为什么您要以您现有的方式实施
[Measures].[HC Threshold]
?这是通过参数输入的吗?哦,是的。。它是SSRS报告传递的参数。SSR通过的where条款条件