【问题标题】:MDX Count of LastNonEmpty Within Another Dimension另一个维度中 LastNonEmpty 的 MDX 计数
【发布时间】:2018-01-05 23:09:47
【问题描述】:

我只是 MDX 的初学者。我手头的问题如下:

我有一个事实表,其格式大致如下:

我必须创建一个报告,根据报告上的任何日期选择,我们希望查看最后一个 TaskStatusID 为特定值的任务总数。

例如,根据上面的数据,如果用户在报告中选择 2017 年 11 月 11 日并将 TaskStatus 选择为 CLOSED,则应该返回一个任务 (100),因为 TaskID 100 的最后一个成员在 11 月 11 日之前是 Closed(4th行)并且 TaskID 101 已完成(最后一行),因此被拒绝。

类似,如果用户选择 2017 年 11 月 13 日和 OPEN,则不应返回任何内容,因为 TaskID 100 有 3 个三行的日期,但我们只取最新的 CLOSED,因此不考虑,类似 TaskID 101 的最新行(上述数据中的最后一行)已完成,因此不予考虑。

我已尝试在 2017 年 11 月 11 日对 Total Open Tasks (TaskStatusID = 2) 使用自定义最后一个非空 MDX 查询来解决此问题:

WITH MEMBER Measures.LatestMember AS
TAIL(NONEMPTY({NULL:[Date].[Date].CURRENTMEMBER} * [IsLastInADay].&[1], Measures.CountOfRows))
MEMBER Measures.Count AS
COUNT(NONEMPTY([DimTask].[TaskID].MEMBERS * [DimTaskStatus].[TaskStatusID].&2], Measures.LatestMember))
SELECT 
Measures.Count ON 0,
[Date].[Date].&[20171111] ON 1
FROM [Cube Name] 

但这需要很长时间才能执行。 My Fact Table 由大约 4000 万行组成,包含大约 800 万个不同的任务,数据分散在 10 年内。

我们将不胜感激任何建议,包括更改事实表设计或将一些复杂性转移到 ETL 流程。

谢谢

【问题讨论】:

    标签: sql-server ssas mdx


    【解决方案1】:

    也许这种方法更快?

    WITH 
    MEMBER Measures.LatestMember AS
    TAIL(
      NONEMPTY(
        {NULL:[Date].[Date].CURRENTMEMBER} * [IsLastInADay].&[1]
       , Measures.CountOfRows
      )
    )
    MEMBER Measures.Count AS
    SUM(
      [DimTask].[TaskID].MEMBERS * [DimTaskStatus].[TaskStatusID].&2]
      IIF(
        Not(IsEmpty(Measures.LatestMember))
       ,1
       ,NULL
      )
    )
    SELECT 
    Measures.Count ON 0,
    [Date].[Date].&[20171111] ON 1
    FROM [Cube Name]; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多