【问题标题】:DISTINCTCOUNT with FILTERing -1 IDs过滤 -1 个 ID 的 DISTINCTCOUNT
【发布时间】:2025-11-28 07:35:01
【问题描述】:

请多多包涵,因为我是 SSAS/MDX 的新手。我想要对事实表的 ID 列进行 DISTINCTCOUNT 度量,但在过滤 -1 即未知 ID 之后。我也喜欢在上面切/切块。 这是我的桌子

    DimStudent
----------------------------
    ID       Name
    -1       Unknown
    1        Joe
    2        Tim
    3        Paul
    4        Zina


    DimCourse
----------------------------
    ID        Name
    -1        Not Registered
    11        Maths
    22        Science
    33        Arts



FactStudent
---------------
DimStudentID  DimCourseID  YearID  Marks
-----------------------------------------------------------------
1                    11                   2009     89
1                    33                   2009      10
1                    33                   2010      90
1                    -1                   2009      0
2                    -1                   2009      0
3                    22                   2009      90
4                    -1                   2009      0

在上面的示例中,StudentID 1 有一门课程 ID 为 -1,并且他重复了一门课程。如果我为每个学生进行课程不同计数,它会给我 3 个学生 ID 1,而对于学生 2 和 4,它会给我 1 个。 我的预期结果(不考虑年份)是:

学生姓名课程数

乔 2(而不是 3) Tim 0(而不是 1) 保罗 1 吉娜 0(而不是 1)

如果只做不同的计数,它应该给我 3 而不是 4。

再次感谢您的帮助,非常感谢。

问候

【问题讨论】:

  • 您想要 SQL 还是 SSAS 解决方案?
  • 谢谢马克 - 我需要 MDX 解决方案。
  • 我已经稍微修改了我的问题 - 请再读一遍

标签: sql filter count aggregate sum


【解决方案1】:

要从 FactStudent 获取 DimCourseID 的不同计数,不包括 -1 的 DimCourseID 值,运行查询从 FactStudent 中选择不同的 DimCourseID 计数,其中 DimCourseID -1 - 像这样:

select count(distinct DimCourseID)
from   FactStudent
where  DimCourseID <> -1

【讨论】: