教程:从维度模型变为 Power BI Desktop 中的出色报表

适用范围:Power BI Desktop Power BI 服务

跟随本教程,你可以从维度模型入手,在 45 分钟内从头到尾生成精美的报表。

你在 AdventureWorks 工作,而你的经理想要查看有关最新销售数据的报表。 经理要求提供关于以下内容的执行摘要:

  • 2019 年 2 月哪一天的销售额最高?
  • 公司在哪个国家/地区取得了最大的成功?
  • 公司应继续投资于哪些产品类别和经销商业务类型?

借助我们的 AdventureWorks Sales 示例 Excel 工作簿,我们可以立即生成此报表。 下面是最终报表的外观。

已完成的 AdventureWorks 报表的屏幕截图。

想要查看成品? 你还可以下载完整的 Power BI .pbix 文件

注意

如果更愿意使用 SQL 数据库中的数据,AdventureWorks 示例数据库文章提供了指向 GitHub 存储库中可下载的 AdventureWorks SQL 示例数据库的链接。 如果确实使用 SQL 数据库,则必须修改本教程中的各个步骤。

让我们开始吧!

在本教程中,将了解如何:

  • 使用少量转换来准备数据
  • 生成包含标题、三个视觉对象和切片器的报表
  • 将报表发布到 Power BI 服务,以便与同事共享

先决条件

获取数据:下载示例

  1. 下载 AdventureWorks Sales 示例 Excel 工作簿

  2. 打开 Power BI Desktop。

  3. 在“主页”功能区的“数据”部分,选择“Excel”

  4. 导航到保存示例工作簿的位置,然后选择“打开”。

准备数据

在“导航器”窗格中,可选择转换或加载数据。 导航器提供数据预览,以便你可以验证数据范围是否正确。 数值数据类型显示为斜体。 在本教程中,我们将在加载前转换数据。

选择所有表,然后选择“转换数据”。 确保不要选择工作表(标有 _data)。

在导航器中加载表的屏幕截图。

检查列的数据类型是否与下表中的数据类型匹配。 若要让 Power BI 检测数据类型,请选择一个查询,然后选择一个或多个列。 在“转换”选项卡上,选择“检测数据类型”。 若要对检测到的数据类型进行任何更改,请在“主页”选项卡上,选择“数据类型”,然后从列表中选择适当的数据类型 。

检查列的数据类型的屏幕截图。

查询 数据类型
Customer CustomerKey 整数
Date DateKey 整数
Date Date
MonthKey 整数
Product ProductKey 整数
Standard Cost 十进制数
List Price 十进制数
Reseller ResellerKey 整数
Sales SalesOrderLineKey 整数
ResellerKey 整数
CustomerKey 整数
ProductKey 整数
OrderDateKey 整数
DueDateKey 整数
ShipDateKey 整数
SalesTerritoryKey 整数
Order Quantity 整数
Unit Price 十进制数
Extended Amount 十进制数
Unit Price Discount Pct 百分比
Product Standard Cost 十进制数
Total Product Cost 十进制数
Sales Amount 十进制数
SalesTerritory SalesTerritoryKey 整数
SalesOrder SalesOrderLineKey 整数

返回“开始”选项卡,选择“关闭并应用”

Power Query 的“关闭并应用”按钮的屏幕截图。

为你的数据建模

加载的数据基本已经可用于报表。 让我们检查数据模型并进行一些更改。

选择左侧的模型视图。

在 Power BI Desktop 中选择“模型视图”的屏幕截图。

数据模型应如下图所示,每个表都在一个方框中。

用于开始的数据模型的屏幕截图。

创建关系

此模型是你可能会在数据仓库中看到的典型星型架构:它像一颗星星。 星星的中心是事实数据表。 周围的表称为维度表,它们通过关系与事实数据表关联。 事实数据表包含有关销售事务的数字信息,例如销售额和产品标准成本。 维度提供上下文,因此可以进行以下分析:

  • 销售了哪个产品...
  • 销售给哪个客户...
  • 由哪个经销商销售...
  • 在哪个销售区域销售。

如果仔细观察,你会发现除 Date 表外,所有维度表都通过某种关系与事实数据关联。 现在,让我们向 Date 添加一些关系。 将 DateKey 从 Date 表拖放到 Sales 表上的 OrderDateKey。 你已创建从 Date 到 Sales 的所谓“一对多”关系,由线条两端的 1 和星号 *(多)表示。

该关系为“一对多”关系是因为给定日期有一个或多个销售订单。 如果每个日期只有一个销售订单,则该关系将为“一对一”关系。 线条中间的小箭头表示“交叉筛选方向”。它指示可以使用 Date 表中的值来筛选 Sales 表,因此,该关系允许分析销售订单的下单日期。

Sales 和 Date 表之间的关系的屏幕截图。

