我有一个名为DimUser
的维度表,每个用户有1行。我有一个基于此维度的度量,称为“USER COUNT”,它是DimUser表的行数。我还有一个名为“ACTIVE DAYS”的计算度量,它不返回用户活动的天数。
现在,我想基于这2个度量创建另一个计算度量,其中我只计算活动超过5天的用户。我的用户表中共有5个用户,而我的事实表中有2个用户活动超过5天。我的MDX
表达式应返回2.
这就是我写的
FILTER([Measures].[USER COUNT], [Measures].[ACTIVE DAYS] > 5)
但这给了我5个答案,而不是2.我做错了什么?
接下来我尝试了这个,但是编译失败说不允许在表达式中使用两个度量
([Measures].[USER COUNT], [Measures].[ACTIVE DAYS] > 5)
接下来,我尝试创建一个名为[IsActive]的新计算成员,如果活动天数>返回true或false。 5然后将其用作[Measures]上的过滤器。[USER COUNT]。
我该怎么做?
答案 0 :(得分:2)
首先,我不认为甚至可以在另一个度量上过滤一个度量,因为度量是数值而不是集合。过滤的概念适用于集合。因此,基于另一个度量过滤度量是荒谬的。但就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]
答案 1 :(得分: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];