Как изменить конфигурацию 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

Другие вопросы по тегам