表格没有空白行,切片器里面怎么会有空白项
这个问题曾经困扰过很多人:
我的数据中明明没有空白,为什么制作报表的时候,筛选器和图表有时会显示一条空白记录?
空白当然不是凭空产生的,它遵循一定的规律,这篇文章我们来介绍空白项产生的原因,也就是参照完整性
关系模型的三类完整性约束
数据库关系模型中有三类完整性约束,分别是:实体完整性,参照完整性,用户定义完整性
实体完整性
用于保证关系数据库中每条记录都是可区分的,唯一的,这种唯一既不能有重复值,也不能有空值。在主键 外键和索引中我们介绍过,这其实就是主键的作用,因此,从便于记忆的角度,你也可以理解为主键完整性。
用户定义完整性
不同的关系数据库因其应用环境的不同,通常需要针对某一具体字段设置约束条件,这种由使用者基于具体业务逻辑设定的约束条件,就叫做用户定义完整性。比如学生的性别字段只能有男、女两个值,学生考试成绩的范围是 0-100 分。
参照完整性
参照完整性,又称引用完整性,是相关联的两个表之间的约束,对于建立关系的两个表来说,事实表每条记录中的外键必须是主表中存在的,简单的说,就是事实表的每一行必须在维表中存在对应的记录。
以下表为例,位于关系多端的 Orders 表的外键 CustomerID 存在一条记录[CustomerID = CustX]与维表不匹配,这种情况下以 DIM_A 表的 Customer 列建立筛选器(文章开头的图片),会显示一条空白记录。
Power BI 允许违反参照完整性的情况出现,而在数据库系统中,如果两个表之间建立了关联关系,对关系的操作会影响到另一个表中的记录,此时参照的完整性不允许关系中有不存在的实体引用。参照完整性与实体完整性二者,皆是关系模型必须满足的完整性约束条件,其目的在于保证数据一致性。
下面两幅图只有上图符合参照完整性
Power BI 中的参照完整性
- 允许违反参照完整性的情况出现,也就是事实表中可以存在与维表不匹配的行,通过维度表的属性汇总数据时,系统将这些不匹配的记录自动映射到空白行。
- 空白项本身不代表记录数量,有多条不匹配记录,也只显示一个空白行
- 当维度表本身存在空值的时候,参照完整性和自身的空值合并显示会让情况变的复杂
处理参照完整性
熟悉参照完整性可以帮助你了解源数据中是否在不匹配的记录,以便及时采取相应的措施。不过,很多情况下这种违反并不需要干预。但是出现在报表中的空白就很影响用户体验了,这个时候我们可以使用视觉筛选器过滤掉空白记录。
另外,某些 DAX 函数也遵循不同的参照完整性策略,比如 VALUES 考虑参照完整性,DISTINCT 不考虑参照完整性。在表函数部分,会对这种行为做详细介绍。
假设引用完整性对性能的影响
在直连模式下(DirectQuery),使用假设引用完整性可以获得更好的性能表现,如果感觉直连模式下查询缓慢,请检查此设置是否开启。
开启方式
高老师,图片1中的描述,红框1中是不是应该是“事实表”啊?
表关系没有引用完整性问题是,“假设应用完整性”这个选项好像是不可选状态?
请问老师,作为非技术人员,平时使用pbi的数据源都是放在excel里面的。现在数据量越来越大,可以直接用原来在excel里面弄好的维度表和事实表,全部导入到比如mysql数据库?之后数据库里面的数据加载到pbi.
如果是这样的话,我再问问,比如pbi里面的建模,比如一对多,就是可以sql写比如左连接语句。这两者内在逻辑怎么联系起来?
老师的2.0版啥时候出版哈