数据透视表
了解如何在 Metabase 中使用不同的数据库创建数据透视表。
什么是数据透视表? 数据透视表是以表格方式汇总和分组数据的方法。它们是分析师工具包中的宝贵工具,因为它们是呈现和重新排列大量信息的有效方法。以下是它们的工作原理
在 Metabase 中创建数据透视表时不受支持的数据库
数据透视表目前在 Metabase 中不适用于以下数据库
- Druid
- MongoDB
数据透视表适用于所有其他官方支持的数据库。
数据透视表 vs. 常规表格
您的典型基本表格是单元格网格。每列代表单个记录的属性,每行一个记录。
数据透视表是一个对行和列进行分组的表格,并包含带有这些分组的汇总值的汇总行。这些汇总值通常称为小计和总计,尽管这些汇总值也可能是其他值,例如平均值。
它们之所以被称为数据透视表,是因为您可以将列旋转(“透视”)90 度,以便该列中的值本身成为列标题。当尝试跨多个属性(如时间、位置和类别)分析数据时,将值透视到列标题中非常有用。您可以将多个行透视到列,反之亦然,或者根本不透视。
但这一切都相当抽象,所以让我们通过一个示例向您介绍数据透视表的工作原理。
如何创建数据透视表:示例
首先,假设我们想知道
- 订单每年带来多少收入
- 每个州(即,我们的客户住在哪里?)
- 以及这些订单如何按产品类别细分
这是我们使用查询构建器的查询
在这里,我们从 Orders
表中获取数据并汇总记录。我们按 User → State
、Created At
(按年)和 Product → Category
对订单进行分组。对于每个组(例如 2017 年的阿拉斯加),我们计算订单数量并将这些订单的小计相加。(请注意,即使我们仅在数据部分选择了 Orders
表,Metabase 也会自动连接 Products
和 People
表以获取州和类别数据。)
生成的表格是常规表格,每行包含州、年份和产品类别的组合。
现在,假设对于每个州,我们还想知道每个州年度小计的总和(例如,在所有年份中,Doohickey 产品的订单在阿拉斯加赚了多少钱?)。为了找出答案,我们可以自己将小计加起来,或者使用数据透视表为我们计算该数字。在屏幕左下方,单击可视化 > 数据透视表。
在我们的数据透视表中,Metabase 已将行、列和值设置为如下
- 行:
User → State
和Created At
(按年) - 列:
Product → Category
- 值:
Count
和Sum of Subtotal
与平面表一样,数据透视表让我们看到,例如,2020 年我们在阿拉斯加 (AK) 的客户总共购买了 11 件 Doohickey 产品,价值 867.63 美元。但是现在数据透视表已将与阿拉斯加相关的行分组,并给出了这些阿拉斯加行的小计,从而使我们能够看到问题的答案:阿拉斯加人在 2016 年至 2020 年间购买了 103 件 Doohickey 产品,总计 6,900.43 美元。
除了组小计之外,数据透视表还包括行和列的总计
- 行总计示例:所有州/省份的 Doohickey 订单总数。
- 列总计示例:阿拉斯加所有产品类别中所有小计的总和。
我们可以通过折叠和展开行组来导航表格
现在,让我们尝试透视表格。在屏幕左下方,我们将单击设置。要透视表格,我们将在三个存储桶(行、列和值)之间移动字段。
单个存储桶内的顺序很重要,因此让我们首先通过在单个存储桶(行存储桶)内重新排列表格来开始。如果我们切换用于表格行的字段顺序,将 Created At
放在 User → State
之上,表格将重新排列自身
现在,表格首先按年份分组,然后给出每个州/省份在每个产品类别中的订单细分。
我们还可以在存储桶之间切换字段,例如将 Product → Category
从列移动到行,并将 User → State
从行移动到列。
您还可以为给定的行分组关闭小计
与平面表一样,我们有一些排序和格式化选项,我们可以单击表格中的值以调出钻取菜单,这将使我们能够钻取数据。
如何创建数据透视表:限制
数据透视表仅适用于支持连接和表达式的关系数据库,因此您将无法将它们与 MongoDB 等数据库一起使用。它们也仅适用于使用查询构建器编写的问题。此处的解决方法是,如果您必须使用 SQL 来编写问题,您可以保存该问题,然后将其结果用作查询构建器问题的起点,以便构建问题。这里的技巧是在 GUI 问题中完成聚合和分组。也就是说,使用 SQL 问题来获取您想要处理的原始数据(可能创建模型),然后启动新的 GUI 问题来过滤、汇总和分组该数据。
例如,要使用 SQL 问题来构建我们上面创建的数据透视表,您首先需要编写一个 SQL 查询来获取您想要处理的原始数据
SELECT people.state,
products.category,
orders.subtotal,
orders.created_at
FROM orders
INNER JOIN products
ON orders.product_id = products.id
INNER JOIN people
ON orders.user_id = people.id
请注意,我们只是在这里抓取记录;没有汇总或分组。接下来,我们保存该 SQL 问题(此处为 Raw data for pivot table
),并启动一个新的查询构建器问题,该问题使用该问题的结果作为其起始数据。
现在我们可以计数、求和以及分组我们的结果
当我们可视化这个问题时,我们现在将能够使用数据透视表可视化来查看组小计和总计。
进一步阅读
下一步:漏斗图
使用漏斗图显示步骤的进展。