每天在 Mondrian MDX 中获取用户数量

Posted

技术标签:

【中文标题】每天在 Mondrian MDX 中获取用户数量【英文标题】:Getting a count of users each day in Mondrian MDX 【发布时间】:2012-12-04 00:03:39 【问题描述】:

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

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

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]

【问题讨论】:

请提供有关您的多维数据集架构的一些详细信息。您的查询为您提供了总用户数,因为您没有以任何方式将用户维度与客户维度相结合。您可以通过使用与这两个概念相关的事实来做到这一点。用户多维数据集中有哪些事实(度量)?如果有一个像“用户计数”这样的,那就是你的票。用户多维数据集的粒度是多少? 立方体看起来像:[Customer].[Customer Name]、[Date].[Date]、[User].[User Name],以及关于用户的各种度量。问题主要是学术问题。我有一些类似的查询需要做,这就是我正在尝试学习的示例。我需要能够为每位客户每天的用户数量创建一个计算度量,而无需添加额外的度量。 【参考方案1】:

计算成员的问题是 [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。该查询的结果将是很多空单元格,但在给定的行中,具有值的列对应于与给定 Customer 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]

我在这里假设了一点,但是通过一些实验你应该能够解决它。

【讨论】:

以上是关于每天在 Mondrian MDX 中获取用户数量的主要内容,如果未能解决你的问题,请参考以下文章

Mondrian MDX 中的最后日期和时间

mondrian mdx 过滤日期维度中年份级别的集合

聚合最后一个值和聚合总和 mdx mondrian

如何在 Mondrian OLAP 中使用 DRILLTHROUGH?

具有退化维度的蒙德里安表现不佳

如何在 mdx 查询中更改列或行的名称