【问题标题】:Filtering Tabular Model Dimension Across Multiple Facts跨多个事实过滤表格模型维度
【发布时间】:2015-12-03 18:06:40
【问题描述】:

我正在教育环境中构建表格模型,但在过滤多个基表中的查​​找表时遇到了一些困难。

我已经阅读了关于桥接表的信息,我相信我可以使用它,但是我有十几个事实表,因此相应的桥接表的数量似乎管理起来很麻烦。我可以改为通过 DAX 处理过滤吗?我一直在努力学习更多 DAX,但到目前为止我还很陌生。

这是我要完成的示例场景:为了简化事情,我有一个名为 Student 的维度,其中包含每个学生的一行。我有一个名为 Discipline 的事实,其中包含每个学生的纪律事件记录(每个事件 1 个,并非所有学生都会发生纪律事件)。此外,我有一个名为评估的事实表,其中包含测试的评估记录(学生完成的每个评估记录)。有些学生不会参加这个评估,所以他们没有相应的分数。

当我在数据透视表中对这些数据建模时,例如,为了分析纪律和评估之间的相关性,我引入了一个名为 Discipline Incident Count(纪律事件记录的计数)和 Assessment Average Score(评估的平均分数)。我只想查看对两者都有价值的学生列表,但我得到如下内容:

学生姓名--------学科事件数--------评估平均分

学生 A-------(空白)----------- --------85.7

学生B----------------------------------3---------- ---------(空白)

学生C----------------------------------2---------- ------------88.7

在这种情况下,我希望我的结果集只包括学生 C,因为它们对两者都有一个值。我还测试了处理应用程序层(Excel)上的过滤,通过过滤掉每一列中的空白,但是对于可能具有嵌套值和大量数据的真实数据,似乎效果不佳。

感谢您的任何反馈!

【问题讨论】:

    标签: sql sql-server excel dax tabular


    【解决方案1】:

    所以,在应用层过滤它可能是你最好的选择。

    否则,您必须编写度量,以便每个度量都检查所有其他度量的值以确定是否显示。

    您分享的示例如下:

    ConditionalDiscipline:=
    SWITCH(
        TRUE()
        ,ISBLANK( [Assessment Average Score] )
        ,BLANK()
        ,[Discipline Incident Count]
    )
    

    SWITCH() 只是嵌套 IF() 的语法糖。

    现在,只有当您的数据透视表包含 [学科事件计数] 和 [评估平均分数] 时,此度量才有效。如果您从新事实表添加另一个度量,则数据透视表行中学生的值的存在不会影响该行的显示。

    你需要一个新的措施:

    ConditionalDiscipline - version 2:=
    SWITCH(
        TRUE()
        ,ISBLANK( [Assessment Average Score] )
        ,BLANK()
        ,ISBLANK( [Your new measure] )
        ,BLANK()
        ,[Discipline Incident Count]
    )
    

    现在,此版本 2 仅在 [Assessment Average Score] 和 [Your new measure] 均非空白时才有效。如果您在发布的示例中使用此版本 2, [Your new measure],那么对于没有 [your new measure] 条目的学生,它仍然会返回空白。

    因此,对于要使用的其他度量的每个可能组合,您都需要一个版本。

    无法在 DAX 中定义“当前在同一上下文中评估的所有其他度量的集合”,这是您真正需要针对是否存在空白进行测试。

    您可以不使用 SWITCH(),而只需在 IF() 的一个测试中将所有其他度量相乘,因为乘以空白会产生空白。这对于您需要编写的度量的组合数量没有任何作用。对于如何定义测试,您有很多选择,但它们最终都需要相同数量的独立度量定义。

    我还想解决您问题中的另一点。您提到使用桥接表。仅当您在维度表之间实现多对多关系时,才需要桥接。你没有实现这个。您有几个具有单一一致维度的事实。一致性维度本质上是您的事实之间的桥梁,每个事实与其他事实存在多对多关系,基于 StudentKey。任何桥接表都是多余的。

    长话短说,不是。 DAX 中没有足够的内省工具来做你想做的事。在应用层处理。

    【讨论】:

      猜你喜欢
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      • 1970-01-01
      • 2020-12-14
      • 2019-03-13
      • 1970-01-01
      相关资源
      最近更新 更多