Power BI 数据建模与分析入门
本文介绍了Power BI的核心优势及其在敏捷数据分析中的应用,重点讲解了数据导入、Power Query数据清洗、星型模式建模以及DAX表达式的使用。通过xVelocity引擎和列式存储,Power BI能够高效处理海量数据。读者还将学习如何创建表关系、层次结构和用户友好的数据模型,为后续的可视化分析打下坚实基础。
第1章: Int Power BI 简介
为何使用Power BI?
您可能曾参与过一个传统BI项目,该项目包含一个集中式数据仓库,组织的各个数据存储会加载到该仓库中,进行清理后转入联机分析处理(OLAP)数据库,用于报告和分析。这种方法的一些目标包括:为历史数据建立数据存储库、创建单一真相版本、减少数据孤岛、清洗公司数据并确保其符合标准,以及通过仪表板提供对数据趋势的洞察。尽管这些目标值得称赞,也是建立集中式数据仓库的重要理由,但这种方法也存在一些缺点。最显著的问题是系统构建和实施变更的复杂性。您可以询问任何曾尝试在企业级数据仓库中添加新字段或度量值的人,通常这是一个漫长而繁琐的过程,需要IT参与、数据管理委员会评审,以及开发和测试周期。
真正需要的是一种能够实现敏捷数据分析的解决方案,而无需过度依赖信息技术部门和正式流程。为了解决这些问题,许多业务分析师使用Excel创建数据透视表,并对从各种数据源获取的数据集进行即席分析。然而,使用孤立的Excel工作簿进行分析存在一些问题,包括相互冲突的事实版本、数据孤岛以及数据安全。
那么,如何解决集式数据仓库过于僵化而Excel解决方案又过于松散这一困境呢?这时微软的自助式商业智能工具集就派上用场了。这些工具并不会取代你的集式数据仓库解决方案,而是对其加以补充,以促进敏捷数据分析。通过使用Power BI,你可以从数据仓库中提取数据,并结合文本文件或Web数据源等其他数据源进行扩展,创建自定义度量值,并利用强大的可视化图表对数据进行分析,从而获得深刻的洞察。你可以快速创建概念验证,这些验证可轻松升级为企业级解决方案的一部分。
Power BI还支持无需漫长开发周期的一次性数据分析项目。当与Power BI服务门户结合使用时,报表和仪表板可以被共享、保护和管理。这在很大程度上满足了信息技术部门对治理的需求,同时又不妨碍业务用户对敏捷性的需求。
以下是 Power BI 的一些优势:
- Power BI Desktop 是一个用于创建报告的免费工具。
- 轻松集成来自各种源的数据。
- 处理大量数据,可达数千万至数亿行。
- 包含强大的数据分析表达式 (DAX) 语言。
- 模型中的数据为只读,从而提高了安全性和完整性。
当 Power BI 报表托管在 Power BI 服务门户中时,会带来一些额外的优势
- 实现共享与协作
- 数据刷新的调度与自动化
- 通过版本管理可以审计变更
- 可为用户设置只读和可更新访问权限
现在您已经了解了 Power BI 的一些优势,接下来让我们看看它的工作原理。
xVelocity内存分析引擎
Power BI 背后的独特技术是 xVelocity 内存分析引擎(没错,这确实是它的名字)。xVelocity 使得 Power BI 能够在大量数据上实现快速的性能表现。其中的关键之一在于它使用列式数据库来存储数据。传统的基于行的数据存储将整行的所有数据一起存储,在根据行键检索或更新数据时效率较高,例如根据订单 ID 更新或检索某个订单。这种方式非常适合订单录入系统,但在对历史订单执行分析时效果不佳(比如您想查看过去一年的趋势以确定产品的销售情况)。此外,基于行的存储由于每行重复相同的值而占用更多空间;如果您有大量的客户,像 John 或 Smith 这样的常见姓名会被重复多次。列式数据库则仅存储每一列中的不同值,并将每一行存储为指向这些列值的一组指针。这种内置的索引机制节省了大量空间,并结合 xVelocity 引擎内置的数据压缩技术,实现了显著的优化。这也意味着对列值进行数据聚合(如典型数据分析中所使用的聚合)速度极快。
xVelocity引擎提供的另一个优势是内存分析。大多数与查询数据相关的处理瓶颈都发生在数据从磁盘读取或写入磁盘时。通过内存分析,数据被加载到计算机的内存中,然后进行查询。这使得处理速度大大加快,并减少了在磁盘上存储预聚合值的需求。当从32位转向如今主流的64位操作系统和应用程序时,这一优势尤为明显。
另一个值得一提的优点是 Power BI 数据模型的表格结构。该模型由表和表关系组成。这种表格模型对于大多数业务分析师和数据库开发人员来说都非常熟悉。传统的 OLAP 数据库(如 SQL Server 分析服务 (SSAS))将数据模型表示为三维多维数据集结构,这种结构难以操作,并且需要使用一种称为多维表达式(MDX)的复杂查询语言。我发现,在大多数情况下(但并非所有情况),使用表格模型和 DAX 比使用 OLAP 立方体和 MDX 更加简便。
设置 Power BI 环境
Power BI Desktop 是一个用于创建可在 Power BI 门户中托管的视觉分析报告的免费工具。您可以从 Power BI 网站 https://powerbi.microsoft.com/en-us/desktop/ 下载该工具。如果您注册了 Power BI 门户或拥有 Office 365 订阅,即可登录门户(https://powerbi.microsoft.com)并下载该工具(参见图 1-1)。

下载 Power BI Desktop 后,单击“运行”以开始安装。按照安装向导进行操作,过程很简单。安装完成后,启动 Power BI Desktop。单击“文件选项卡” ➤ “选项和设置” ➤ “选项”来设置开发环境的各种选项(参见图 1-2)。

需要注意的是,微软一直在发布包含新功能的每月更新。请确保在更新发布时及时收到通知并安装这些更新。您可以通过在选项窗口中选择诊断选项卡来查看已安装的版本。如果您和我一样,希望试用仍在开发中的即将推出的功能,可以在选项窗口的预览功能选项卡中启用这些功能。
现在,你已经安装并设置了 Power BI Desktop 开发环境,可以开始探索其界面了。
探索 Power BI Desktop 界面
启动 Power BI Desktop 时,你会看到一个启动屏幕(见图 1-3)。

