2013-09-25 50 views
0
SELECT NON EMPTY {{[Measures].[Net Promoter Score],[Measures].[AvgRevenuePerUnit]}} ON COLUMNS , 
NON EMPTY {{Hierarchize(DrilldownLevel(DrilldownLevel(DrilldownLevel([Employees].[Boss].[ALL]))))}} 
ON ROWS 
FROM (SELECT ({[Employees].[Boss].&[14404]}) ON COLUMNS 
FROM [Enterprise] 
WHERE FILTER([Employees].[EID].[EID],[Measures].[Avg Revenue Per Unit] > 700)) 
WHERE ({[Employees].[Active Status].&[False]},{[Roles].[Roster Role].&[486]},{[Roles].[Enterprise Role].&[2]}, 
{[Locations].[Location].&[6]},{[Areas].[Area].&[3]},{[Markets].[Market].&[1]},{[Regions].[Region].&[2]}, 
{[Dates].[Date].&[20130218]:[Dates].[Date].&[20130319]}) 

當我運行上面的查詢時,AvgRevenuePerUnit列顯示爲1.#INF。用0代替1.#INF,我用下面給出的查詢,但結果是一樣的。我在下面給出的查詢中使用WITH MEMBER。無法過濾1.#INF值

WITH MEMBER [Measures].[AvgRevenuePerUnit] AS (IIF([Measures].[Avg Revenue Per Unit] = '1.#INF', 0, [Measures].[Avg Revenue Per Unit])), Format_String = '0.#0' 
SELECT NON EMPTY {{[Measures].[Net Promoter Score],[Measures].[AvgRevenuePerUnit]}} ON COLUMNS , 
NON EMPTY {{Hierarchize(DrilldownLevel(DrilldownLevel(DrilldownLevel([Employees].[Boss].[ALL]))))}} 
ON ROWS 
FROM (SELECT ({[Employees].[Boss].&[14404]}) ON COLUMNS 
FROM [Enterprise] WHERE FILTER([Employees].[EID].[EID],[Measures].[Avg Revenue Per Unit] > 700)) 
WHERE ({[Employees].[Active Status].&[False]},{[Roles].[Roster Role].&[486]},{[Roles].[Enterprise Role].&[2]}, 
{[Locations].[Location].&[6]},{[Areas].[Area].&[3]},{[Markets].[Market].&[1]},{[Regions].[Region].&[2]}, 
{[Dates].[Date].&[20130218]:[Dates].[Date].&[20130319]}) 

我有一個由用戶提供的多維數據集,並從該多維數據集中查詢數據。在我看來,cube中的實際值不是1.#INF這就是爲什麼它不會替換爲0.但是,如果它不是1,那麼值是多少?#INF。 任何解決方案?

回答

2

1.#INF-1.#INF是Analysis Services如何顯示加/減無窮大,技術上/數學上是由零除的結果。

避免這種情況的最佳方法是在度量的定義中,該度量可能在多維數據集的計算腳本中。你可能有有什麼樣

CREATE MEMBER CurrentCube.[Measure].[AvgRevenuePerUnit] AS A/B 
     , VISIBLE = 1; 

CREATE MEMBER CurrentCube.[Measure].[AvgRevenuePerUnit] AS IIf(B <> 0, A/B, null) 
     , VISIBLE = 1; 

替換該和你做。當然,根據需要替換AB

注:有分析服務2012最近的更新,其中包含一個新的MDX功能Divide允許寫

CREATE MEMBER CurrentCube.[Measure].[AvgRevenuePerUnit] AS Divide(A, B) 
     , VISIBLE = 1; 

如果你和所有其他用戶真正擁有與定義要堅持,因爲它是在立方體,並且要依靠與查詢子句,那麼我想你的代碼可以這樣寫

WITH MEMBER [Measures].[AvgRevenuePerUnit] AS 
    IIF([Measures].[Avg Revenue Per Unit] = 1/0   -- '1.#INF', plus infinity 
      OR [Measures].[Avg Revenue Per Unit] = -1/0, -- '-1.#INF', minus infinity 
     0, 
     [Measures].[Avg Revenue Per Unit]), 
    Format_String = '0.#0' 
... 

您使用'1.#INF'不工作,因爲這是一個字符串,以及無限的數字是數字的方法和不是Analysis Services的字符串。

+0

太棒了! FrankPI :) – Soofian

+0

我還想要一件事。我想從上面給出的查詢中濾除1.#INF值。我怎樣才能做到這一點 ? – Soofian

+0

@ user2815197要隱藏無限值,只需使用NULL而不是0來代替無限值(我的答案的「WITH」子句中的'IIF'的三個參數的第二個)。然後行的NON EMPTY會導致這些行消失。 – FrankPl