每天在蒙德里安 MDX 中获取用户计数



我正在尝试编写一个查询,为我提供每个客户每天的用户总数。

这是我到目前为止所拥有的,对于每个客户/天的组合,它给出了用户维度条目的总数,而不是按客户/天拆分它们。

WITH MEMBER [Measures].[MyUserCount]
  AS COUNT(Descendants([User].CurrentMember, [User].[User Name]), INCLUDEEMPTY)
SELECT
  NON EMPTY CrossJoin([Date].[Date].Members, [Customer].[Customer Name].Members) ON ROWS,
  {[Measures].[MyUserCount]} on COLUMNS
FROM
  [Users]

计算成员的问题在于,对于每个行元组,[User].CurrentMember都设置为All成员,因此计数是总数。您需要的是让[Customer].CurrentMember[Date].CurrentMember有效筛选[User]维度的方法。

您需要使用有意义的度量值,即对于您感兴趣的维度成员的有意义的联接,该度量值将具有非空值。

要找出这一点,您可以从运行如下查询开始:

SELECT
  NON EMPTY CrossJoin(
    [User].[User Name].Members, 
    [Measures].[Some measuse]
  ) ON COLUMNS,
  NON EMPTY CrossJoin(
    [Date].[Date].Members, 
    [Customer].[Customer Name].Members
  ) ON ROWS
FROM [Project]

你会选择充分Some measure。该查询的结果将是大量空单元格,但在给定行中,具有值的列对应于与给定客户 x Date 元组(在该行上)相关的用户。您希望为每一行计算这些列。COUNT 和 FILTER 是您需要的,那么带有计算成员的查询将是

WITH MEMBER [Measures].[User count] AS
  COUNT(
    FILTER(
      [User].[User Name].Members, 
      NOT ISEMPTY([Measures].[Some measure])
    )
  )
SELECT
  NON EMPTY {[Measures].[User count]} ON COLUMNS,
  NON EMPTY CrossJoin(
    [Date].[Date].Members, 
    [Customer].[Customer Name].Members
  ) ON ROWS
FROM [Users]

我在这里假设了相当多的东西,但通过一些实验,你应该能够解决它。

最新更新