如何根据其他度量过滤度量

时间:2014-10-28 05:18:13

标签: sql ssas mdx olap olap-cube

我有一个名为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]。

我该怎么做?

2 个答案:

答案 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];