简介
创建出色的语义模型是数据分析人员可以在 Microsoft Power BI 中执行的最重要的任务之一。 通过出色地完成这项工作,你可以帮助用户更轻松地理解你的数据,从而使他们和你自己能够更轻松地生成有价值的 Power BI 报表。
此模块中的页面仅提供说明,不提供数据文件。 你有机会使用实验室中的真实数据。
出色的语义模型具有以下优点:
数据浏览速度更快。
聚合更易于生成。
报表更加准确。
编写报表所需的时间更少。
报表以后更易于维护。
为生成出色语义模型制定固定规则很难,因为所有数据都不相同,并且数据的用法也各有不同。 一般而言,较小的语义模型会更好,因为其性能更快并且更易于使用。 但是,定义较小的语义模型同样困难重重,原因在于这是一个启发式的主观概念。
通常情况下,较小的语义模型包含更少的表,且每个表中用户可以看到的列也更少。 如果从销售数据库中导入所有必需的表,但共计有 30 个表,则用户不会认为其具有直观性。 将这些表折叠为五个表会使语义模型对用户而言更直观,而如果用户打开某个表并找到 100 列,他们可能会觉得无从着手。 删除不需要的列来提供可管理的列数可增加用户查看所有列名的可能性。 总而言之,在设计语义模型时应该以简洁性为目标。
下图是示例语义模型。 这些框中包含数据表,且框内的每个行项都是一列。 连接框的线表示表之间的关系。 即使在此类简单模型中,这些关系也可能很复杂。 语义模型很容易变得混乱,且模型中的总表数会逐渐增加。 让语义模型保持简单、全面和准确需要不断地努力。
通过主键和外键在表之间定义关系。 主键是标识每个唯一的非 null 数据行的列。 例如,如果你有一个“Customers”表,则可以有一个标识每个唯一客户的索引。 第一行的 ID 为 1,第二行的 ID 为 2,依此类推。 每行都分配有一个唯一值,该值可通过主键这一简单值进行指代。 当你引用其他表中的行时,此过程非常重要,这也是外键的作用所在。 当不同的表之间具有共用的主键和外键时,便会形成表之间的关系。
Power BI 允许从具有不同数据源的表中生成关系,它是一个功能强大的函数,使你可以从 Microsoft Excel 中拉取一个表并从关系数据库中拉取另一个表。 然后,你将在这两个表之间创建关系,并将它们视为统一的语义模型。
现在,你已了解构成数据架构的关系,接下来可以探索一种特定类型的架构设计,即星型架构。该架构经过优化,可实现高性能和可用性。
星型架构
你可以设计星型架构用于简化数据。 这不是简化数据的唯一方法,但它是一种常用方法;因此,每个 Power BI 数据分析人员都应该了解它。 在星型架构中,语义模型中的每个表都定义为一个维度表或事实数据表,如下图所示。
事实数据表包含观测或事件数据值:销售订单、产品计数、价格、交易日期和时间,以及数量。 事实数据表可以包含多个重复值。 例如,对于不同日期的不同客户,一个产品可以在多个行中多次出现。 可以聚合这些值以创建视觉对象。 例如,总销售订单数视觉对象是事实数据表中所有销售订单的聚合。 对于事实数据表,通常会看到填充数字和日期的列。 这些数字可以是度量单位(例如销售量),也可以是键(例如客户 ID)。 日期表示记录的时间,如订单日期或发货日期。
维度表包含有关事实数据表中数据的详细信息:产品、位置、员工和订单类型。 这些表通过键列连接到事实数据表。 维度表用于对事实数据表中的数据进行筛选和分组。 另一方面,事实数据表包含可度量的数据,如销售额和收入,每一行表示维度表中值的唯一组合。 对于总销售订单数视觉对象,可以将数据分组,以便按产品查看总销售订单数,其中产品是维度表中的数据。
事实数据表比维度表大很多,因为许多事件在事实数据表中发生,例如单独的销售。 维度表通常较小,因为受限于可以筛选和分组的项数。 例如,一年仅包含一定数量的月份,而美国仅由一定数量的州组成。
考虑到有关事实数据表和维度表的这些信息,你可能想知道如何在 Power BI 中生成此视觉对象。
相关数据位于“Employee”和“Sales”这两个表中,如以下语义模型所示。 因为“Sales”表包含可以聚合的销售订单值,所以将其视为事实数据表。 “Employee”表包含特定员工姓名,可用于筛选销售订单,因此它将是维度表。 两个表之间的公用列(即“Employee”表中的主键)为“EmployeeID”,因此,可以基于此列在两个表之间建立关系。
创建此关系时,可以根据要求生成视觉对象,如下图所示。 如果不建立此关系,则在需要考虑两个表之间的共性的情况下,将更难以生成视觉对象。
星型架构和基础语义模型是有序报表的基础;在创建这些连接和设计上花费的时间越多,创建和维护报表就越容易。