根据 SQL(以及 Looker)中的一般规则,您无法按聚合函数的结果(在 Looker 中表示为测量)对查询进行分组。您只能按未汇总的字段(在 Looker 中表示为维度)进行分组。 如果您尝试在 Looker 中汇总某个指标,则会看到以下错误:
Measures with Looker aggregations (sum, average, min, max, list types) may not reference other measures.
如果您需要一种方法来将衡量指标(COUNT、SUM、AVG、MAX 等)更改为维度,以便按该维度进行分组以进行汇总(例如对 COUNT 求和或对 SUM 求平均值),按该维度进行过滤(在 WHERE 子句中,而不是在 HAVING 子句中),或在探索中对该维度进行数据透视,该怎么办?
使用派生表对衡量指标进行维度化
在 Looker 内部,此解决方案称为对衡量指标进行维度化处理。这是因为您将某个测量值重新定义为 维度。为此,您需要创建一个派生表,并在其 SQL 定义中添加要对其进行维度化处理的测量。
流程
以下示例基于电子商务数据集示例。本示例的目标是根据现有的总收入 type: sum
衡量标准创建 type: average
衡量标准。
以下步骤概述了如何生成基于 SQL 的派生表。您可以选择创建基于 LookML 的派生表(也称为原生派生表 [NDT]),作为 SQL 的替代方案。
-
首先,设置探索查询。
选择相应的字段,包括您要对其进行维度化处理的指标。
在示例用例中,“探索数据”表格会按“用户状态”和“用户 ID”对总收入进行分组:
-
从数据表中的 SQL 标签页中选择 Open in SQL Runner,以在 SQL Runner 中打开查询:
-
在 SQL Runner 中运行查询(点击 Run 按钮)并确认结果后,从 SQL Runner 齿轮菜单中选择 Add to Project 选项,以打开 Add to Project 弹出式窗口。此时,您需要移除派生表 SQL 中的所有行数限制子句,以确保查询中包含所有所需结果。
您还可以从菜单中选择获取派生表 LookML,以手动将生成的 LookML 复制并粘贴到您的项目中。
- 在添加到项目弹出式窗口中,从项目下拉菜单中选择一个项目名称,为派生表视图文件输入一个名称,然后选择添加。
-
现在,派生表位于视图文件中,您可以创建一个汇总维度化测量的测量值。例如,您现在可以为新的总收入维度
order_items_total_revenue
创建type: average
测量:dimension: order_items_total_revenue { type: number sql: ${TABLE}.order_items.total_revenue ;; value_format_name: usd } measure: average_revenue { type: average sql: ${order_items_total_revenue} ;; value_format_name: usd }
- 仔细检查派生表中是否定义了主键。
- 将新视图联接到原始探索(或创建新的探索),以便使用新字段创建查询和内容。
总结
使用 Looker 派生表对测量进行维度化可解锁新功能,并让您能够利用数据获得更多数据洞见。借助按 维度化衡量标准分组、在 WHERE 子句(而非 HAVING 子句)中按该维度标准过滤、按该维度标准进行数据透视,以及根据该维度标准创建其他维度等功能,您可以将探索查询和内容带入下一个维度。
如需详细了解如何创建和使用派生表,以及相关注意事项和性能优化提示,请访问派生表文档页面。