Looker 中的探索由 Looker 开发者设计,旨在利用数据字段与表之间的指定关系,以最有效的方式合并数据库表中的数据。因此,建议使用单个探索来检查您的数据。
但有时,Looker 开发者并未创建您需要的关系,或者他们遇到了一些技术限制。在这种情况下,借助合并结果,您可以合并不同探索(即使来自不同模型或项目)的结果,以创建数据表,然后探索这些数据并创建可视化图表。您可以将合并结果用作概念验证,以进一步开发和定义 LookML 项目和模型。
了解合并结果
合并查询时,先基于单个探索创建单个查询,然后再将其他查询与第一个查询合并。
第一个查询默认为主查询。这是非常重要的概念,因为当 Looker 匹配数据以创建合并结果时,它会将每个添加的查询与主查询(而不是与添加的其他查询)相匹配。因此,无论何时添加查询,都需要在查询中包含一个可以与主查询中的某个维度相匹配的维度。
例如,请考虑以下查询。
主查询返回以下结果:
| 产品类别 | 商品数量 |
|---|---|
| 有效 | 5 |
| 牛仔裤 | 9 |
| 正装 | 3 |
辅助查询返回以下结果:
| 产品类别 | 商品目录中的商品数量 |
|---|---|
| 有效 | 11 |
| 牛仔裤 | 16 |
| 正装 | 6 |
如果您按商品类别字段合并这些查询,Looker 会生成以下合并结果:
| 产品类别 | 商品数量 | 商品目录中的商品数量 |
|---|---|---|
| 有效 | 5 | 11 |
| 牛仔裤 | 9 | 16 |
| 正装 | 3 | 6 |
合并结果不会执行实际的 SQL 联接。不过,对于熟悉 SQL 联接的用户,合并结果功能会以类似于左联接的方式合并多个探索的结果。添加的查询的结果会与主查询的结果合并,就像它们被左联接到主查询中一样。
您无需熟悉左联接的概念,即可了解合并结果的运作方式。从实际角度来看,以下是主查询的重要性:
- 字段名称的显示方式:对于匹配的字段,合并结果中会使用主查询的字段名称,如上例所示。
合并结果如何处理没有匹配值的查询:下一部分如果某个查询没有匹配的数据值,会怎么样?讨论了当只有部分查询在匹配维度中具有特定值时,Looker 如何处理数据合并。
您还可以参阅为什么我的次级合并结果查询中存在 null 值?“最佳实践”页面,了解有关缺失或 null 合并结果值的更多问题排查提示。
合并结果如何处理具有多个匹配值的查询:本页后面的如果一个查询针对同一值有多行结果,该怎么办?部分讨论了当某些查询在匹配的维度中具有多个具有特定值(或值组合)的行时,Looker 如何处理合并数据。
如果某个查询没有匹配的数据值,该怎么办?
主要查询之所以重要,还有另一个原因,那就是匹配的维度中处理 null 值的方式:
如果某行存在于主查询中,但不存在于附加查询中,则该行的附加查询字段将为 NULL。
如果某行存在于添加的查询中,但不存在于主查询中,则该行将不会显示在结果中。
为了说明这些示例,请参考以下示例查询。
主查询返回以下结果:
| 产品类别 | 产品部门 | 商品数量 |
|---|---|---|
| 有效 | 儿童 | 522 |
| 有效 | 成人 | 545 |
| 连衣裙 | 成人 | 878 |
| 正装 | 成人 | 349 |
辅助查询返回以下结果:
| 产品类别 | 商品品牌名称 | 商品目录中的商品数量 |
|---|---|---|
| 有效 | 品牌 1 | 223 |
| 连衣裙 | 品牌 2 | 80 |
| 连衣裙 | 品牌 3 | 3 |
| 牛仔裤 | 品牌 3 | 8 |
| 牛仔裤 | 品牌 2 | 19 |
如果您按商品类别字段合并这些查询,Looker 会生成以下合并结果:
| 产品类别 | 产品部门 | 商品品牌名称 | 商品数量 | 商品目录中的商品数量 |
|---|---|---|---|---|
| 有效 | 成人 | 品牌 1 | 545 | 223 |
| 有效 | 儿童 | 品牌 1 | 522 | 223 |
| 连衣裙 | 成人 | 品牌 2 | 878 | 80 |
| 连衣裙 | 成人 | 品牌 3 | 878 | 3 |
| 正装 | 成人 | ∅ | 349 | ∅ |
主查询包含正装对应的行,因此合并后的结果将显示此行。添加的查询没有 Formalwear 行,因此添加的查询中的任何字段对于 Formalwear 都会显示 NULL (∅)。
添加的查询包含两行 Jeans,但主查询不包含。因此,此行不会显示在合并后的结果中。
在此示例中,如果您切换主查询,使添加的查询成为新的主查询,Looker 会生成以下合并结果:
| 产品类别 | 商品品牌名称 | 产品部门 | 商品目录中的商品数量 | 商品数量 |
|---|---|---|---|---|
| 有效 | 品牌 1 | 成人 | 223 | 545 |
| 有效 | 品牌 1 | 儿童 | 223 | 522 |
| 连衣裙 | 品牌 2 | 成人 | 80 | 878 |
| 连衣裙 | 品牌 3 | 成人 | 3 | 878 |
| 牛仔裤 | 品牌 2 | ∅ | 19 | ∅ |
| 牛仔裤 | 品牌 3 | ∅ | 8 | ∅ |
Looker 不再显示正装行,因为这些行在新的主查询中不存在。不过,Looker 现在会显示 Jeans 行,这些行对于仅在添加到主查询中的查询中存在的维度和度量会显示 NULL。
您还可以参阅为什么我的次级合并结果查询中存在 null 值?“最佳实践”页面,了解有关缺失或 null 合并结果值的更多问题排查提示。
如果一个查询针对同一值返回了多行,该怎么办?
最后,指定所需的主查询也很重要,因为系统会以特定方式处理具有匹配值的多行。如果添加的查询包含两行或更多行与主查询中的某行具有相同的值,则主查询中的相应行将重复显示相应次数。
在以下示例中,添加的查询包含 Dresses 的两行。在合并后的结果中,主查询中的连衣裙值会显示两次,一次对应于添加的查询中的每个连衣裙行。
主查询返回以下结果:
| 产品类别 | 产品部门 | 商品数量 |
|---|---|---|
| 有效 | 儿童 | 522 |
| 有效 | 成人 | 545 |
| 连衣裙 | 成人 | 878 |
| 正装 | 成人 | 349 |
辅助查询返回以下结果:
| 产品类别 | 商品品牌名称 | 商品目录中的商品数量 |
|---|---|---|
| 有效 | 品牌 1 | 223 |
| 连衣裙 | 品牌 2 | 80 |
| 连衣裙 | 品牌 3 | 3 |
| 牛仔裤 | 品牌 3 | 8 |
| 牛仔裤 | 品牌 2 | 19 |
合并结果查询(按“商品类别”字段合并)返回以下结果:
| 产品类别 | 产品部门 | 商品品牌名称 | 商品数量 | 商品目录中的商品数量 |
|---|---|---|---|---|
| 有效 | 成人 | 品牌 1 | 545 | 223 |
| 有效 | 儿童 | 品牌 1 | 522 | 223 |
| 连衣裙 | 成人 | 品牌 2 | 878 | 80 |
| 连衣裙 | 成人 | 品牌 3 | 878 | 3 |
| 正装 | 成人 | ∅ | 349 | ∅ |
请注意,如果您在此示例中切换主要查询,您仍然会有两个连衣裙行,因为新指定的主要查询有两行连衣裙。总而言之,合并查询时,结果的行数可能会多于主查询的行数,但绝不会少于主查询的行数。
数据库内合并查询
默认情况下,合并查询会在 Looker 内存中处理,因此每个查询最多只能联接 5,000 行。如果 Looker 管理员已启用 In-database merge queries Looker Labs 功能,则在同一 BigQuery 连接上的两个查询之间的联接将在 BigQuery 数据库本身中执行。在数据库中执行联接的性能更高,并且可以联接的行数不受限制。
此外,当您为合并结果创建每个探索查询时,Looker 界面会包含一个行数限制字段。Looker 会以不同的方式使用行数限制字段,具体取决于合并结果查询的处理方式:
- 对于在 Looker 内存中计算的合并查询,Looker 会检索每个查询在行数限制字段中指定的行数,并将这些数据联接起来以创建合并结果。
- 对于数据库内合并查询,Looker 会忽略每个源查询的行数限制值,并联接每个源查询的完整数据集。
如果 Looker 能够为合并查询执行数据库内联接,则合并结果对话框会显示一条横幅,指示查询正在数据库中运行,并且 Looker 正在从每个源查询中省略行数限制。
然后,在数据库内合并查询的结果表中,Looker 会显示合并结果字段,而不是行数限制字段。合并结果字段限制的是结果表格中显示的行数,而不是处理的行数,因为数据库内合并结果查询对可处理的行数没有限制。
合并查询
如需合并多个查询的结果,请按以下步骤操作:
- 创建第一个源查询,称为主查询。
- 添加下一个源查询。
- 查看这些查询的合并规则并运行合并。
您也可以:
- 对结果进行排序、透视和可视化处理。
- 使用网址重复使用和分享结果。
- 通过修改或添加来源查询来修改结果。
创建主查询
如需合并多个查询的结果,请先按以下步骤准备主查询:
- 从探索菜单中选择一个探索。
从字段选择器中选择感兴趣的维度和度量。在此步骤中,请勿透视任何维度。
您只需执行这些操作即可开始合并结果。不过,您也可以使用一些高级探索技巧来进一步优化查询。您可以:
(可选)为数据添加过滤条件。
(可选)添加表计算以创建临时指标。
(可选)点击运行,查看主查询的结果,并测试过滤条件和表格计算。
添加下一个源查询
创建好主探索后,请按以下步骤添加另一个源查询:
- 在探索中,点击齿轮图标。
- 选择合并结果。这会打开选择探索窗口。
在选择探索窗口中,点击您要创建下一个查询的探索的名称。
Looker 会在修改查询窗口中打开探索,您可以在其中构建要合并到主查询中的新查询。
为了合并查询,Looker 会在查询中查找值能匹配的维度。请确保您的查询中至少包含一个常见维度,且该维度的值完全匹配。例如,如果两个查询都有日期维度,但一个查询使用“2017-10-01”作为值,另一个查询使用“2017 年 10 月”作为值,Looker 便无法使用此维度合并查询。
从字段选择器中选择感兴趣的维度和度量。请务必至少包含一个能够与主查询中的某个维度精确匹配的维度。在此步骤中,请勿透视任何维度。
(可选)添加过滤条件以缩小数据范围。
(可选)纳入表格计算,以根据查询字段创建新字段。
(可选)点击运行,查看源查询的结果,并测试过滤条件和表格计算。
点击保存,将查询合并到主查询中。
查看合并规则并运行合并
Looker 会自动查找用于匹配查询的最佳维度,并将这些匹配项显示在合并规则部分中。Looker 会显示每个合并将使用哪些字段。
查看 Looker 匹配查询时所采用的维度。(如需了解如何更改这些规则,请参阅修改合并规则。)
点击运行,查看合并查询结果。
请注意,来自源查询的所有表格计算在合并结果中都会显示为标准维度。
使用和修改合并结果
您可以使用合并后的结果来:
- 检查和排序数据,包括深入分析数据。不过,如果您深入分析用于合并这两个探索的维度,Looker 将仅显示来自主探索的下钻字段。
- 查看总计。Looker 会计算每个组成查询的总数,并在合并后的结果中使用这些总数。因此,总数可能会显得过高,因为您看到的是在合并结果之前计算的总数。避免这种情况的一种方法是使每个查询的过滤条件保持一致。
- 创建可视化图表。
- 在合并结果中透视维度:从数据表维度列的齿轮菜单中选择透视。请注意,您无法在源查询中透视维度。
如需重复使用合并结果,您可以:
- 使用浏览器网址分享结果。
- 在浏览器中为该网址添加书签,以便日后再次运行相同的合并查询。您无法将合并结果另存为 Look。
- 将合并结果保存为信息中心内的图块(请参阅将合并结果保存到信息中心)。
如果您想修改合并结果,可以执行以下操作:
- 点击添加查询按钮,然后按照相同的步骤操作,即可合并来自其他探索的查询。
- 修改来源查询或配置查询的合并方式。如需了解详情,请参阅修改合并后的结果。
- 通过在源查询中添加过滤条件来创建过滤条件,无论是在创建和合并查询时,还是通过合并结果页面修改查询时,都可以添加过滤条件。请注意,您无法直接向合并后的结果添加过滤条件。
如果您想清除缓存并从数据库中检索最新结果,请从合并结果窗口右上角的齿轮菜单中选择清除缓存并刷新选项。
如需下载合并结果查询,您可以将查询保存到信息中心,然后将信息中心下载为 PDF 或一组 CSV 文件。
修改合并结果
获得合并结果后,您可以对合并结果进行以下更改:
修改来源查询
在合并结果窗口中,您可以点击左侧窗格中的查询名称,或从查询的齿轮菜单中选择修改,以返回并修改源查询。这些选项会将您带回修改查询界面。
您可以添加或移除字段、添加表格计算,或更改源查询的过滤条件。点击保存即可返回到合并结果。
查询的齿轮菜单还包含以下选项:
- 重命名:指定要在合并结果窗口中显示的查询的其他名称。
- 设为主查询:将相应查询设为合并结果的基础。如需了解主查询的作用,请参阅了解合并后的结果。
- 删除:从合并结果中移除相应查询。(如果您想在删除查询后将其重新添加到合并结果中,可以使用浏览器中的返回按钮。)
修改合并规则
添加查询后,Looker 会自动查找可用于将添加的查询与主查询相匹配的维度。每个添加的查询都必须至少包含一个维度,该维度的值与主查询中的某个维度完全匹配。Looker 会在合并规则部分中显示这些匹配项,并指明将使用哪些字段来合并查询。
您可以使用“合并规则”部分更改或添加 Looker 用于合并查询的字段。
- 使用下拉菜单查看其他可用于匹配数据的维度选项。
- 如果有其他可用于匹配的维度,Looker 会显示 + 添加维度。点击 + 添加维度,以配置要在查询合并中使用的另一组维度。
- 如果您不想匹配这两个维度之间的数据,请点击 X。
切换主查询
合并查询时,先基于单个探索创建单个查询,然后再将其他查询与第一个查询合并。默认情况下,第一个查询被视为主查询,但您也可以通过从查询的齿轮菜单中选择设为主查询,将任何查询指定为主查询。
每个添加的查询都必须至少包含一个维度,且该维度的值可以与主查询中的某个维度完全匹配。
切换主查询后,合并结果可能会发生变化。如需了解主查询的作用,请参阅了解合并后的结果。
将合并结果保存到信息中心
将合并结果查询添加到信息中心后,您可以向合并结果图块添加或应用信息中心过滤条件、重新排列图块、修改图块,或向信息中心添加新图块。您无法下载基于合并结果的图块中的数据,但可以将信息中心下载为 PDF 或下载为一组 CSV 文件。
如果合并查询以任何方式发生更改,应用于合并结果图块的所有信息中心过滤条件都将关闭。您可以在过滤条件配置窗口中重新启用过滤条件。
在嵌入式 Look、信息中心和探索中合并查询
如果您拥有相应权限,则可以在嵌入式 Look、信息中心和探索中合并查询。如需将嵌入式 Look 的查询与其他查询合并,请执行以下操作:
- 将鼠标悬停在 Look 的标题上,以显示 Look 的齿轮菜单,然后点击该齿轮菜单。
- 选择合并结果,然后按照合并查询的步骤操作。
如需合并嵌入式信息中心图块的查询,请执行以下操作:
- 将鼠标悬停在信息中心板块上,查看信息中心板块的下拉菜单。
- 从下拉菜单中选择从此处探索。Looker 会打开相应图块查询的探索。
- 点击“探索”的齿轮菜单,然后选择合并结果。
- 按照合并查询的步骤操作。
备注
- 所有主查询的字段都会显示在合并结果中,并使用主查询的字段名称。这意味着,如果主查询和添加的查询对匹配的维度使用不同的名称,则结果中只会显示主查询的维度名称。
您的合并结果查询可能存在行数限制:
- 默认情况下,合并结果查询的联接会在 Looker 内存中处理,因此每个要合并的查询最多只能联接 5,000 行。如果您联接的查询返回 5,000 行以上的数据,则合并结果中将只纳入返回的前 5,000 行数据。
- 如果 Looker 管理员已启用 In-database merge queries Looker Labs 功能,并且您要合并两个使用同一 BigQuery 连接的查询的结果,则这两个查询之间的联接将在 BigQuery 数据库本身中执行。数据库内合并查询的性能更高,并且可以联接无限数量的行。如需了解详情,请参阅数据库内合并查询部分。
对于在 Looker 内存中处理的合并查询,合并结果是一项查询后处理功能,如果使用不当,可能会过度占用 Looker 实例资源,导致 Looker 实例对所有用户的响应速度变慢。如果您无法利用数据库内合并查询,最佳实践是在 LookML 中定义函数和逻辑,LookML 会生成由数据库处理的 SQL。如需详细了解如何优化 Looker 性能,请参阅优化 Looker 性能最佳实践页面。
总结
您应尽可能使用单个探索中的数据,因为 Looker 开发者已仔细考虑过如何合并不同数据库表中的数据。不过,在需要时,合并结果是一种强大的技术,可让您合并来自多个探索和数据库的数据。