您可以使用此屏幕启动最近的报告、使用最近的源开始新报告,或使用新的数据源开始新报告。在屏幕中央,您可以登录 Power BI 服务以与他人协作,或注册 Power BI Pro 的 60 天免费试用。在屏幕左侧,您可以链接到 Power BI博客 和 Power BI论坛。
注意 有一个功能有限的Power BI免费版;但本书基于Power BI Pro版本。
图 1-4 显示了在 Power BI Desktop 中打开的最新 Power BI报表 p.

首次在 Power BI Desktop 中打开报告时,您会看到报表视图。您还可以选择另外两个视图——数据视图和模型视图。要切换视图,请使用设计器左侧的选项卡(参见图 1-5)。

如果选择数据视图选项卡,您可以看到已导入模型中的数据表和数据(参见图 1-6)。

模型视图选项卡显示了模型中表之间的关系和筛选器方向(参见图 1-7)。

设计器顶部的菜单会根据所选视图的不同而变化。图1-8显示了在报表视图选项卡中的可用菜单。随着您深入学习本书,您将逐渐熟悉设计器中的菜单。目前,只需了解这些菜单是执行各种操作(例如连接数据源、创建数据查询、格式化数据、设置默认属性以及编辑视觉对象交互)的位置即可。

在报表设计器的右侧是可视化效果和字段窗口(参见图1-9)。在这里,您可以选择要在报告中显示的可视化效果,向可视化效果中添加字段,并设置可视化效果的属性。

现在您已经熟悉了 Power BI Desktop 报表设计器的各个组成部分,是时候亲自动手完成以下动手实验了。本实验将帮助您熟悉在 Power BI Desktop 中的工作方式。
注意 要完成本书中的实验,请确保从 https://github.com/Apress/beginning-power-bi-3ed 下载起始文件。
动手实验:探索 Power Pivot
在接下来的实验中,您将
- 安装 Power BI Desktop
- 查看 Power BI Desktop 的各个选项卡
- 使用矩阵探索数据
1. 转到 https://powerbi.microsoft.com/en-us/desktop/下载并安装 Power BI Desktop。
2. 启动 Power BI Desktop 并关闭启动屏幕。
3. 在文件菜单上,选择选项和设置,然后选择选项。此时应看到选项窗口(见图 1-10)。

- 在全局数据加载选项卡上,确保取消选中新文件的自动日期/时间选项。
- 查看其他可用的设置选项。
- 打开位于 LabStarterFiles 文件夹中的 Chapter1Lab1.pbix 文件。
- 您应该会看到一个基本的矩阵,显示按年份和国家划分的销售额,如图 1-11所示。

- 单击矩阵中的任意位置。您应该会在右侧看到视觉属性和字段列表,如图 1-12 所示。

- 在视觉属性中,有用于行、列和值的放置区域,称为区域。您可将字段拖放到这些区域中以创建矩阵。
- 在字段列表中,展开 dimproductCategory 表。找到 englishproductCategoryname 字段,并将其拖到日历年份字段下方的行区域。
- 在可视化窗口中,选择油漆桶图标并展开行标题选项卡。打开 +/‐ 用于展开矩阵行的图标(参见图 1- 13)。

- 注意,你现在可以展开和折叠矩阵(参见图 1-14)。查看矩阵可用的其他格式设置。

- 单击页面上的空白区域,使矩阵未被选中。选择图 1-15 中 突出显示的切片器视觉对象,并添加 englishprodutCategoryname。

- 在页面上重新排列切片器和矩阵,并注意在切片器中选择类别会筛选矩阵。
- 在设计器的左侧,切换到数据视图(参见图 1-16)。

- 使用设计器右侧的字段列表浏览不同表中的数据。
- 转到 DimProduct表中的产品替代键列。请注意,该列为灰色显示。这意味着它在报表视图中被隐藏。您可以通过切换回报表视图并确认字段列表中无法看到该字段来验证这一点。
- 在 FactInternetSales 表中,单击 利润额 列。请注意,这是一个使用 销售金额 和 产品标准成本 的计算列。它还已被格式化为货币。
- 在 FactInternetSales 表中有一个名为 总销售额 的度量值。单击该度量值,并注意表上方的公式栏中显示了用于计算该度量值的 DAX代码。
- 在设计器的右侧,切换到 模型视图。观察由连接表之间的线条表示的表之间的关系。
- 如果将鼠标指针悬停在关系上,您可以看到参与该关系的字段,如图 1-17 所示。

- 花一些时间探索模型、数据和报表视图。(尽管尝试去打破它!)完成后,保存文件并关闭 Power BI Desktop。
总结
本章向您介绍了Power BI Desktop。您了解了Power BI为何能够利用xVelocity引擎和列式数据存储来处理大量数据的背景知识。您还探索并获得了使用Power BI Desktop设计器的一些经验。目前无需担心如何开发模型和报告各个组成部分的细节,随着您逐步学习本书,这些内容将会详细解释。在下一章节中,您将学习如何从各种类型的数据源将数据导入模型。
第2章:将数据导入 Power BI Desktop
从关系型数据库导入数据
创建 Power BI 分析模型的首要步骤之一是导入数据。传统上,在基于 OLAP 立方体创建 BI 解决方案时,需要先将数据导入数据仓库,然后再加载到多维数据集中。将数据整合进多维数据集并供您使用通常需要较长时间。而这是 Power BI 模型的一大优势:您可以轻松快速地将来自各种源的数据合并到模型中。这些数据源可以来自关系型数据库、文本文件、Web 服务和 OLAP 立方体等。本章将介绍如何将来自这些不同源的数据导入 Power BI 模型。
完成本章后,您将能够
- 从关系型数据库导入数据
- 从文本文件导入数据
- 从数据源导入数据
- 从OLAP数据库导入数据
最常见的数据源类型之一是关系数据库。基于键的 SQL Server、Oracle、DB2 和 Access 等关系型数据库管理系统 (RDMS) 由表和表之间的关系组成。例如,图 2-1 显示了一个采购订单明细表和一个产品表。它们通过 ProductID 列相关联。这是一个一对多关系的示例。在产品表中的每一行,在采购订单明细表中都有多行对应。表中的键称为主键和外键。每个表都需要
一个主键,用于唯一标识表中的行。例如,产品ID 是产品表中的主键。产品ID 在采购订单明细表中被视为外键。外键指向相关表中的主键。请注意,主键可以由多个列组合而成;例如,采购订单明细表的主键是采购订单ID 和采购订单明细 ID 的组合。
尽管一对多关系最为常见,但你还会遇到另一种相当普遍的关系类型:多对多关系。图2-2展示了一个多对多关系的示例。一个人可能拥有不同类型的多个电话号码。例如,他们可能有办公电话和手机。你无法直接将这些表关联起来。相反,你需要使用一个连接表,其中包含来自各表的主键。连接表中的键组合必须是唯一的。

