【发布时间】: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