2017-04-21 46 views
0

鑑於MDX:如何過濾MDX中的度量並僅輸出度量的單個行?

select {[Measures].[Effort], [Measures].[Count]} on columns from [Tickets] 

..如何零(0)爲[Measures].[Effort]值從[Measures].[Count]使得所得[Measures].[Count]值由「單」的數目減少了與零被濾除(0)努力?

人們會認爲很容易篩選出值,但事實並非如此。以下不降低當然的計數,因爲最後,單值輸出是自然大於零(0):

select {[Measures].[Effort], FILTER([Measures].[Count], [Measures].[Effort] > 0)} on 0 
from [Tickets] 

..此外,請假定百萬票如此放置票ID上軸1和然後過濾,然後求和MDX結果返回後不會高性能

回答

0

如果性能是一個問題,並在下面的查詢速度太慢:

With 
Member [Measures].[RealCount] as 
SUM(
    IIF(
     [Measures].[Effort] > 0, 
     [Measures].[Count], 
     Null 
    ) 
) 

Select 
{[Measures].[Effort],[Measures].[Count],[Measures].[RealCount]} on 0 
From [Tickets] 

你必須篩選出來的DWH到預先計算一個真實的計數。

0

我不知道你的票層次結構,所以會想這一點,但我會想象這些方針的東西:

WITH MEMBER [Measures].[RealCount] AS 
SUM(
    [Ticket].[Ticket].[Ticket Id], 
    Iif(
    [Measures].[Effort] > 0 
    ,1 
    ,NULL 
    ) 
) 
SELECT 
    { 
    [Measures].[Effort] 
    ,[Measures].[Count] 
    ,[Measures].[RealCount] 
    } on 0 
FROM [Tickets]; 

如果上面給出正確的結果,那麼就可以通過移動進一步提高一些邏輯到cube script - 該位:

CREATE HIDDEN SumTicker; 
[Measures].[SumTicker] = Iif([Measures].[Effort] > 0,1,NULL); 
NON_EMPTY_BEHAVIOR([Measures].[SumTicker]) = [Measures].[Effort]; 

然後腳本變爲:

WITH MEMBER [Measures].[RealCount] AS 
SUM(
    [Ticket].[Ticket].[Ticket Id], 
    [Measures].[SumTicker] 
) 
SELECT 
    { 
    [Measures].[Effort] 
    ,[Measures].[Count] 
    ,[Measures].[RealCount] 
    } on 0 
FROM [Tickets];