繁体   English   中英

如何基于其他度量过滤度量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM