2014-10-28 35 views
0

我有一個稱爲DimUser的維度表,每個用戶有1行。我有一個基於這個維度的度量,叫做「USER COUNT」,它是DimUser表的行數。我還有一個名爲「ACTIVE DAYS」的計算度量,它返回用戶處於活動狀態的天數。如何根據另一個度量過濾度量

現在,我想創建另一個基於這2個度量的計算度量,其中我只計算超過5天活動的用戶。我的用戶表中共有5個用戶,而我的事實表中有5個用戶活躍超過5天。我MDX表達應該返回2.

這是我寫的

FILTER([Measures].[USER COUNT], [Measures].[ACTIVE DAYS] > 5) 

但是這給了我5作爲答案,而不是2.我在做什麼錯?

接下來,我想這一點,但這種失敗編譯說在表達的兩種措施是不允許

([Measures].[USER COUNT], [Measures].[ACTIVE DAYS] > 5) 

接下來,我試圖創建一個名爲[IsActive]一個新的計算成員返回true或者活躍天假> 5,然後將其用作[Measures]。[USER COUNT]上的過濾器。

我該如何去做這件事?

+0

您的多維數據集中是否存在用戶維度?用UserId級別? – whytheq 2014-10-28 09:24:25

+0

是的。我有DimUser表成爲多維數據集中的用戶維度。它有兩列。 {UserId,UserName}。但請記住,我的事實表對同一用戶將具有多行,並且DimUser與事實的度量值組具有多重關係,因此我們可以根據用戶維度的行數計算不同的計數 – user330612 2014-10-28 15:34:21

回答

1

爲了避免使用Filter這是迭代的,並且不表現最佳的功能。此外,要創建一個能夠識別上下文的測量,那麼以下內容可能會有所幫助:

WITH 
    MEMBER [Measures].[CntUsersActive5DaysOrMore] AS 
    Sum 
    (
     [UserId].[UserId] //<<< or [UserId].[UserId].[UserId] 
    ,IIF 
     (
     [Measures].[ACTIVE DAYS] > 5 
     ,1 
     ,0 
    ) 
    ) 
SELECT 
    [Measures].[CntUsersActive5DaysOrMore] ON 0 
FROM [YourCube]; 
+0

我想你應該寫''UserId]。[UserId]。[UserId]'而不是'[UserId]。[UserId]',因爲後者實際上考慮了[UserId]。[UserId] 。[ALL]'即默認會員 – SouravA 2014-10-28 12:57:29

+0

@Sourav_Agasti可以做到這一點,如果你喜歡。 – whytheq 2014-10-28 15:01:19

+0

我的DimUser表具有以下列。 {UserId,UserName} – user330612 2014-10-28 15:31:18

1

首先,我認爲甚至不可能在另一個度量上過濾一個度量,因爲度量是數值而不是集合。過濾的概念適用於一組。因此,基於另一種度量過濾措施是荒謬的。但是,就MDX而言,可以做的是創建一組應用了第一個過濾器的用戶(即[Measures]。[ACTIVE DAYS]> 5),然後從中獲取COUNT

像這樣(未測試):

WITH SET [ActiveUsersMoreThan5Days] AS 
FILTER([User].[UserId].CHILDREN, [Measures].[ACTIVE DAYS] > 5) 
//Assuming the User dimension and hierarchy here.. 
//Fill it in with actual.. 

MEMBER [Measures].CountActiveUsersMoreThan5Days AS 
COUNT(NONEMPTY([ActiveUsersMoreThan5Days], [Measures].[<<Some other measure>>])) 

SELECT [Measures].CountActiveUsersMoreThan5Days on 0 
//,[Dimension].Hierarchy.CHILDREN ON 1 
FROM [Cube] 
+0

只要另一個層次結構(比如說地理位置)被添加到行中,那麼這將在每個單元格中爲「CountActiveUsersMoreThan5Days」重複相同的數字 - 自定義集不是上下文感知的。 – whytheq 2014-10-28 11:37:24

+0

正確。這段代碼只是爲了得到整體計數。如果必須讓他們瞭解情況,那麼必須使用'EXISTING'子句以及'userid'維度。 – SouravA 2014-10-28 11:39:28

相關問題