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

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

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

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

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

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

Screenshot of Finished AdventureWorks report.

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

备注

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

让我们开始吧!

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

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

先决条件

获取数据:下载示例

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

  2. 打开 Power BI Desktop。

  3. 在“开始”功能区的“数据”部分,选择“Excel” 。

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

准备数据

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

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

Screenshot of Load tables in Navigator.

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

Screenshot of Check the data types of the columns.

查询 数据类型
客户 CustomerKey 整数
Date DateKey 整数
Date Date
MonthKey 整数
产品 ProductKey 整数
标准成本 十进制数
标价 十进制数
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 整数
订单 SalesOrderLineKey 整数

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

Screenshot of Power Query Close and Apply button.

为你的数据建模

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

选择左侧的模型视图。

Screenshot of Select Model view in Power BI Desktop.

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

Screenshot of The data model to start with.

创建关系

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

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

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

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

Screenshot of Relationship between the Sales and Date table.

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

  • DateKey 到 DueDateKey
  • DateKey 到 ShipDateKey

Screenshot of Three relationships between Sales and Date tables.

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

隐藏键列

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

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

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

Screenshot of Visible column with Eye icon.

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

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

Screenshot of Field with the hidden Eye icon.

隐藏这些字段。

客户 CustomerKey
Date DateKey
MonthKey
产品 ProductKey
Reseller ResellerKey
Sales CustomerKey
DueDateKey
OrderDateKey
ProductKey
ResellerKey
SalesOrderLineKey
SalesTerritoryKey
ShipDateKey
订单 SalesOrderLineKey
SalesTerritory SalesTerritoryKey

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

Screenshot of Data model with hidden key columns.

创建层次结构

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

创建以下层次结构。

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

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

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

    Screenshot of Hierarchy Properties pane.

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

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

层次结构名称 级别
客户 地理位置 国家/地区
State-Province
城市
邮政编码
客户
日期 Fiscal Year (Fiscal Year)
Quarter (Fiscal Quarter)
月份
日期
Product 产品 类别
Subcategory
建模
Product
Reseller 地理位置 国家/地区
State-Province
城市
邮政编码
Reseller
订单 Sales Orders 销售订单
销售订单行
SalesTerritory Sales Territories Group
Country-Region
区域

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

Screenshot of Data model with dimension tables with hierarchies.

重命名表

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

旧表名称 新表名称
SalesTerritory 销售区域
订单 销售订单

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

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

Screenshot of Completed data model with renamed tables.

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

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

  1. 选择左侧的数据视图。

    Screenshot of Select Data view on the left.

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

    Screenshot of Select the Sales table in the Fields list.

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

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

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

    Screenshot of Select the check mark to commit the DAX measure.

生成报表

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

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

Screenshot of Finished report, with numbers marking each visual.

视觉对象 1:添加标题

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

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

    Screenshot of Format the Executive Summary text.

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

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

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

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

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

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

    Screenshot of Create a column chart with a column for each year.

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

    Screenshot of In the Fields section of the Visualizations pane, remove the Year and Quarter fields.

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

    Screenshot of Change the column chart to an area chart.

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

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

    Screenshot of Sales Amount by Due Date as area chart.

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

视觉对象 3:Order Quantity by Reseller Country-Region

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

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

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

    Screenshot of Map of order quantity by country/region.

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

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

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

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

  3. 在“字段”窗格中,从“Sales”中选择“Sales Amount”,从“Product”中选择“Product Category”,并从“Reseller”中选择“Business Type”。 Screenshot of Check that Category and Business Type are on Rows and Sales Amount is selected as Values.

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

    Screenshot of Change the clustered column chart to a matrix.

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

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

    Screenshot of Filter out Not Applicable business type.

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

    Screenshot of Widen the matrix to fill the report.

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

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

    Screenshot of Matrix with data bars for Sales Amount.

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

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

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

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

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

    Screenshot of Add a report sales calendar slicer.

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

    Screenshot of Remove Quarter and Date from the Fiscal slicer.

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

加分做法:设置报表格式

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

主题

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

    Screenshot of Choose the Executive theme.

修饰视觉对象

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

Screenshot of the Format tab in the Visualizations pane.

提示

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

视觉对象 2,Sales Amount by Order Date

  1. 选择“视觉对象 2,Sales Amount by Order Date”。

  2. 在“标题”部分,如果未添加 DAX 度量值,则将“文本”更改为“Sales Amount by Order Date”。

    如果已添加 DAX 度量值,则将“文本”更改为“Sales Amount by Order Date/Due Date”。

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

    Screenshot of Title section of the Format pane.

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

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

视觉对象 3,Order Quantity by Reseller Country-Region

  1. 选择“视觉对象 3,Order Quantity by Reseller Country-Region”。
  2. 在“地图设置”部分,将“样式”更改为“灰度”。
  3. 在“常规”选项卡上的“标题”部分,将“文本”更改为“Order Quantity by Reseller Country-Region”。
  4. 将“文本大小”设置为“16 磅” 。
  5. 同样在“常规”选项卡上,将“阴影”切换为“开”。

视觉对象 4,Sales Amount by Product Category and Reseller Business Type

  1. 选择“视觉对象 4,Sales Amount by Product Category and Reseller Business Type”。
  2. 在“常规”选项卡上的“标题”部分,将“文本”更改为“Sales Amount by Product Category and Reseller Business Type”。
  3. 将“文本大小”设置为“16 磅” 。
  4. 同样在“常规”选项卡上,将“阴影”切换为“开”。

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

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

为标题添加背景形状

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

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

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

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

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

    Screenshot of the Format ribbon, Send to back menu option.

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

完成的报表

在切片器中选择“FY2019”。

Screenshot of Your final completed report.

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

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

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

  • 公司应继续投资于哪些产品类别和经销商业务类型? 公司应继续投资于 Bikes 类别以及 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 社区