Sales 表包含有关与销售订单相关的日期的详细信息,例如截止日期和发货日期。 让我们通过拖动将另外两个关系添加到 Date 表:

  • DateKey 到 DueDateKey
  • DateKey 到 ShipDateKey

Sales 和 Date 表之间的三种关系的屏幕截图。

你会注意到,OrderDateKey 上的第一个关系处于活动状态,由实线表示。 其他两个关系处于非活动状态,由虚线表示。 默认情况下,Power BI 使用活动关系来关联 Sales 和 Date。 因此,SalesAmount 的总和按订单日期(而不是截止日期或发货日期)计算。 你可以影响此行为。 请参阅本教程稍后部分的加分做法:使用 DAX 编写度量值

隐藏键列

典型的星型架构包含多个保存事实数据和维度之间的关系的键。 通常情况下,我们不会在报表中使用键列。 让我们在视图中隐藏键列,以使字段列表显示的字段更少,且数据模型更易于使用。

浏览所有表并隐藏名称以 Key 结尾的所有列:

选择列旁边的眼睛图标,然后选择“在报表视图中隐藏”。

带眼睛图标的可见列的屏幕截图。

还可以在“属性”窗格中选择列旁边的眼睛图标。

隐藏字段具有此图标,即眼睛上有一条线穿过。

带隐藏眼睛图标的字段的屏幕截图。

隐藏这些字段。

Customer CustomerKey
Date DateKey
MonthKey
Product ProductKey
Reseller ResellerKey
Sales CustomerKey
DueDateKey
OrderDateKey
ProductKey
ResellerKey
SalesOrderLineKey
SalesTerritoryKey
ShipDateKey
SalesOrder SalesOrderLineKey
SalesTerritory SalesTerritoryKey

你的数据模型现在应类似此数据模型,其中 Sales 和所有其他表之间的关系以及所有键字段都已隐藏:

具有隐藏键列的数据模型的屏幕截图。

创建层次结构

现在,由于隐藏的列,我们的数据模型变得更易于使用,接下来我们可以添加一些层次结构让模型更加易于使用。 通过层次结构,可以更轻松地浏览分组。 例如,市在州或省中,而州或省在国家或地区中。

创建以下层次结构。

  1. 右键单击层次结构中最高级别或最小粒度的字段,然后选择“创建层次结构”。

  2. 在“属性”窗格中,设置层次结构的“名称”并设置级别。

  3. 然后“应用级别更改”。

    层次结构“属性”窗格的屏幕截图。

添加后,还可以在“属性”窗格中重命名层次结构的级别。 你需要在 Date 表中重命名 Fiscal 层次结构的 Year 和 Quarter 级别。

以下是需要创建的层次结构。

层次结构名称 级别
Customer Geography Country-Region
State-Province
City
Postal Code
Customer
Date Fiscal Year (Fiscal Year)
Quarter (Fiscal Quarter)
Month
Date
Product Products Category
Subcategory
Model
Product
Reseller Geography Country-Region
State-Province
City
Postal Code
Reseller
SalesOrder Sales Orders Sales Order
Sales Order Line
SalesTerritory Sales Territories Group
Country-Region
Region

你的数据模型现在应类似以下数据模型。 它具有相同的表,但每个维度表都包含一个层次结构:

具有带层次结构的维度表的数据模型的屏幕截图。

重命名表

若要完成建模,请在“属性”窗格中重命名以下表:

旧表名称 新表名称
SalesTerritory Sales Territory
SalesOrder Sales Order

此步骤是必需的,因为 Excel 表名称不能包含空格。

现在,最终数据模型已准备就绪。

具有重命名表的完整数据模型的屏幕截图。

加分做法:使用 DAX 编写度量值

对于数据建模而言,使用 DAX 公式语言编写度量值的功能非常强大。 Power BI 文档中有很多关于 DAX 的知识。 现在,让我们编写一个基本度量值,其按销售订单上的截止日期(而不是默认订购日期)来计算总销售额。 此度量值使用 USERELATIONSHIP 函数在度量值上下文中激活 Sales 和 Date on DueDate 之间的关系。 然后,它使用 CALCULATE 在该上下文中计算销售额的总和。

  1. 选择左侧的“表格”视图。

    左侧“选择表”视图的屏幕截图。

  2. 在“字段”列表中选择 Sales 表。

    在“字段”列表中选择 Sales 表的屏幕截图。

  3. 在“主页”功能区中选择“新建度量值” 。

  4. 选择或键入此度量值,以按销售订单上的截止日期(而不是默认订购日期)来计算总销售额:

    Sales Amount by Due Date = CALCULATE(SUM(Sales[Sales Amount]), USERELATIONSHIP(Sales[DueDateKey],'Date'[DateKey]))
    
  5. 选中复选标记以提交。

    选择复选标记以提交 DAX 度量值的屏幕截图。

