微软PowerBI考试 PL300-选择 Power BI 模型框架
20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据模型的核心。
Power BI 为你在设计模型时提供了一种选择。 你可以使用 Power BI Desktop 来开发模型,还可以使用不同的框架进行模型开发。 这些框架有助于提供强大的性能和/或准实时结果。
介绍 Power BI 模型基础知识
本单元介绍 Power BI 模型的术语。 必须理解这些术语才能为项目选择适当的模型框架。 本单元介绍以下术语:
数据模型
Power BI 数据集
分析查询
表格模型
星型架构设计
表存储模式
模型框架
数据模型
Power BI 数据模型是针对分析进行优化的可查询数据资源。 报表可以使用以下两种分析语言之一来查询数据模型:数据分析表达式 (DAX) 或多维表达式 (MDX)。 Power BI 使用 DAX,而分页报表可以使用 DAX 或 MDX。 “在 Excel 中分析”功能使用 MDX。
Power BI 数据集
在 Power BI Desktop 中开发 Power BI 模型并将其发布到 Power BI 服务中的工作区后,该模型称为数据集。 数据集是一个 Power BI 项目,它是 Power BI 报表和仪表板中可视化效果的数据源。
分析查询
Power BI 报表和仪表板必须查询某个数据集。 当 Power BI 可视化数据集数据时,它会准备并发送一个分析查询。 分析查询从模型生成查询结果,该结果很容易理解,尤其是以可视化的情况下。
分析查询包括按以下顺序执行的三个阶段:
筛选
分组
汇总
筛选(有时称为切片)将查询范围缩小为一部分模型数据。 筛选器值在查询结果中不可见。 大多数分析查询会应用筛选器,因为按时间段(通常还包括其他属性)进行筛选是常见的做法。 筛选以不同的方式发生。 在 Power BI 报表中,可以在报表、页面或视觉对象级别设置筛选器。 报表布局通常包括切片器视觉对象,以便筛选报表页面上的视觉对象。 当模型强制实施行级安全性 (RLS) 时,它会将筛选器应用于模型表以限制对特定数据的访问。 用于汇总模型数据的度量也可以应用筛选器。
分组(有时称为切块)将查询结果划分为组。 每个组也是一个筛选器,但与筛选阶段不同,筛选器值在查询结果中可见。 例如,按客户分组会按客户筛选每个组。
汇总生成单值结果。 通常,报表视觉对象使用聚合函数来汇总数字字段。 聚合函数包括 sum、count、minimum、maximum 等。 可以通过聚合列来实现简单汇总,也可以通过使用 DAX 公式创建度量来实现复杂汇总。
示例:Power BI 报表页面包含一个切片器,用于按一年时间段进行筛选。 其中还有一个柱形图视觉对象显示筛选年份的季度销售额。
在此示例中,切片器按 2021 日历年筛选视觉对象。 柱形图按季度(筛选年份)分组。 每一列是代表可见筛选器的组。 列高度代表筛选年份的每个季度的汇总销售值。
表格模型 Power BI 模型是一种表格模型。 表格模型由一个或多个包含列的表组成。 它还可以包含关系、层次结构和计算。
星型架构设计 若要生成优化且易于使用的表格模型,我们建议生成星型架构设计。 星型架构设计是由关系数据仓库广泛采用的成熟建模方法。 它要求将模型表分类为维度或事实。
维度表描述业务实体(即建模对象)。 实体可以包含产品、人员、地点和包括时间本身的概念。 事实数据表存储观测项或事件,例如,可以是销售订单、库存余量、汇率或温度读数。 事实数据表包含与维度表和数值度量值列相关的维度键列。 事实数据表构成了星形的核心,相关的维度表构成了星形的各个点。
在分析查询中,将会筛选或分组维度表列。 将汇总事实数据表列。
表存储模式
每个 Power BI 模型表(计算表除外)都有一个存储模式属性。 存储模式属性可以是“导入”、“DirectQuery”或“双重”,它决定了表数据是否存储在模型中。
导入 – 查询将检索模型中存储或缓存的数据。
DirectQuery – 查询将传递到数据源。
双重 – 查询将检索存储的数据,或传递到数据源。 Power BI 将确定最有效的计划,并尽可能使用缓存的数据。 模型框架
表存储模式设置决定了模型框架:导入、DirectQuery 或复合框架。 本模块中的以下单元介绍了上述每种框架,并提供了其用法指导。
导入模型包含存储模式属性设置为“导入”的表。
DirectQuery 模型包含存储模式属性设置为“DirectQuery”的表,这些表属于同一个源组。 本模块将在后面的部分介绍源组。
复合模型包含多个源组。
确定何时开发导入模型
导入模型包含存储模式属性设置为“导入”的表。 它还包含可以使用 DAX 公式定义的计算表。
导入模型的优势
导入模型是最常开发的模型框架,因为它们有许多优势。 导入模型:
支持所有 Power BI 数据源类型,包括数据库、文件、源、网页、数据流等。
可以集成源数据。 例如,一个表将关系数据库用作数据源,而相关的表将网页用作数据源。
支持所有 DAX 和 Power Query (M) 功能。
支持计算表。
提供最佳查询性能。 这是因为,模型中缓存的数据已针对分析查询(筛选、分组和汇总)进行优化,并且模型完全存储在内存中。
简而言之,导入模型提供最多的选项和最高的设计灵活性,同时提供优异的性能。 出于此原因,当你“获取数据”时,Power BI Desktop 默认将使用导入存储模式。
导入模型的限制
尽管导入模型有许多引人注目的优势,但也必须记住它的一些限制。 限制与模型大小和数据刷新有关。
模型大小
Power BI 施加数据集大小限制,以便限制模型的大小。 将模型发布到共享容量时,每个数据集的大小限制为 1-GB。 如果超过此大小限制,将无法刷新该数据集。 将模型发布到专用容量(也称为高级容量)时,如果为容量启用了大型数据集存储格式设置,该模型可以会增长到 10 GB 以上。
应始终努力减少表中存储的数据量。 此策略有助于减少模型刷新的持续时间并加快模型查询。 可以应用许多数据缩减技术,包括:
删除不必要的列
删除不必要的行
分组和汇总以提高事实数据表的粒度
优先使用数值数据,以优化列数据类型
优先使用 Power Query 中的自定义列,而不是模型中的计算列
禁用 Power Query 查询负载
禁用自动日期/时间
使用 DirectQuery 表存储,如本模块后面的单元中所述。
数据刷新
导入的数据必须定期刷新。 数据集数据的最新状态取决于上次成功刷新的时间。 若要使数据保持最新,可以设置计划数据刷新,或者报表使用者可以执行按需刷新。
Power BI 对计划刷新操作的执行频率施加限制。 在共享容量中每日最多可执行 8 次,在专用容量中每日最多可执行 48 次。
应该确定是否可以容忍这种延迟程度。 这种判定通常取决于数据的速度(或易变性),以及让用户知道当前数据状态的迫切性。 如果计划刷新限制不可接受,请考虑使用 DirectQuery 存储表或创建混合表。 也可以改用不同的方法,并创建实时数据集。
还必须考虑刷新工作负载和持续时间。 默认情况下,若要刷新某个表,Power BI 会删除所有数据,然后重新加载该表。 这些操作可能会给源系统带来不可接受的负担,尤其是对于大型事实数据表而言。 若要减轻这种负担,可以设置增量刷新功能。 增量刷新将自动化时段分区的创建和管理,并智能化地仅更新那些需要刷新的分区。
如果数据源支持增量刷新,则它可以更快、更可靠地实现刷新,并减少 Power BI 和源系统的资源消耗。
高级数据建模师可以自定义自己的分区策略。 自动化脚本可以创建、管理和刷新表分区。
确定何时开发 DirectQuery 模型
DirectQuery 模型包含存储模式属性设置为“DirectQuery”的表,这些表属于同一个源组。
源组是与数据源相关的一组模型表。 分为两种类型:
导入 – 表示所有导入存储模式表(包括计算表)。 一个模型中只能有一个导入源组。
DirectQuery – 表示与特定数据源相关的所有 DirectQuery 存储模式表。
DirectQuery 模型的优势
开发 DirectQuery 模型可以获得多项优势。
为大型或快速变化的数据源建模
当源数据表现出数量和/或速度方面的特征时,非常适合选择 DirectQuery 模型作为框架。 由于 DirectQuery 表不需要刷新,因此它们很适合用于大型数据存储,例如数据仓库。 将整个数据仓库导入到模型是不切实际且低效的做法,甚至根本做不到。 当源数据快速变化而用户需要查看最新数据时,DirectQuery 模型可以提供准实时的查询结果。
当报表查询 DirectQuery 模型时,Power BI 会将这些查询传递到基础数据源。
强制实施源 RLS
当源数据库强制实施行级安全性 (RLS) 时,DirectQuery 也很有用。 源数据库不会在 Power BI 模型中复制 RLS 规则,而是强制实施其规则。 此方法仅适用于某些关系数据库,它涉及到为数据集数据源设置单一登录。
数据主权限制
如果你的组织实施了限制数据离开所在地的安全策略,则无法导入数据。 可能适合使用连接到本地数据源的 DirectQuery 模型。 (也可以考虑安装 Power BI 报表服务器用于本地报告。)
创建专用数据集
通常,DirectQuery 模式支持关系数据库源。 这是因为,Power BI 必须将分析查询转换为数据源可以理解的本机查询。
但是,可以采用一种非常有效的替代做法。 你可以连接到 Power BI 数据集(或 Azure Analysis Services 模型),并将其转换为 DirectQuery 本地模型。 本地模型是描述一个模型与另一个模型的关系的相关术语。 在这种情况下,原始数据集是远程模型,新数据集是本地模型。 这些模型链接在一起,“链接”是用于描述相关模型的术语。 通过这种方式,最多可以链接三个模型。
这种链接模型的功能支持个性化和/或扩展远程模型的潜力。 可以执行的最简单操作是将对象(例如表或列)重命名,或者向本地模型添加度量。 还可以使用计算列或计算表来扩展模型,或者添加新的导入表或 DirectQuery 表。 但是,这些扩展会导致创建新的源组,这意味着,模型将变成复合模型。
DirectQuery 模型限制
必须记住与 DirectQuery 模型相关的许多限制。 主要限制如下:
并非所有数据源都受支持。 通常,仅支持主要关系数据库系统。 也支持 Power BI 数据集和 Azure Analysis Services 模型。
并非可以执行所有 Power Query (M) 转换,因为这些查询必须转换为源系统可以理解的本机查询。 因此,举例来说,无法使用透视或逆透视转换。
分析查询性能可能不佳,尤其是在源系统未优化(使用索引或具体化视图)或分析工作负载的资源不足的情况下。
分析查询可能会影响源系统的性能。 这可能导致所有工作负载(包括 OLTP 操作)的体验变慢。
提升 DirectQuery 模型性能
如果你有理由开发 DirectQuery 模型,可以通过两种方式来缓解一些限制。
数据源优化
可以优化源数据库,以确保预期的分析查询工作负载性能良好。 具体而言,可以创建索引和具体化视图,并确保数据库为所有工作负载提供足够的资源。
DirectQuery 用户定义的聚合表
可将用户定义的聚合表添加到 DirectQuery 模型。 用户定义的聚合表是隐藏的特殊模型表(来自用户、计算和 RLS)。 如果它们满足针对大型事实数据表执行的较高粒度的分析查询,则它们可以发挥最大的作用。 将聚合表设置为使用 DirectQuery 存储模式后,它可以查询数据源中的具体化视图。 还可以将聚合表设置为使用导入存储模式或启用自动聚合。
确定何时开发复合模型
复合模型包含多个源组。 通常,始终存在导入源组和 DirectQuery 源组。
复合模型的优势
开发复合模型可以获得多项优势。
复合模型提供设计灵活性。 你可以选择使用不同的存储模式来集成数据,并在导入的数据与直通数据之间取得适当的平衡。 通常,对大型数据源使用 DirectQuery 表并通过导入的表提升查询性能,可以使企业模型受益。 本单元稍后将介绍支持此方案的 Power BI 功能。
复合模型还能使 Power BI 有机会通过导入的数据来满足某些分析查询的需求,从而提升 DirectQuery 模型的性能。 查询缓存数据的性能几乎始终比直通查询更好。
最后,当你的模型包含远程模型的 DirectQuery 表(例如 Power BI 数据集)时,你可以使用新的计算列和表来扩展自己的模型。 它会基于核心模型生成专用模型。
复合模型的限制
有几项限制与复合模型相关。
导入(或稍后所述的“双重”)存储模式表仍然需要定期刷新。 导入的数据可能与 DirectQuery 源数据失去同步,因此定期刷新这些数据非常重要。
当分析查询必须合并导入的数据和 DirectQuery 数据时,Power BI 必须合并源组查询结果,这可能会影响性能。 为了帮助避免较高粒度的查询出现这种情况,可将导入聚合表添加到模型(或启用自动聚合),并将相关维度表设置为使用双重存储模式。 本单元稍后将介绍此方案。
链接模型(将 DirectQuery 链接到 Power BI 数据集)时,对上游模型所做的修改可能会破坏下游模型。 请务必先执行 数据集影响分析 来评估修改的影响。
不同源组中的表之间的关系称为受限关系。 如果没有保证的“一”端(“一”端表示列包含唯一值,则模型关系被视为有限;“多”侧表示该列可以包含重复值)。这种情况可能发生在两种情况下。 第一种情况是在关系使用多对多基数类型时发生的,即使一列或两列包含独一无二的值也是如此。 第二种情况是关系跨越不同的源组,这仅在复合模型中发生。 受限关系可能会导致以不同的方式评估模型查询和计算。
通过导入的数据提升 DirectQuery 模型性能
如果你有理由开发 DirectQuery 模型,可以使用涉及到导入表的特定 Power BI 功能来缓解一些限制。
导入聚合表
可以添加导入存储模式用户定义的聚合表或启用自动聚合。 这样,Power BI 会将较高粒度的事实查询定向到缓存的聚合。 若要进一步提升查询性能,请确保相关维度表设置为使用双重存储模式。
自动聚合是一项高级功能。
双重存储模式
双重存储模式表设置为同时使用导入存储模式和 DirectQuery 存储模式。 在查询时,Power BI 将确定可用的最有效模式。 只要有可能,Power BI 就会尝试使用缓存数据来满足分析查询的需求。
双重存储模式表可以很好地与导入聚合表配合工作。 它们使得 Power BI 能够完全从缓存数据满足较高粒度的查询的需求。
通常基于维度表列的切片器视觉对象和筛选器卡片列表可以更快地呈现,因为它们是从缓存数据查询的。
从导入模型提供实时数据
使用增量刷新设置导入表时,可以启用“使用 DirectQuery 实时获取最新数据”选项。
启用此选项后,Power BI 会自动创建一个使用 DirectQuery 存储模式的表分区。 在这种情况下,该表将变为混合表,这意味着,它具有用于存储旧数据的导入分区,以及用于存储当前数据的单个 DirectQuery 分区。
当 Power BI 查询混合表时,查询将为旧数据使用缓存,并直通到数据源以检索当前数据。
只能通过高级许可证使用此选项。
选择模型框架
下面提供了有关为项目选择适当模型框架的一般指导。 这些指导特别适合用于数据量较大、查询吞吐量较高、且快速响应非常重要的企业解决方案。
最重要的是,应该尽可能选择导入模型框架。 此框架提供最多的选择、设计灵活性和快速性能。 请务必应用数据缩减技术,以确保 Power BI 加载尽可能少的数据。
如果你的数据源存储大量数据和/或报表需要提供准实时数据,请选择 DirectQuery 模型框架。
选择复合模型框架可以:
提升 DirectQuery 模型的查询性能。
从导入模型提供准实时的查询结果。
使用其他数据扩展 Power BI 数据集(或 AAS 模型)。
可以使用聚合表(它们可以使用导入存储模式或 DirectQuery 存储模式)来提升 DirectQuery 模型的查询性能。 使用导入聚合表时,请务必设置相关维度表以使用双重存储模式。 这样,Power BI 就可以完全通过缓存来满足较高粒度的查询的需求。
可以通过创建混合表从导入模型中提供准实时的查询结果。 在这种情况下,Power BI 将为当前时段添加一个 DirectQuery 分区。
最后,可以使用 DirectQuery 通过链接到核心模型来创建专用模型。 这种类型的开发通常由业务分析师完成,他们扩展核心模型,而 IT 人员则会交付这些模型并为其提供支持。
欢迎留言讨论~