Как изменить конфигурацию Mondrian о таблице соединений
У меня есть запрос, как показано ниже:
with member
[Measures].[ASD] as
'Count(
Filter(
[DId].[DId].Members
, [Measures].[X] >=2000000000
)
)'
select
[Branch].[City].Members on axis(0),
[Measures].[ASD] on axis(1)
from [D];
За mondrian
для запуска требуется много времени - около 40-х годов. Это потому, что он запрашивает для каждого города, как показано ниже:
[[DId].[DId]]: executing sql [select "D"."D_Id" as "c0" from "XXX"."D" "DId", "XXX"."BRANCH" "BRANCH" where "D"."FD_BRANCH" = "BRANCH"."BRANCH_ID" and "BRANCH"."CITY_ID" = 111 group by "D"."D_Id" having (sum("D"."X") >= 2000000000) order by "D"."D_Id" ASC NULLS LAST]
Если вы пишете на языке SQL и запускаете его, например, в Oracle, это займет всего 1 сек. Я хочу знать, есть ли конфигурация в mondrian
сказать не запрашивать, как это и запросить формальным способом?
1 ответ
COUNT(FILTER
необходимо избегать.
Надеюсь, это работает быстрее:
with member
[Measures].[ASD] as
'Sum(
[DId].[DId], //<<maybe this should read [DId].[DId].[DId]?
Iif([Measures].[X] >=2000000000,1,NULL)
)'
select
[Branch].[City].Members on axis(0),
[Measures].[ASD] on axis(1)
from [D];
Объясняется здесь Моша: http://sqlblog.com/blogs/mosha/archive/2007/11/22/optimizing-count-filter-expressions-in-mdx.aspx