请注意,连接表可以包含与关联相关的信息;例如,电话号码与客户和电话号码类型相关联。一个客户不能将同一个电话号码列为两种不同的类型。
从关系数据库获取数据的一个优点是,该模型与在 Power BI 中创建的模型非常相似。事实上,如果数据库中已定义了关系,Power BI 导入向导可以检测到这些关系并自动在模型中设置它们。
从关系数据库获取数据的第一步是创建连接。在 Power BI Desktop 的主页选项卡上,有一个外部数据分组(参见图 2-3)。

选择“获取数据”下拉菜单可以连接到一些更常见的数据源,例如 Excel、 SQL Server、分析服务或另一个 Power BI 模型。

如果在下拉菜单中单击“更多”,您可以看到可用于连接的大量数据源(请参见图 2-5)。如果未看到所需的数据源,您可以咨询供应商是否有相应的驱动程序,或是否可以使用通用驱动程序(如 ODBC 或 OLEDB 驱动程序)进行连接。

选择数据源后,系统将显示一个用于输入连接信息的窗口。连接信息取决于您要连接的数据源。对于大多数关系型数据库,所需的信息非常相似。图 2-6 显示了连接到 SQL Server 的连接窗口。您有两种连接数据源的方式:在导入模式下,数据的副本将被加载到模型中;在直接查询模式下,每次筛选或更新报告时,都会向数据源发出查询。目前,我们将使用数据导入模式。我们将在第 15 章讨论直接查询模式。

连接到数据库后,您将看到表和视图的列表(参见图 2-7)。
从您的角度来看,视图和表看起来是相同的。一个视图实际上是数据库中存储的查询,它将查询的复杂性隐藏起来。视图通常用于展示比实际物理模型更简单的概念模型。例如,您可能需要客户的地址。图2-8显示了为获取该信息而需要在查询中包含的表。与其编写复杂的查询来检索信息,不如选择一个视图,该视图会为您合并信息并生成虚拟客户地址表。视图的另一个常见用途是保护底层表中的列。通过使用视图,数据库管理员可以对不同用户隐藏某些列。

选择表和视图后,您可以选择将数据加载到模型中或编辑数据。选择“编辑” 将启动 Power Query 编辑器,在将数据加载到模型之前,您可以在其中清理数据。我们将在第3章中介绍 Power Query。现在,您将直接把数据加载到模型中。选择 “加载”后,系统会再次询问您是要导入数据还是使用直接查询(参见图2-9)。

选择导入模式后,您将看到进度屏幕,因为数据正在加载到模型中(参见图 2-10)。

向导关闭后,您将在 Power BI Desktop 的字段列表窗格中看到列出的表和列。

Note 请记住,Power BI 仅在检索数据时才连接到数据源。一旦数据被检索,连接即关闭,数据将成为模型的一部分。
如果切换到图表视图,您将看到表,如果数据库中已定义了表关系,则您还将看到表之间的关系。在图2-12中,您可以查看在产品表和销售表之间定义的关系。即使数据源中未定义关系,您也可以在模型中创建关系(稍后会详细介绍这一点)。

尽管从表和视图中选择是将数据导入模型的一种简便方法,无需显式编写查询,但并不总是可行。有时您可能需要编写自己的查询;例如,您可能希望合并来自多个不同表的数据,但没有可用的视图。另一个因素是数据源的支持情况。某些数据源不支持视图,可能要求您提供查询来提取数据。在这种情况下,当您进入询问如何检索数据的界面时,请选择高级选项,在其中可以输入 SQL 查询 来检索数据(参见图 2-13)。

输入查询并选择确定后,您将看到数据的预览(见图2-14)。

注意 尽管您可能不会从头开始编写查询,但您可以在此处粘贴为您编写或在其他工具(如Microsoft管理工作室或toaD)中创建的查询。
单击加载将把数据和表导入模型。
现在您已经了解了如何从数据库导入数据,接下来让我们看看如何从文本文件向模型添加数据。

导入数据从文本文件
您可能经常需要从多个不同的源合并数据。其中最常见的数据源之一仍然是文本文件。这可能是从其他系统接收数据输出的结果;例如,您可能需要来自公司企业资源规划 (ERP)系统的信息,而这些信息以文本文件的形式提供。您还可以通过第三方服务获取数据,这些服务以逗号分隔值(CSV)格式提供数据。例如,您可能使用评级服务对客户进行评级,结果以CSV文件返回。
从文本文件将数据导入到模型中与从关系数据库表导入数据类似。首先,您在主页选项卡上选择获取数据的选项。您可以选择从text/csv 文件导入数据(参见图 2-15)。

选择 text/csv 文件后,将显示一个浏览并加载文件的界面。文件加载后,您将看到样本数据以及用于加载文件的分隔符(见图 2-16)。每个文本文件都被视为一个表,文件名将成为模型中表的名称。

另一种常用作数据源的文件类型是Excel文件。从文本文件导入数据与从Excel 文件导入数据的主要区别在于,Excel文件可以包含多个表。默认情况下,每个工作表被视为一个表(参见图2-17)。选择表后,您可以像对文本文件一样预览数据。

除了从文本文件导入数据外,您可能还需要使用从数据源导入的数据来补充您的数据模型。这是一种与业务伙伴交换数据的非常常见的方式,接下来您将了解如何操作。
从数据源导入数据
尽管文本文件是交换数据最流行的方式之一,但数据源正成为越来越普遍的数据交换方式。数据源通过 Web 服务提供数据,要连接到 Web 服务,您需要输入 Web 服务的网址(参见图 2-18)。

由于数据源不仅包含数据,还包含元数据(对数据的描述),一旦建立连接,其效果类似于连接到关系数据库,如图 2-19 所示。

对于许多企业而言,另一个常见的数据源是联机分析处理(OLAP)数据库。诸如 SQL Server 分析服务(SSAS)之类的 OLAP 数据库经过优化,可用来分析和聚合大量数据。Power BI 可以轻松连接到分析服务,从而允许您基于这些数据构建报告。
从分析服务导入数据
许多公司已投入大量资金和精力来创建企业报告解决方案,该方案由一个 SQL Server 分析服务 (SSAS) 存储库组成,用于支持各种仪表板和记分卡。使用 Power BI,您可以轻松集成这些存储库中的数据。在主页选项卡的获取数据下拉菜单中(如图 2-14所示),选择分析服务连接。这将启动连接信息窗口,如图 2-20所示。输入服务器名称和数据库名称。

连接到数据库后,您可以选择年份和月份等属性以及销售额和利润额等度量值来创建表(参见图2-21)。