生成报表

现在,你已对数据建模,接下来可以创建报表。 转到报表视图。 在右侧的“字段”窗格中,可以看到创建的数据模型中的字段。

让我们为视觉对象逐一生成最终报表。

已完成的报表的屏幕截图,每个视觉对象均标有数字。

视觉对象 1:添加标题

  1. 在“插入”功能区中选择“文本框”。 键入“Executive Summary - Sales Report”。

  2. 选择键入的文本。 将字号设置为“20”并“加粗”。

    设置 Executive Summary 文本的格式的屏幕截图。

  3. 在“格式文本框”窗格的“效果”下,将“背景”切换为“关”。

  4. 调整框的大小,使其显示在一行内。

视觉对象 2:按日期列出的销售额

接下来,你将创建一个折线图,以查看哪个月份和年份的销售额最高。

  1. 在“字段”窗格中,将“Sales Amount”字段从“Sales”表拖到报表画布上的空白区域。 默认情况下,Power BI 显示带有一列(即“Sales Amount”)的柱形图。

  2. 将“Month”字段从“Date”表中的“Fiscal”层次结构拖放到柱形图。

    创建每年对应一列的柱形图的屏幕截图。

  3. 在“可视化效果”窗格的“字段”部分的 X 轴框中,删除“Fiscal Year”和“Fiscal Quarter”字段:

    在“可视化效果”窗格的“字段”部分,删除“Year”和“Quarter”字段的屏幕截图。

  4. 在“可视化效果”窗格中,将可视化类型更改为“分区图”。

    将柱形图更改为分区图的屏幕截图。

  5. 如果在上文的加分做法中添加了 DAX 度量值,也将其添加到“Y 轴”中。

  6. 打开“格式”窗格,展开“线条”部分,然后在“颜色”中,将“Sales Amount by Due Date”更改为更具对比度的颜色,例如红色。

    Sales Amount by Due Date 分区图的屏幕截图。

    如你所见,Sales Amount by Due Date 略落后于 Sales Amount。 这证明它使用了使用 DueDateKey 的 Sales 和 Date 表之间的关系。

视觉对象 3:按经销商国家/地区列出的订单数量

现在,我们将创建一个地图,以查看经销商在哪个国家或地区拥有最高订购数量金额。

  1. 在“字段”窗格中,将“Country-Region”字段从“Reseller”表拖到报表画布上的空白区域。 Power BI 创建地图。

  2. 从“Sales”表将“Order Quantity”字段拖放到地图上。 确保“Country-Region”在“Location”井中,“Order Quantity”在“Bubble size”井中。

    按国家/地区列出的订单数量地图的屏幕截图。

视觉对象 4:按产品类别和经销商业务类型列出的销售额

接下来,我们将创建一个柱形图,以调查哪些产品由哪些经销商业务类型销售。

  1. 将你创建的两个图表并排拖动到画布的上半部分。 在画布的左侧保留一些空间。

  2. 在报表画布的下半部分选择一个空白区域。

  3. 在“字段”窗格中,从“Sales”中选择“Sales Amount”,从“Product”中选择“Product Category”,并从“Reseller”中选择“Business Type”。 检查“类别”和“业务类型”是否在行中,以及“销售额”是否选择为“值”的屏幕截图。

    Power BI 会自动创建簇状柱形图。 将可视化效果更改为“矩阵”:

    将簇状柱形图更改为矩阵的屏幕截图。

  4. 将“列”中的“Business Type”字段拖到“行”中的“Category”下。

  5. 在矩阵仍处于选中状态的情况下,在“筛选器”窗格中的“Business Type”下“全选”,然后取消选中“[不适用]”框。

    筛选出不适用的业务类型的屏幕截图。

  6. 拖动矩阵,使其足够宽以填充上方两个图表下方的空间。

    加宽矩阵以填充报表的屏幕截图。

  7. 在矩阵的“格式”窗格中,搜索“条件”。 在“单元格元素”部分中,打开“数据栏”。 选择“fx”选项,然后为正数据栏设置较浅的颜色。 选择“确定”。

  8. 增加“Sales Amount”列的宽度,通过拖动矩阵使其填充整个区域。

    带 Sales Amount 数据条的矩阵的屏幕截图。

自行车的总销售额似乎较高,增值经销商的销售额最高,其次是仓库。 对于“组件”,仓库的销售额超过增值经销商。

视觉对象 5:会记日历切片器

切片器是一种有价值的工具,可用于将报表页面上的视觉对象筛选为特定的一部分。 在本例中,我们可以创建一个切片器来缩小显示范围,仅显示每月、每季度和每年的业绩。

  1. 在“字段”窗格中,从“Date”表中选择“Fiscal”层次结构,并将其拖到画布左侧的空白区域。

  2. 在“可视化效果”窗格中,选择“切片器”。

    添加 Sales 报表日历切片器的屏幕截图。

  3. 在“可视化效果”窗格的“字段”部分,删除“Quarter”和“Date”,只留下“Year”和“Month”。

    从 Fiscal 切片器中删除 Quarter 和 Date 的屏幕截图。

