表格没有空白行,切片器里面怎么会有空白项 —– 令人困惑的空白选项 这个问题曾经困扰过很多人: 我的数据中明明没有空白,为什么制作报表的时候,筛选器和图表有时会显示一条空白记录? 空白当然不是凭空产生的,它遵循一定的规律,这篇文章我们来介绍空白项产生的原因,也就是参照完整性 关系模型的三类完整性约束 数据库关系模型中有三类完整性约束,分别是:实体完整性,参照完整性,用户定义完整性 实体完整性 用于保证关系数据库中每条记录都是可区分的,唯一的,这种唯一既不能有重复值,也不能有空值。在主键 外键和索引中我们介绍过,这其实就是主键的作用,因此,从便于记忆的角度,你也可以理解为主键完整性。 用户定义完整性 不同的关系数据库因其应用环境的不同,通常需要针对某一具体字段设置约束条件,这种由使用者基于具体业务逻辑设定的约束条件,就叫做用户定义完整性。比如学生的性别字段只能有男、女两个值,学生考试成绩的范围是 0-100 分。 参照完整性 参照完整性,又称引用完整性,是相关联的两个表之间的约束,对于建立关系的两个表来说,维度表中每条记录的外键的值必须是主表中存在的,简单的说,就是事实表的每一行必须在维表中存在对应的记录。 以下表为例,位于关系多端的 Orders 表的外键 CustomerID 存在一条记录[CustomerID = CustX]与维表不匹配,这种情况下以 DIM_A 表的 Customer 列建立筛选器(文章开头的图片),会显示一条空白记录。 违反参照完整性示意图 Power BI 允许违反参照完整性的情况出现,而在数据库系统中,如果两个表之间建立了关联关系,对关系的操作会影响到另一个表中的记录,此时参照的完整性不允许关系中有不存在的实体引用。参照完整性与实体完整性二者,皆是关系模型必须满足的完整性约束条件,其目的在于保证数据一致性。 下面两幅图只有上图符合参照完整性 Power BI 中的参照完整性 允许违反参照完整性的情况出现,也就是事实表中可以存在与维表不匹配的行,通过维度表的属性汇总数据时,系统将这些不匹配的记录自动映射到空白行。 空白项本身不代表记录数量,有多条不匹配记录,也只显示一个空白行 当维度表本身存在空值的时候,参照完整性和自身的空值合并显示会让情况变的复杂 维度表的 Category 列本身有空值,和参照完整性混合显示(右侧) 处理参照完整性 熟悉参照完整性可以帮助你了解源数据中是否在不匹配的记录,以便及时采取相应的措施。不过,很多情况下这种违反并不需要干预。但是出现在报表中的空白就很影响用户体验了,这个时候我们可以使用视觉筛选器过滤掉空白记录。 图表和筛选器都可以使用类似的方法过滤掉空白项 另外,某些 DAX 函数也遵循不同的参照完整性策略,比如 VALUES 考虑参照完整性,DISTINCT 不考虑参照完整性。在表函数部分,会对这种行为做详细介绍。 假设引用完整性对性能的影响 在直连模式下(DirectQuery),使用假设引用完整性可以获得更好的性能表现,如果感觉直连模式下查询缓慢,请检查此设置是否开启。 开启方式 在创建表关系界面下会显示“假设引用完整性”,选中后,Power BI 将对数据验证此设置,以确保没有 Null 或不匹配的行。 但是 ,在值的数量非常大的情况下,验证不能保证没有引用完整性问题。 设置界面 验证将在编辑关系时执行,如果数据有任何后续更改,验证结果不会自动更新。 开启效果 查询语句从左外连接变为内连接,大大减轻计算开销。 设置错误会发生什么 如果在数据中有引用完整性问题时设置“假设引用完整性”,此设置不会导致错误 。 但是,将导致数据明显不一致。 例如: 视觉对象显示的总订单数量 值为 40 视觉对象显示总的 按仓库城市的订单数量 值仅为 30 ,因为它不包含未匹配记录所含的订单数量。 |
|
来自: 优雅野人 > 《二 dax基础知识》