在数据洞察中应用高级混合技术,以优化查询性能并解决复杂的分析用例。这些准则可帮助您有效管理行数、配置表评估顺序以及过滤多来源数据集。
混合数据应仅包含可用数据的一部分
最佳做法是,仅添加您希望在基于混合数据的图表中直观呈现的特定字段。其重要性体现在:
- 混合可能会创建非常大的数据集,这可能会导致性能下降,并可能增加 BigQuery 等付费服务的查询费用。
- 基于混合的图表会计算混合中的所有行,即使这些行未在图表中使用也是如此。
- 例如,假设您创建了一个包含 10 个字段的混合。然后,您定义一个仅使用其中一个字段的图表。数据洞察会计算 10 字段混合,然后查询混合输出中的该字段以创建图表。
- 只有当混合数据包含底层数据的子集时,才会进行重新汇总。
使用混合功能重新汇总指标
您从底层数据源中添加的指标在混合数据源中会变为未汇总的数字。如果混合数据包含的字段少于底层数据源中的完整字段集,则系统会根据新数据重新汇总这些数字。如果您需要对已汇总的字段应用不同的汇总方式(例如计算平均值的平均值),则可以采用这种方式使用混合。
如需了解详情,请参阅使用混合功能重新汇总数据。
基于单个数据源创建混合
混合数据不一定要使用不同的数据源。您可能还会发现,通过混合来自同一数据源的多个表格来重新汇总数据也很有用。
例如,假设您有一个数据集,其中包含美国人口最多的几个州中人口最多的三个县的人口数据,如下表所示:
| 州/省/自治区/直辖市 |
郡/县 |
人口(2023 年估算值) |
|---|---|---|
| 加利福尼亚州 |
洛杉矶县 |
10,014,009 |
| 加利福尼亚州 |
圣迭戈县 |
3,298,634 |
| 加利福尼亚州 |
奥兰治县 |
3,186,989 |
| 得克萨斯州 |
哈里斯县 |
4,731,145 |
| 得克萨斯州 |
达拉斯县 |
2,613,539 |
| 得克萨斯州 |
塔兰特县 |
2,110,640 |
| 纽约 |
金斯县(布鲁克林) |
2,736,074 |
| 纽约 |
皇后县 |
2,405,464 |
| 纽约 |
布朗克斯县 |
1,418,890 |
假设您想计算每个县的人口占全州总人口的百分比。为此,您需要将州的总人口作为一个单独的字段。虽然原始数据集中没有该指标,但您可以通过将人口数据源与自身混合来计算该指标:
- 使用基础数据集创建数据源。
- 向报告中添加一个使用该数据源的图表。
- 创建包含两个表的混合。将两个表格都设置为使用您在第 1 步中创建的数据源。
- 在表 1 中,添加州、县和人口,并将人口重命名为 CountyPopulation。
- 在表 2 中,仅包含 Population 字段,并将其重命名为 StatePopulation。
- 对于联接条件,选择左外联接,并将表 1 中的州与表 2 中的州关联。
- 点击保存。
- 点击 X 返回报告编辑器。

接下来,向报告中添加一个新的表格图表,并选择新混合数据作为其数据源:
- 将 State、County、CountyPopulation 和 StatePopulation 字段添加到图表中。
- 如需计算每个县的人口占全州人口的百分比,请向图表中添加一个计算字段,该字段使用新的重新汇总数据:
- 在属性面板中,点击添加指标,然后点击添加字段。
- 为该字段命名(例如 Percent of State Population)。
- 在公式框中,输入
(CountyPopulation / StatePopulation)*100。 - (可选)设置显示格式,以显示特定级别的百分比值(例如,百分比 (2) 表示两位小数)。

