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 报表中,可以在报表、页面或视觉对象级别设置筛选器。
  • 分组(切块)
    将查询结果划分为组。 每个组也是一个筛选器,但与筛选阶段不同,筛选器值在查询结果中可见。 例如,按客户分组会按客户筛选每个组。
  • 汇总
    生成单值结果。 通常,报表视觉对象使用聚合函数来汇总数字字段。 聚合函数包括 sum、count、minimum、maximum 等。 可以通过聚合列来实现简单汇总,也可以通过使用 DAX 公式创建度量来实现复杂汇总。

表格模型

Power BI 模型是一种表格模型。 表格模型由一个或多个包含列的表组成。 它还可以包含关系、层次结构和计算。

表存储模式

每个 Power BI 模型表(计算表除外)都有一个存储模式属性。 存储模式属性可以是“导入”、“DirectQuery”或“双重”,它决定了表数据是否存储在模型中。

  • 导入 – 查询将检索模型中存储或缓存的数据。
  • DirectQuery – 查询将传递到数据源。
  • 双重 – 查询将检索存储的数据,或传递到数据源。 Power BI 将确定最有效的计划,并尽可能使用缓存的数据。

Power BI模型框架

Power BI包含以下模型框架

  • 导入模型:包含存储模式属性设置为“导入”的表。
  • DirectQuery 模型:包含存储模式属性设置为“DirectQuery”的表,这些表属于同一个源组。 本模块将在后面的部分介绍源组。
  • 复合模型:包含多个源组。

什么时候使用导入模型

设计report的时候尽可能选择导入模型框架。 此框架提供最多的选择、设计灵活性和快速性能。

导入模型的优势

  • 支持所有 Power BI 数据源类型,包括数据库、文件、源、网页、数据流等。
  • 可以集成源数据。 例如,一个表将关系数据库用作数据源,而相关的表将网页用作数据源。
  • 支持所有 DAX 和 Power Query (M) 功能。
  • 支持计算表。
  • 提供最佳查询性能。 这是因为,模型中缓存的数据已针对分析查询(筛选、分组和汇总)进行优化,并且模型完全存储在内存中。
    导入模型提供最多的选项和最高的设计灵活性,同时提供优异的性能。 PowerBI将以下获取数据的方式默认为导入模型:
    在这里插入图片描述

导入模型的劣势

导入模型的劣势与模型大小和数据刷新有关。

  1. 模型大小

Power BI 施加数据集大小限制,以便限制模型的大小。 将模型发布到共享容量时,每个数据集的大小限制为 1-GB。 如果超过此大小限制,将无法刷新该数据集。 将模型发布到专用容量(也称为高级容量)时,如果为容量启用了大型数据集存储格式设置,该模型可以会增长到 10 GB 以上。

所以,使用导入模型时,应该努力减少表中存储的数据量,有助于减少模型刷新的持续时间并加快模型查询。主要可以使用以下方法:

  • 删除不必要的列
  • 删除不必要的行
  • 分组和汇总以提高事实数据表的粒度
  • 优先使用数值数据,以优化列数据类型
  • 优先使用 Power Query 中的自定义列,而不是模型中的计算列
  • 禁用 Power Query 查询负载
  • 禁用自动日期/时间
  • 使用 DirectQuery 表存储,如本模块后面的单元中所述。
  1. 数据刷新

导入的数据必须定期刷新。 数据集数据的新旧状态只与上次成功刷新数据时的状态一致。 若要使数据保持最新,可以设置计划数据刷新,或者报表使用者可以执行按需刷新。

Power BI 对计划刷新操作的执行频率施加限制。 在共享容量中每日最多可执行 8 次,在专用容量中每日最多可执行 48 次。默认情况下,若要刷新某个表,Power BI 会删除所有数据,然后重新加载该表。

什么时候使用DirectQuery 模型

如果你的数据源存储大量数据和/或报表需要提供准实时数据,请选择 DirectQuery 模型框架。

DirectQuery 模型包含存储模式属性设置为“DirectQuery”的表,这些表属于同一个源组。

源组是与数据源相关的一组模型表。 分为两种类型:

  • 导入 – 表示所有导入存储模式表(包括计算表)。 一个模型中只能有一个导入源组。
  • DirectQuery – 表示与特定数据源相关的所有 DirectQuery 存储模式表。

DirectQuery 模型的优势

  1. 为大型或快速变化的数据源建模

由于 DirectQuery 表不需要刷新,因此它们很适合用于大型数据存储,例如数据仓库。 将整个数据仓库导入到模型是不切实际且低效的做法,甚至根本做不到。 当源数据快速变化而用户需要查看最新数据时,DirectQuery 模型可以提供准实时的查询结果。

当报表查询 DirectQuery 模型时,Power BI 会将这些查询传递到基础数据源。

  1. 强制实施源 RLS

当源数据库强制实施行级安全性 (RLS) 时, 源数据库不会在 Power BI 模型中复制 RLS 规则,而是强制实施其规则。 此方法仅适用于某些关系数据库,它涉及到为数据集数据源设置单一登录。

  1. 数据主权限制

如果你的组织实施了限制数据离开所在地的安全策略,则无法导入数据。 可能适合使用连接到本地数据源的 DirectQuery 模型。

  1. 创建专用数据集

DirectQuery 模式支持关系数据库源。因为Power BI 必须将分析查询转换为数据源可以理解的本机查询。

但是,可以采用一种非常有效的替代做法。 你可以连接到 Power BI 数据集(或 Azure Analysis Services 模型),并将其转换为 DirectQuery 本地模型。 本地模型是描述一个模型与另一个模型的关系的相关术语。 在这种情况下,原始数据集是远程模型,新数据集是本地模型。 这些模型链接在一起,“链接”是用于描述相关模型的术语。 通过这种方式,最多可以链接三个模型。

这种链接模型的功能支持个性化和/或扩展远程模型的潜力。 可以执行的最简单操作是将对象(例如表或列)重命名,或者向本地模型添加度量。 还可以使用计算列或计算表来扩展模型,或者添加新的导入表或 DirectQuery 表。 但是,这些扩展会导致创建新的源组,这意味着,模型将变成复合模型。

DirectQuery模型的劣势

  • 并非所有数据源都受支持。 通常,仅支持主要关系数据库系统。 也支持 Power BI 数据集和 Azure Analysis Services 模型。

  • 并非可以执行所有 Power Query (M) 转换,因为这些查询必须转换为源系统可以理解的本机查询。 因此,举例来说,无法使用透视或逆透视转换。

  • 分析查询性能可能不佳,尤其是在源系统未优化(使用索引或具体化视图)或分析工作负载的资源不足的情况下。

  • 分析查询可能会影响源系统的性能。 这可能导致所有工作负载(包括 OLTP 操作)的体验变慢。

你可以通过数据源优化和将用户定义的聚合表添加到 DirectQuery 模型的方式来进行一些优化

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