2

谁能解释为什么

SELECT
NON EMPTY {Hierarchize({[Measures].[Quantity]})} ON COLUMNS,
NON EMPTY ([Time].[Years].Members * [Markets].[City].Members * [Product].[Product].Members * [Customers].[Customer].Members) ON ROWS
FROM [SteelWheelsSales]

比这慢得多:

SELECT
NON EMPTY {Hierarchize({[Measures].[Quantity]})} ON COLUMNS,
NON EMPTY CrossJoin([Time].[Years].Members, CrossJoin([Markets].[City].Members, CrossJoin([Product].[Product].Members, [Customers].[Customer].Members))) ON ROWS
FROM [SteelWheelsSales]

我想使用 * 运算符进行交叉连接,但它似乎慢得多。知道为什么以及我能做什么吗?

4

1 回答 1

0

似乎顺序很重要:http: //community.altiusconsulting.com.ourwindowsnetwork.com/blogs/altiustechblog/archive/2008/06/13/mdx-crossjoin-performance.aspx

以防万一上述链接将来失效,它基本上比较了以下两个 AdvWks 脚本的性能:

查询 1

WITH MEMBER Measures.PerfmonTest AS 
Count( 
    Crossjoin( [Promotion].[Promotions].[Promotion] ,
        Filter([Customer].[Customer Geography].[Customer], RIGHT([Customer].[Customer Geography].CurrentMember.Name,5) = "Smith") 
    )
) 
SELECT Measures.PerfmonTest ON Columns 
FROM [Adventure Works] 

查询 2

WITH MEMBER Measures.PerfmonTest AS 
Count( 
    Crossjoin( 
        Filter([Customer].[Customer Geography].[Customer], RIGHT([Customer].[Customer Geography].CurrentMember.Name,5) = "Smith")
        ,[Promotion].[Promotions].[Promotion] ) 
    ) 
SELECT Measures.PerfmonTest ON Columns 
FROM [Adventure Works]
于 2015-01-22T20:46:17.083 回答