跨多个事实过滤表格模型维度

时间:2015-12-03 18:06:40

标签: sql sql-server excel dax tabular

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

我已经读过桥表,我相信我可以使用它,但是我有十几个事实表,所以相应的桥表的数量似乎很难管理。我可以通过DAX处理过滤吗?我一直在努力学习更多的DAX,但到目前为止我是新的并且难倒。

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

当我对数据进行建模时,例如,在数据透视表中,为了分析学科和评估之间的相关性,我引入了一项称为纪律事件计数(纪律事件记录数)和评估平均得分(评估平均值)的指标分数)。我只想查看有两者价值的学生列表,但我得到如下内容:

学生姓名--------纪律事件计数--------评估平均分

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

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

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

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

感谢您的反馈!

1 个答案:

答案 0 :(得分:0)

因此,在应用程序层中对此进行过滤可能是您最好的选择。

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

您分享的样本示例如下:

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

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

现在,只有当您的数据透视表由[Discipline Incident Count]和[Assessment Average Score]组成时,此度量才有效。如果您从新的事实表中添加另一个度量,则数据透视表行中学生的值的存在将不会影响该行的显示。

您需要一个新措施:

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

现在,只有当[评估平均分数]和[您的新测量]都是非空白时,此版本2才有效。如果你在样本中使用了这个版本2,你已经发布没有 [你的新措施],那么对于没有[你的新措施]条目的学生,它仍然会返回空白。

因此,对于与其一起使用的其他措施的每种可能组合,您将需要一个版本。

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

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

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

长篇故事,缩短了,不是。 DAX中没有内省设施足以满足您的需求。在应用层处理它。

相关问题