[英]How to filter a measure based on another measure
我有一个名为DimUser
的维度表,每个用户有1行。 我有一个基于该维度的度量,称为“ USER COUNT”,它是DimUser表的行数。 我还有一个计算得出的度量,称为“ ACTIVE DAYS”,该度量不返回用户活动的天数。
现在,我想基于这两个指标创建另一个计算得出的指标,在这里我仅统计活跃时间超过5天的用户。 我的用户表中共有5个用户,而事实表中有2个活动超过5天的用户。 我的MDX
表达式应返回2。
这就是我写的
FILTER([Measures].[USER COUNT], [Measures].[ACTIVE DAYS] > 5)
但这给了我5而不是2的答案。我在做什么错?
接下来,我尝试了此操作,但是编译失败,表示表达式中不允许使用两个度量
([Measures].[USER COUNT], [Measures].[ACTIVE DAYS] > 5)
接下来,我尝试创建一个名为[IsActive]的新计算成员,如果活动天数> 5,该成员将返回true或false,然后将其用作[Measures]。[USER COUNT]上的过滤器。
我该怎么做呢?
首先,我认为甚至不可能在另一个度量上过滤一个度量,因为度量是数字值,而不是集合。 过滤的概念适用于集合。 因此,基于另一度量过滤度量是荒谬的 。 但是,就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]
为了避免使用迭代的Filter
,而不是性能最佳的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];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.