完成后,您的表格应如下所示:
| 州/省/自治区/直辖市 |
郡/县 |
CountyPopulation |
StatePopulation |
州人口百分比 |
|---|---|---|---|---|
| 加利福尼亚州 |
洛杉矶县 |
10014009 |
16499632 |
60.69 |
| 得克萨斯州 |
哈里斯县 |
4731145 |
9455324 |
50.04 |
| 加利福尼亚州 |
圣迭戈县 |
3298634 |
16499632 |
19.99 |
| 加利福尼亚州 |
奥兰治县 |
3186989 |
16499632 |
19.32 |
| 纽约 |
金斯县(布鲁克林) |
2736074 |
6560428 |
41.71 |
| 得克萨斯州 |
达拉斯县 |
2613539 |
9455324 |
27.64 |
| 纽约 |
皇后县 |
2405464 |
6560428 |
36.67 |
| 得克萨斯州 |
塔兰特县 |
2110640 |
9455324 |
22.32 |
| 纽约 |
布朗克斯县 |
1418890 |
6560428 |
21.63 |
混合中的表格顺序
数据洞察会按照从左到右的顺序评估合并配置。每次合并的结果都会输入到右侧的下一次合并中。例如,在三表混合中,数据洞察会先合并表 1(最左侧)和表 2(中间),然后将合并结果与表 3(最右侧)合并。
自动创建的混合数据源中的表顺序
当您混合所选图表时,数据洞察会为每个图表创建一个表格,并使用图表的字段填充该表格。表格的顺序与您选择图表的顺序一致:例如,您选择的第一个图表会成为第一个(最左侧)表格,而第二个图表会成为第二个表格。
数据洞察还会使用左外联接运算符在每个表之间自动创建合并配置。
如果默认配置不符合您的需求,您可以修改合并条件和运算符,以实现您的目标。
在混合之前创建表
系统会先查询混合数据源中每个表的数据,然后再将这些数据合并到最终的混合数据源中。在执行任何合并之前,系统会将表格中的日期范围、过滤条件和计算字段应用于生成该表格的查询。这些因素可能会影响混合表中包含的数据,并改变混合输出。
混合数据包含的行数可能少于 SQL 联接
在将数据合并到最终混合数据源之前,系统会根据您在表中添加的维度,对混合数据源中每个表的数据进行分组和汇总。如果您选择的维度不包含每条记录的唯一标识符,则在合并表格之前,系统会在这个预分组阶段收起相同的行。这种合并可能会导致行数低于直接对相同数据运行 SQL 联接查询时可能获得的行数,因为 SQL 联接会在聚合之前独立评估行。
为防止行过早收起,并确保在数据洞察中混合数据时生成的行数与 SQL 联接生成的行数相似,请在混合编辑器中为每个表的维度列表添加唯一标识符字段(例如主键或唯一行 ID)。此 ID 字段无需在图表中显示;将其包含在混合配置中可确保在预聚合步骤中将每条记录视为一个单独的行。
混合数据包含的行数可能多于原始数据
您在混合图表中看到的数据可能比在基于构成混合图表的各个数据源的图表中看到的数据更多。结果可能取决于您的数据以及为混合选择的合并配置。例如,左外联接会包含左侧表中的所有记录,以及右侧表中在联接条件中具有相同值的所有记录。如果联接条件有多个匹配项,则混合数据中显示的行数可能会多于最左侧数据源中的行数。
联接可能会使行数成倍增加(例如,当某个条件与多个表中的多行匹配时,或者使用交叉联接时),而并集则严格按照行数相加。由于并集操作会垂直附加行,因此最终混合后的行数绝不会超过源表中的行数总和(如果移除了重复行,则会更少)。因此,并集可以避免与复杂联接相关的指数级行数增加风险和相关的查询性能损失。
混合数据源以及明确的日期范围和过滤条件
您可以通过两种方式限制混合数据中的行数:使用日期范围或应用过滤条件。您可以限制基于混合数据的图表中的行数,也可以限制构成混合数据的表格中的行数。不妨将该过程视为“混合前”或“混合后”。
如果您对混合数据中的某个表格应用日期范围或过滤条件,则该日期范围或过滤条件会在该表格的数据与混合数据中的其他表格合并之前生效。日期范围之外或被过滤条件排除的行不适用于合并查询。
如果您对基于混合数据的图表应用日期范围或过滤条件,则会将该日期范围或过滤条件应用于创建混合数据后的数据(“混合后”)。
这种差异可能会对您在图表中看到的结果产生重大影响,具体取决于您的数据以及您配置混合的方式。
混合和继承的过滤条件
只要过滤条件与混合前或混合后的数据兼容,混合数据就会沿用报告、页面或组级过滤条件。如果过滤条件与混合数据使用的底层数据源兼容,则过滤条件会作用于混合前的数据。否则,过滤条件会作用于混合后的数据。如果过滤器与混合前或混合后的数据不兼容,系统会忽略该过滤器。
详细了解过滤条件继承。
当基于混合数据的图表受继承的过滤条件约束时,数据洞察会分五个步骤处理数据:
(预混合):
- 第 1 步:系统会根据混合数据面板中指定的维度对数据进行分组和汇总。
- 第 2 步:继承的维度过滤条件和兼容的指标过滤条件会应用于混合数据面板中包含的数据源。
(混合):
- 第 3 步:使用指定的合并配置混合数据。
(混合后):
- 第 4 步:根据图表中的维度对数据进行分组和汇总。
- 第 5 步:如果指标过滤条件与混合数据兼容,则会应用于图表。