2014-10-22 57 views
2

我有一個查詢象下面這樣:如何改變蒙德里安的配置有關連接表

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語言編寫和運行它,例如甲骨文它只是需要1秒。 我想知道mondrian有沒有任何配置說不要這樣查詢和正式查詢?

回答

0

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

+0

Thnak你的回答......但是當我做到了下面的查詢執行:選擇「d」「D_ID」 「XXX」,「D」,「D」組,「D」,「D_ID」,「D」,「D_ID」ASC NULLS LAST。花了很多時間,最後我的記憶崩潰了!所以不幸的是我不能使用這個解決方案:( – sami 2014-10-28 09:39:38

+0

好吧 - 是否'Mondrian'將'mdx'轉換爲'sql'? – whytheq 2014-10-28 11:25:58

+0

是的確的,我把它張貼在cmt之前 – sami 2014-11-02 08:55:43

相關問題