现在,您已经了解了如何将数据从各种数据源导入 Power BI 数据模型,接下来是时候亲自动手实践导入数据了。
注意 以下实验使用 Access 数据库。如果这是您首次在计算机上连接 Access 数据库,您可能需要安装 Access 2013 运行时( https://www.microsoft.com/en-us/download/details.aspx?id=39358)。
动手实验:将数据加载到 Power Pivot 中
在接下来的实验中,您将
- 从 Access 数据库导入数据
- 从文本文件导入数据
1. 打开 Power BI Desktop 并创建一个名为 Chapter2Lab1.pbix 的新文件。
2. 在主页选项卡的获取外部数据分组中,单击获取数据下拉菜单(参见图 2-22)。在下拉菜单中,选择更多。

- 在获取数据窗口中,选择Access数据库,然后单击连接按钮(参见图2-23)。

- 浏览 LabstarterFiles\ Chapter2Lab1 中的 northwind.acdb 数据库文件,然后单击打开。
- 在导航器窗口中,您将看到表和视图的列表。选择客户、订单和员工表。在窗口底部,单击加载按钮(参见图 2-24)。

- 要导入的最终表包含在制表符分隔的文本文件中。在主页选项卡的外部数据部分,单击获取数据下拉菜单。在数据源列表中,选择文本/ CSV。
- 浏览并打开 LabstarterFiles\Chapter2Lab1 文件夹中的 productList.txt 文件。您应该会看到数据的预览(见图 2-25)。将数据加载到模型中。

- 两个源加载完成后,在 Power BI Desktop 中选择数据选项卡并浏览数据。验证所有表是否均已导入(参见图 2-26)。

- 完成后,保存文件并关闭 Power BI Desktop。
总结
创建 Power BI 模型的第一步是导入数据。在本章中,您学习了如何从各种数据源导入数据。Power BI 导入数据的一个优点是,无论从哪种数据源导入数据,操作体验都相似。您可以创建连接、预览数据,然后将其导入模型。这种方法适用于导入那些已由信息技术部门维护的中央存储库中清洗和转换过的数据。然而,如今数据越来越多地来自各种结构化和非结构化源。这些源的数据通常需要经过清理和转换后才能变得有用,并可导入到模型中。在下一章节中,您将了解 Power Query,这是一个功能强大的工具,提供易于使用的界面,用于在将数据导入您的 Power BI 模型之前进行发现、清洗和转换数据。
第3章:使用 Power Query 进行数据处理
尽管你可以直接将数据导入 Power BI 模型,但在将其加载到模型之前,通常需要对其进行清洗和整理(通常称为 数据处理)。这正是 Power Query 大放异彩之处,也是你商业智能工具库中非常有用的组成部分。Power Query 提供了一个易于使用的界面,用于发现和转换数据。它包含用于清洗和整理数据的工具,例如删除重复项、替换值和分组数据。此外,它支持大量结构化和非结构化数据源,例如关系型数据库、网页和 Hadoop 等。在数据被提取并转换后,你可以轻松地将其加载到 Power BI 模型中。
完成本章后,您将能够
- 从各种源发现并导入数据
- 清洗数据
- 合并、整理和筛选数据
- 分组和聚合数据
- 插入计算列
发现和导入数据
传统上,如果你需要从各种不同的数据源中合并和转换数据,则需要依赖 IT 部门使用诸如 SQL Server 集成服务 (SSIS) 之类的工具为你准备数据。这通常是一个漫长而繁琐的过程,包括数据探索、数据清理以及将数据规范化为关系结构。
尽管需要这种正式的方式来为企业的运营数据存储加载和规范数据,但在许多情况下,您可能只是希望以快速、直观且灵活的方式从各种源向 Power BI 模型添加数据。为了支持这一需求,您可以使用 Power Query 作为您的自助式商业智能提取、转换和加载(ETL)工具。
要启动 Power Query 编辑器,请在主页选项卡上选择“编辑查询”下拉菜单,然后选择“编辑查询”(参见图 3-1)。

启动查询编辑器后,若要创建新查询,请在主页选项卡上选择“新建源”下拉菜单(参见图3-2)。

下拉菜单显示了一些可用的常见数据源。要查看完整列表,请选择“更多选项” (见图3-3)。

选择数据源后,您需要输入连接信息。数据源连接的类型将决定您需要提供哪些信息才能访问该数据源。例如,SQL数据库连接需要服务器名称和数据库名称(见图 3-4),而CSV文件则需要文件路径。

如果选择具有多个表的数据源,您将看到显示的导航窗格。图 3-5 显示了连接到 SQL数据库 源时显示的导航窗格。

选择表后,将显示查询编辑器,并显示数据样本(参见图3-6)。

连接到数据源后,下一步是在将数据导入数据模型之前对其进行转换、清洗和筛选。
转换、清洗和过滤数据
连接到数据源后,您就可以开始转换和清洗数据了。这是一个重要的步骤,将很大程度上决定数据对您的分析工作的支持程度。您将执行的一些常见转换包括:删除重复项、替换值、删除错误值以及更改数据类型。例如,在图3-7中,航空航班数据已从CSV文件导入。FlightDate列被作为文本类型导入(列名旁的ABC表示文本类型),但您需要在模型中将其设置为日期列。

通常,您需要替换来自源系统的值,以便它们在模型中同步。例如,CSV文件中列为VX的承运人在现有数据中的值为VG。您可以在导入数据时通过选择列,然后在菜单中选择替换值转换来轻松替换这些值。这将启动一个窗口,您可以在其中输入要查找的值以及要替换的内容(参见图3-8)。

从源加载数据时,另一个常见需求是筛选掉不必要的列和行。要删除列,请在主页选项卡上选择“选择列”下拉菜单,然后选择所需的列(参见图3-9)。

可以通过选择列名旁边的下拉菜单并输入筛选条件来筛选出行。筛选的类型取决于数据类型。图 3-10展示了数值数据类型的可用筛选。

在应用数据转换和筛选时,查询编辑器会列出您已应用的步骤。这使您可以组织和跟踪对数据所做的更改。您可以通过在列表中右键单击步骤来重命名、重新排列和删除步骤(参见图 3-11)。

在清洗和转换数据后,您可能需要将来自多个源的数据合并到数据模型中的一个表中,或展开列中包含的数据。
合并数据
有时,在将数据加载到模型中之前,您可能需要合并来自多个表和/或源的数据。例如,如果某个表中的代码链接到另一个包含字段完整值的查找表。一种解决方法是将两个表都导入到您的 Power BI 模型中,并在 Power BI 模型中的表之间创建链接。另一种选择是在导入数据之前先将这些表合并。例如,在前面看到的航班数据中,有一个包含承运商代码的 UniqueCarrier 列。您可以将其与另一个包含承运商代码和承运商名称的 CSV 文件进行合并,以便在报告中使用承运商名称而不是代码。首先,使用查询编辑器为每组数据创建并保存一个查询。对于查找表,您可以通过在查询列表窗口中右键单击查询来取消选中“启用加载”选项(参见图 3-12)。但是,当报告刷新时,您仍然希望该查询能够运行。

接下来,选择主查询,然后单击主页选项卡上的合并查询下拉菜单。这将启动合并窗口(参见图 3-13),在其中选择查找查询以及链接数据的列。

合并查询后,您将看到一个包含表类型的新列(见图 3-14)。

通过展开此列,您可以选择要保留的列(见图 3-15)。

追加数据
除了从查找表合并数据外,您可能还需要从两个不同的源追加数据。例如,假设您拥有按年份分别存储在不同源文件或表中的航班数据,并希望将多个年份的数据合并到同一个表中。在这种情况下,您需要创建两个相似的查询,每个查询使用不同的源。首先,在查询编辑器中打开其中一个查询,然后选择主页选项卡上的追加查询按钮。接着可以选择另一个查询作为要追加的表(参见图3-16)。

拆分数据
有时,源数据会提供需要拆分为多个列的数据。例如,您可能需要拆分城市和州,或名字和姓氏。为此,请在查询编辑器中选择该列,然后在主页选项卡上选择拆分列。您可以按分隔符或字符数拆分列(参见图3-17)。

要将此数据导入数据模型,您需要将数据取消透视以使其呈现表格形式。在查询编辑器中,选择需要取消透视的列(见图 3-19)。

在转换选项卡上,选择逆透视列转换。数据逆透视后,您将从原始列标题获得一个属性列和一个值列(参见图3-20)。在导入数据之前,应重命名这些列并更改数据类型。

在将数据导入模型时,通常不需要明细级别的数据;相反,需要的是更高层次的聚合值,例如产品级别销售额或月销售额。使用 Power Query,您可以在导入数据之前轻松地对数据进行分组和聚合。
分组和聚合数据
在导入原始数据时,分组和聚合数据是您可能会遇到的常见场景。例如,根据您的分析需求,您可能需要按月份或销售区域对数据进行汇总。要在查询编辑器中对数据进行聚合和分组,请选择要分组依据的列,然后在主页选项卡中选择“分组依据”转换。此时将显示“分组依据”窗口(参见图3-21)。

可以按多列分组,并使用标准聚合函数对多列进行聚合。图3-22显示了按出发地和承运人分组并聚合出发延误的平均值和最大值的部分结果。

使用 Power Query 导入数据时,您可能遇到的最后一个需求是插入计算列。这稍微高级一些,因为您需要编写代码,正如您将在下一节中看到的那样。
插入计算列
到目前为止,您一直使用 Power Query 提供的可视化界面来构建和执行查询。然而,在后台,Power Query 编辑器正在创建用于执行查询的脚本。Power Query 脚本使用一种称为 M 的语言编写。正如您所见,即使完全不了解 M 或其工作原理,您也可以充分利用 Power Query 的功能。尽管如此,至少您应该知道它的存在,并且知道在运行查询时实际执行的是它。如果您导航到查询编辑器中的视图选项卡,您会看到一个打开高级编辑器的选项,该编辑器将显示用于构建查询的 M代码(参见图 3-23)。

您可以使用高级编辑器直接用 M 语言编写查询,从而暴露一些在可视化界面工具中不可用的高级数据处理功能。
如果要在查询中插入计算列,需要使用 M 函数。在查询编辑器的添加列选项卡上,可以复制列、插入索引列、合并列以及插入自定义列。当选择添加自定义列选项时,将打开添加自定义列编辑器,在其中插入用于创建列的 M 函数。例如,在图3-24中, 我们正在检查承运人列的姓名中是否包含 Q。

图 3-25 显示了添加自定义列后的查询结果 .

因此,如果你需要在将数据插入 Power Pivot 模型之前使用 Power Query 创建列,则使用 M 代码;如果在将数据导入 Power Pivot 模型之后创建列,则使用 DAX 代码(将在后续章节中介绍)。
现在,您已经了解了 Power Query 的工作原理,接下来是时候通过实践来体验如何使用它导入、清洗和塑造数据了。
动手实验:使用Power Query导入和整理数据
在接下来的实验中,您将
- 创建查询以导入数据
- 筛选和转换数据
- 追加和整理数据
- 分组和聚合数据
1. 在 LabStarterFiles\Chapter3Lab1 文件夹中,创建一个名为 Chapter3Lab1.pbix 的 Power BI Desktop 文件。
2. 在主页选项卡 上,选择“编辑查询”以启动 Power Query 编辑器。
3. 在主页选项卡 上,选择“新建源”下拉菜单并选择“文本/CSV 选项”。导航到 LabStarterFiles\Chapter3Lab1 文件夹中的 Flightperformance _2012_10.csv 文件。单击 确定 将查询加载到编辑器中。加载文件后, 您应该会在查询编辑器窗口中看到航空延误数据,如图 3-26 所示。

- 在查询设置窗格中,将查询重命名为 FlightDelays。
- 在已应用步骤列表中,如果查询编辑器未自动添加一个名为“提升标题”的项目 以将第一行转换为标题,请现在添加它。
- 检查每列的类型,查看查询编辑器是否已将航班日期更新为日期数据类型,以及数字类型列(例如“航班号”)更新为数字数据类型。如果没有,请通过右键单击列标题并从上下文菜单中选择更改类型来立即更正。
- 在主页选项卡上,选择“选择列”。清除所有选中项,然后仅选择承运人、出发地、出发城市名称和起飞延误列。
- 使用起飞延误列,并应用筛选器,使查询仅提取起飞延误大于15分钟的行。选择列标题中的向下箭头,并使用“数字筛选”选项。
- 若要从其他月份提取数据,请对 Flightperformance _2012_11.csv 文件完成步骤 2–8,但这次请将查询命名为 FlightDelays2。
- 在“查询”列表中,右键单击查询航班延误2并取消选中启用加载(参见图 3-27)。

- 在“查询”列表中选择 FlightDelays 查询。
- 在“主页选项卡” 的“合并”部分中,选择“追加查询”选项。将 FlightDelays2 查询追加到 FlightDelays 查询中。
- 请注意,originCityname 同时包含城市和州。要将该列拆分为两列,请选择 originCityname 列,然后在“转换选项卡”上选择“拆分列”。使用逗号作为分隔符,将其拆分为两列。
- 将生成的两列重命名为 originCity 和 originState。
- 右键单击 originCity 列,通过选择“替换值”将 originCity 列中的 west palm Beach/palm Beach 替换为 palm Beach。
- 在“主页选项卡” 上,选择“新建源下拉菜单”,然后选择“文本/CSV”选项。连接到 LabStarterFiles\第3章实验1 文件夹中的 Flightperformance _2012_12.csv 文件。
- 在“查询设置窗格”中,将查询重命名为 DelaySummary。
- 保留 Carrier、origin 和 DepDelay 列,删除其余列。
- 筛选出小于 15 分钟的延误。
- 按出发地和承运人分组,计算平均延误和最大延误(参见图 3-28)。请注意,您需要单击“高级”单选按钮,才能添加多个分组和聚合。

- 在转换选项卡上,使用四舍五入将 aveDelay 向下舍入到最接近的分钟。
- 添加一个名为 Carriers的查询,该查询从 Carriers.csv 文件中获取代码和描述。验证第一行是否已被提升为数据的标题。
- 选择 DelaySummary查询,并在主页选项卡上选择合并查询选项。使用 Carriers查询,将 DelaySummary查询中的承运人列与Carriers查询中的代码列匹配,合并描述列(见图 3-29)。

- 展开承运人列并选择描述字段(见图 3-30)。

- 将承运人列重命名为CarrierCode,将描述列重命名为Carrier。
- 在主页选项卡上选择关闭并应用。
- 验证承运人、延误汇总和航班延误 表是否已添加到Power BI 模型中。
- 保存文件并关闭Power BI Desktop。
总结
Power Query 是一个非常有用的工具,可用于从多种不同类型的源中获取数据。在本章中,您学习了如何使用 Power Query 进行一些数据处理——数据整形、数据清理和数据转换,并通过直观界面完成这些操作,而无需编写代码。Power Query 会为您生成代码,但不会将其隐藏起来。如果您需要修改或增强代码,可以使用高级编辑器视图。尽管本章仅简要介绍了 M 查询语言,我们将在第13章中再次讨论这一主题,并深入探讨。
现在您已经了解了如何获取、清洗和整理数据,下一步就是理解什么是好的模型。在 Power BI 中处理数据时,这一点非常重要。一个好的模型将使 Power BI 运行得非常快速,并让您以新颖而有趣的方式分析数据。而一个糟糕的模型会导致 Power BI 运行非常缓慢,最坏的情况下还会在进行数据分析时产生扭曲的结果。下一章节将指导您完成创建稳健模型的过程,以便在此基础上构建您的分析报告和仪表板。
第4章:创建数据模型
什么是数据模型?
从根本上讲,数据模型由表、列、数据类型和表关系组成。通常,数据表用于存储业务实体的数据;例如,客户数据包含在客户表中,员工数据包含在员工表中。表由列组成,这些列定义了实体的属性。例如,您可能希望存储有关客户的信息,如姓名、地址,
出生日期、家庭规模等。这些属性中的每一个都有一个数据类型,具体取决于该属性所包含的信息——姓名应为字符串数据类型,家庭规模应为整数,出生日期应为日期。表中的每一行都应该是唯一的。以客户表为例;如果同一个客户在多行中出现且具有不同的属性(例如出生日期),那么您将无法确定哪一个是正确的。
在前面的示例中,您会知道其中一行是错误的,因为同一个人不可能有两个不同的出生日期。然而,在很多情况下,您希望跟踪实体属性值的变化。例如,产品的标价可能会随时间而变化。为了跟踪这种变化,您需要添加一个时间戳以使该行唯一。然后,每一行都可以通过产品编号和时间戳来识别,如图4-1所示。

确定模型中的表后,重要的是要识别这些表是否设置得当以实现高效运行。此过程称为规范化模型。规范化是组织数据的过程,旨在使数据查询更加简单和高效。例如,你不应将不相关实体的属性混合在同一张表中——你不希望产品数据和员工数据出现在同一张表中。另一个正确规范化的示例是在一列中不要包含多个属性。例如,与其使用一个客户地址列,不如将其拆分为街道、城市、州和邮政编码。这样你就可 以按州或城市轻松地分析数据。图4-2所示的电子表格展示了一个典型的非规范化表 (此为一个连续的表,为了在页面上可视化而进行了拆分)。如果你发现提供给你的数据未充分规范化,可以使用 Power Query 将数据拆分为多个表,然后在模型中将它们相互关联。

一旦您确认模型中的表已得到充分规范化,下一步就是确定这些表之间的关联方式。例如,您可能需要将客户表、销售表和产品表进行关联,以分析不同年龄段对各类产品的购买情况。实现这些表之间关联的方法是使用键。表中的每一行都需要一个列或多个列的组合作为唯一标识该行的依据,这被称为 主键。主键可能很容易识别,例如由业务系统在录入数据时分配的销售订单号或客户编号。但有时您需要对表进行一些分析才能找到主键,特别是当数据来自外部来源时。例如,您可能会获得包含潜在客户的数据,字段包括姓名、城市、州、邮政编码、出生日期等。您不能仅使用姓名作为主键,因为很可能存在多个同名客户。如果使用姓名和城市的组合,则出现相同主键标识多个客户的可能性会降低。当进一步加入更多列(如邮政编码和出生日期)时,唯一标识客户的准确性会更高。
在模型中转到关联表时,一个表的主键会成为相关表中的外键。例如,要将客户与其销售额关联起来,销售表中需要包含客户键,此时它被视为外键。在提取数据时,键用于获取相关数据。出于性能考虑,最佳的键类型是单列整数。因此,许多数据库表在设计时都使用代理键。该键是在加载记录时分配给记录的一个整数。连接表时使用代理键而非自然键。图4-3展示了一个典型的数据库表,其中同时包含代理键(客户键)和自然键(客户备用键)。

了解数据源中使用的键非常重要。如果能够从源中获取键,情况会更好。当你从关系数据库中提取数据时,这通常不是问题,但如果你正在合并来自不同源的数据,请确保拥有适当的键。
一旦确定了表之间的键,就可以在 Power BI 模型中创建关系了。
创建表关系
在 Power BI 模型中建立表关系时,需要记住一些规则。首先,模型中不能使用复合键。如果您的表使用了复合键,则需要通过将复合列连接在一起创建一个新列,并使用该列作为键。其次,两个表之间只能有一个活动关系路径,但可以有多个非活动关系。第三,关系通常是一对多;换句话说,在客户表(一端)和销售表(多端)之间创建关系是常见且有效的做法。然而,有时您需要创建一个多对多关系。例如,考虑客户和产品,一个客户可以购买多种产品,而同一种产品也可以被多个客户购买。在这种情况下,最佳做法是创建一个连接表来将这些表连接在一起。
要在 Power BI 模型中的两个表之间创建关系,您需要打开 Power BI Desktop 并切换到模型视图。在主页选项卡中,选择管理关系。这将启动管理关系窗口(见图 4-4)。

此窗口显示模型中当前已定义的关系。您可以创建新关系、编辑现有关系以及删除关系。请谨慎选择自动检测按钮;这可能会覆盖现有关系并产生错误结果。
在管理关系窗口中选择新建按钮将启动创建关系窗口(见图4-5)。选择相关表以及每个表中的键列。图4-5显示了在FactInternetSales表和DimProduct表之间创建关系的过程。请注意,每个表中的“ProductKey”列被突出显示以表示该关系。默认情况下,在表之间创建的第一个关系被标记为活动关系。

图 4-6 显示了图表视图中的关系结果。如果将鼠标悬停在关系箭头上,关系的两个键列将被突出显示。 *表示关系的 多端。在 DimProduct表 中的每一行,在 FactInternetSales表 中可以有多个相关行。

您可以在两个表之间创建多个关系,但请记住,只能有一个是活动关系。如果您尝试创建两个活动关系,将会收到如图4-7所示的错误。

有时活动关系并不那么明显。图 4-8 显示了销售表与日历表之间的活动关系,以及销售表与促销表之间的另一个活动关系。此外,促销表与日历表之间还存在一个非活动关系。如果你尝试将此关系设为活动的,则会收到与图 4-7 中所示相同的错误消息。这是因为你可以从日历表到销售表再到促销表追踪出一条活动路径。

您可能会遇到的另一个常见错误是,在尝试在两个表之间创建关系时,至少其中一个表中的键不是唯一的。图4-9显示了航班表和承运商表,这两个表都包含重复的承运商代码。

当您尝试在表之间创建关系时,会看到图 4-10 中所示的警告。

在此示例中,承运商表中的代码列应为唯一值,但结果发现存在重复项。尽管 Power BI 可以将其设置为多对多关系,但这并非我们所期望的结果。要解决此问题,您需要修改承运商表数据的查询,以确保不会获取到重复项。
现在您已经了解了如何在模型中创建表关系,接下来可以探讨使用星型模式的优势了。
创建星型模式
在创建数据模型时,了解该模型的用途非常重要。数据库的两个主要用途是数据捕获和报告/分析数据。问题在于,当你为高效数据捕获创建模型时,会降低其分析数据的效率。为了解决这个问题,许多公司会将数据捕获数据库与报告/分析数据库拆分。幸运的是,在 Power BI 中创建数据模型时,我们只需将其优化用于报告/分析即可。
分析大型数据集时要使用的最佳模型之一是星型模式。 星型模式 由一个位于中心的 和围绕它的 组成,如图 4-11 所示。

事实表包含与业务或流程相关的定量数据。例如,图4-11中的销售表包含了销售的可度量方面,如总成本、销售额和数量。事实表通常包含大量行,并具有记录事件发生时间点的日期或时间组件。维度表则包含有关事件的属性。例如,日期表可以告诉你销售发生的时机,并允许你将数据按月份、季度或年份进行汇总。产品表包含所售产品的属性,你可以按产品线、颜色和品牌查看销售额。经销商表包含参与销售的商店的属性。维度表通常不像事实表那样包含大量的行,但可能包含较多的列。当你提出诸如“哪些自行车在不同年龄段中销售最好?”之类的问题时,度量值(销售额)来自事实表,而分类(年龄和自行车型号)则来自维度表。
星型模式的主要优势在于能够提供快速的查询性能和聚合处理。其缺点是通常需要大量预处理,以将数据从高度规范化的事务系统转移到更为非规范化的报告系统。好消息是,您的企业可能已经有一个报告系统为传统的联机分析处理( OLAP)数据库(如微软Analysis Server或IBM Cognos)提供数据。如果您能够访问这些系统,它们很可能是您核心业务数据的最佳源。
要从源数据系统创建星型模式,您可能需要执行一些数据反规范化操作,这将在下一节中介绍。
理解何时对数据进行反规范化
尽管事务性数据库系统往往具有高度的规范化,但报告系统会反规范化为星型模式。如果您无法访问已为您完成反规范化的报告系统,则在将数据加载到 Power BI 模型时,必须对数据进行反规范化。例如,图 4-12 显示了 AdventureWorks 事务性销售数据库中包含客户数据的表。

为了将客户数据反规范化到您的模型中,您需要创建一个查询,将数据合并到单个客户维度表中。如果您不熟悉创建复杂查询,最简单的方法是让数据库开发人员创建一个视图,您可以从中提取数据,该视图已为您合并了这些表。如果查询不是太复杂,您可以使用 Power Query 自行创建。例如,图 4-13 显示了一个客户表和一个地理表。

您可以使用 Power Query 中的合并函数将这些内容合并到一个客户维度表中。
尽管将数据导入 Power BI 模型时无需成为查询专家,但了解查询数据源的基本知识非常有益,即使这仅有助于在与数据库开发人员沟通时提出正确的问题。
创建用户友好的模型
在创建模型时,需要注意的一点是使模型易于使用且直观。该模型可能会被其他用户用于分析。您可以使用一些属性和设置,以使您的模型更加用户友好。
您可以进行的最有效调整之一是重命名表和列。请使用对业务用户有意义的名称,而不是只有数据库开发人员才能理解的晦涩命名约定。另一个良好的做法是确保正确设置列的数据类型和格式。例如,来自文本文件的字段可能被识别为字符串类型,而实际上它是数值数据。此外,您可以隐藏对用户无用途的字段,例如用于链接表的代理键。
常见的需求是更改列的排序顺序,使其不同于自然排序。最常见的示例是一年中的月份。由于它们默认为文本,因此会按字母顺序排序。但实际上,您希望它们按月份数字排序。为了解决这个问题,您可以根据表中的任何其他列对某一列进行排序(参见图4-14)。这是一个不错的功能,允许您创建与业务相关的自定义排序。

分析数据时另一个有用的功能是使用层次结构。层次结构定义了各种级别的聚合。例如,常见的日历层次结构基于年份、季度和月份级别。像销售额这样的聚合值会从月份汇总到季度,再汇总到年份。另一个常见的层次结构可能是从部门到楼宇再到地区。然后可以将成本在不同级别之间进行汇总。在 Power Pivot 模型中创建层次结构非常简单。在字段列表窗口中,选择您希望作为层次结构顶层的列。右键单击该列并选择新建层次结构(参见图 4-15)。

接下来,在字段列表中,右键单击将作为层次结构下一级的列。选择添加到层次结构,并从列表中选择该层次结构(见图 4-16)。

创建层次结构后,您将在字段列表中看到它,并可以在报告中使用它(参见 图4-17)。

创建层次结构是提高模型可用性并帮助用户在数据分析中直观获取更多价值的一种方法。您还可以使用许多其他技术为各种客户端工具创建良好的模型。我们将在第 9章对此主题进行更详细的讨论。
以下动手实验将帮助您巩固本章所涵盖的主题。
动手实验:在Power Pivot中创建数据模型
在接下来的实验中,您将
- 创建表关系
- 反规范化数据
- 设置层次结构
- 创建用户友好的模型
1. 打开 Power BI Desktop 并创建一个名为 Chapter4lab1.pbix 的新文件。
2. 连接到 labStarterFiles\Chapter4lab1 文件夹中的 adventureworks.accdb 文件。(如果出现错误,请参考此页面进行故障排除。)
3. 连接后,使用“编辑”按钮启动 Power Query。
4. 在 Power Query 窗口中,选择列出的表和字段并导入数据。提示: 您可以使用“最近的源”按钮从同一源文件中提取第二个和第三个表。
源表名称 友好名称 字段(列)
Di mDate
Date DateKey FullDatealternateKey
英文月份名称 年中的月份数 日历季度 日历年
客户维度表 客户 客户键
出生日期
婚姻状况 性别 年收入 子女总数 房主标志 拥有的汽车数量
FactinternetSales 互联网销售 productKey
订单日期键
发货日期键
客户键 销售区域键 销售订单号 销售订单行号 订单数量 单价 总产品成本 销售金额
- 选择“关闭并应用”以将数据加载到模型中。
- 切换到 Power BI Desktop 中的数据视图;根据表中的指示重命名 和/或隐藏列。要重命名或隐藏列,请右键单击该列,然后从上下文菜单中的报表视图中选择重命名或隐藏。(注意:您也可以在 Power Query 中更改列名。)
表 列 友好名称 Hide
Date 日期键 X
完整日期替代键 Date
英文月份名称 月份 年中的月份数 月编号 X
日历季度 季度 日历年 Year
客户 客户键 X
出生日期 出生日期
婚姻状况 婚姻状况 性别 性别 年收入 收入 子女总数 子女 房主标志 房主 汽车数量 Cars
互联网销售 productKey X
订单日期键 X
发货日期键 X
客户键 X
销售区域键 X
销售订单号 订单编号 销售订单行号 订单行编号 订单数量 数量 单价 单价
TotalProductCost 产品成本 销售金额 销售额
- 切换到 Power BI Desktop 中的数据视图。您应该会看到日期、客户和互联网销售表。客户表和互联网销售表之间已定义了关系。这是Power BI根据列名和数据类型推断得出的。
- 将日期表中的日期键拖动到互联网销售表的订单日期键上。同样, 在日期键和发货日期键之间创建一个关系。双击此第二个关系以启动 编辑关系窗口(参见图4-18)。尝试将其设置为活动关系。您应该会收到一个错误,因为在模型中两个表之间只能有一个活动关系。查看错误后,单击“取消”。

- 现在是时候向我们的数据集中添加一些产品信息了。在主页选项卡上,选择最近的源,然后选择 AdventureWorks 数据库(见图 4-19)。

- 在导航器窗口中,选择 DimProduct、DimproductCategory 和 DimproductSubcategory 表,然后单击编辑按钮(参见图 4-20)。

- 使用 Power Query 设计器,从 DimProduct 查询中选择 ProductKey、 productalternateKey、ProductSubcategoryKey、WeightUnitMeasureCode、 SizeUnitMeasureCode、englishproductname、listprice、Size、Sizerange、 Weight 和 color 列。将查询的名称更改为 Product。
- 使用左外连接将 DimproductSubcategory 合并到 Product查询 中(参见图 4-21)。首先选择产品查询,然后单击工具栏上的“合并查询”。

- 展开结果列,并选择英文产品子类别名称和产品类别键列。取消选中使用原始列名作为前缀复选框(参见图 4-22)。

- 重复前面的步骤,将 DimproductCategory 查询中的 englishproductCategoryname 合并到 Product查询中。
- 现在查询已合并,您可以从Product查询中删除 productSubcategoryKey 和 productCategoryKey 列。
表 列 友好名称
产品 ProductKey
产品替代键 产品代码 重量单位代码 重量单位代码 尺寸单位代码 尺寸单位代码
英文产品名称 产品名称 标价 标价
Size
尺寸范围 尺寸范围 重量
颜色
英文产品类别名称 类别 英文产品子类别名称 子类别
- 在“查询”列表中,右键单击 DimproductCategory 查询并取消选中“启用加载”(参见图 4-23)。

- 对 DimproductSubcategory 查询重复执行步骤 16。
- 选择“关闭并应用”。
- 将产品数据加载到 Power BI 模型后,在报表视图中隐藏 ProductKey 列。
- 使用 ProductKey 在互联网销售和产品表之间创建关系(Power BI 可能已经自动添加此关系)。您的最终图表应如图 4-24所示。

- 要创建层次结构,请切换回数据视图,并在产品表中选择类别列。右键单击该列,然后选择新建层次结构(参见图 4-25)。

- 右键单击子类别字段,然后选择“添加到层次结构”,以将子类别字段添加到层次结构中。
- 在日期表中创建名为Calendar的日历层次结构,使用年份、季度和月份。
- 选择日期表中的月份列,并将其“排序依据列”设置为月份编号列。请记住,“排序依据列” 按钮位于“模型”选项卡中。
- 完成后,保存并关闭 Power BI Desktop。
总结
在使用 Power BI 时,了解什么是良好的模型非常重要。一个好的模型可以让 Power BI 运行得非常快速,并让您轻松分析大量数据。本章指导您完成创建一个坚实模型的过程,该模型将成为您数据分析的基础。此外,您还了解了如何向客户端工具呈现用户友好的模型。
现在,您已经为模型打下了坚实的基础,接下来可以使用自定义计算来扩展模型。下一章将介绍数据分析表达式 (DAX) 语言,并讲解如何在数据模型中创建计算列。其中包含大量示例,帮助您在模型中创建常见的计算。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)