现在,如果经理要求仅查看特定月份的数据,则可以使用切片器在年份或每年的特定月份之间进行切换。

加分做法:设置报表格式

如果要对此报表进行少量格式设置以进行润色,请执行以下几个简单步骤。

主题

  • 在“视图”功能区中,选择“主题”,然后将主题更改为“Executive” 。

    选择“执行”主题的屏幕截图。

修饰视觉对象

在“可视化效果”窗格的“格式”选项卡上进行以下更改。

“可视化效果”窗格中“格式”选项卡的屏幕截图。

提示

若要快速查找要更改的设置,可在“格式”窗格的“搜索”框中键入该设置。

视觉对象 2,按日期列出的销售额

  1. 选择“视觉对象 2,按日期列出的销售额”。

  2. 在“标题”部分,如果未添加 DAX 度量值,则将“文本”更改为“按订单日期列出的销售额”。

    如果已添加 DAX 度量值,则将“文本”更改为“按订单日期/截止日期列出的销售额”。

    请确保获取视觉对象本身的“标题”部分,因为轴和图例也可以有标题。

    “格式”窗格的“标题”部分的屏幕截图。

  3. 将“文本大小”设置为“16 磅” 。

  4. 在“常规”选项卡上,将“阴影”切换为“开”。

视觉对象 3,按经销商国家/地区列出的订单数量

  1. 选择“视觉对象 3,按经销商国家/地区列出的订单数量”。
  2. 在“地图设置”部分,将“样式”更改为“灰度”。
  3. 在“常规”选项卡上的“标题”部分,将“文本”更改为“按经销商国家/地区列出的订单数量”。
  4. 将“文本大小”设置为“16 pt”
  5. 同样在“常规”选项卡上,将“阴影”切换为“开”。

视觉对象 4:按产品类别和经销商业务类型列出的销售额

  1. 选择“视觉对象 4,按产品类别和经销商业务类型列出的销售额”。
  2. 在“常规”选项卡上的“标题”部分,将“文本”更改为“按产品类别和经销商业务类型列出的销售额”。
  3. 将“文本大小”设置为“16 pt”
  4. 同样在“常规”选项卡上,将“阴影”切换为“开”。

视觉对象 5,会计日历切片器

  1. 选择“视觉对象 5,会计日历切片器”。
  2. 在“切片器设置”部分的“选择”下,将“显示‘全选’”选项切换为“开”。
  3. 在“切片器标头”部分,将“文本大小”设置为“16 pt”。

为标题添加背景形状

  1. 在“插入”功能区中,选择“形状”“矩形”。>

  2. 将其放在页面顶部,然后将其拉伸为页面的宽度和标题的高度。

  3. 在“样式”窗格的“边框”部分,将“透明度”更改为“100%”。

  4. 在“填充”部分,将“填充颜色”更改为“主题颜色 5 #6B91C9”(蓝色)。

  5. 在“格式”功能区上,选择“下移一层”“置于底层”。

    “格式”功能区和“置于底层”菜单选项的屏幕截图。

  6. 选择视觉对象 1 中标题的文本,然后将“字体颜色”更改为“白色” 。

完成的报表

在切片器中选择“FY2019”。

最终完成的报表的屏幕截图。

总的来说,此报表回答了你经理提出的主要问题:

  • 2019 年 2 月哪一天的销售额最高? 2 月 25 日,销售额为 253,915.47 美元。

  • 公司在哪个国家/地区取得了最大的成功? 在美国,订单数量为 132,748。

  • 公司应继续投资于哪些产品类别和经销商业务类型? 公司应继续投资于 Bikes 类别以及 Value Added Reseller 和 Warehouse 经销商业务。

保存报表

  • 在“文件”菜单上,选择“保存”。

发布到 Power BI 服务以便共享

若要与经理和同事共享你的报表,请将其发布到 Power BI 服务。 当你与拥有 Power BI 帐户的同事共享时,他们可以与你的报表进行交互,但是无法保存更改。

  1. 在 Power BI Desktop 的“主页”功能区,选择“发布”。

  2. 你可能需要登录 Power BI 服务。 如果还没有帐户,请注册免费试用版

  3. 在 Power BI 服务中选择一个目标(例如“我的工作区”),然后选中“选择”。>

  4. 选择“在 Power BI 中打开‘你的文件名’”。 已完成的报表将在浏览器中打开。

  5. 选择报表顶部的“共享”,将报表与他人共享。

更多问题? 尝试参与 Power BI 社区