探索中的总计功能通过对不同的基础数据求总和来实现。这意味着,如果您仅查看“探索”数据表格或可视化图表中的可见数据,总计可能会返回与您预期不同的值。请继续阅读,详细了解如何计算所需总金额以及相关解决方案。
总计值可能较低的原因
为了计算总数,Looker 会生成一个 SQL 查询,该查询会从 SELECT 和 GROUP BY 语句中省略在探索中选择的任何未透视的维度,然后再针对数据库运行该查询。
例如,假设您想统计在一段时间内购买了特定类别商品的不同用户数。您可以创建按产品类别分组的用户数探索查询:
用于创建此表的 SQL 如下所示:
SELECT products.category AS 'products.category', COUNT(DISTINCT users.id ) AS 'users.count'
启用总计选项后,用户总数为 12,290。
请注意,如果您手动添加“用户数”列中的值,得到的数字会远高于 Looker 报告的总数。由于每位用户都可以购买多个类别的产品,因此当您自行将每行的用户数相加时,某些用户会被多次添加。不过,Looker 会使用 SQL 查询来计算不同用户的数量,从而避免重复统计。
Looker 用于计算总数的 SQL 如下所示:
SELECT COUNT(DISTINCT users.id ) AS 'users.count'
请注意,Looker 使用 users.count 度量来计算总数,并在 SQL 查询的 SELECT 和 GROUP BY 语句中省略了未透视的维度 products.category。
任何过滤条件和联接也将包含在总计查询中,这样一来,即使查询发生变化,总计也会保持一致。
由于透视前的维度已从总计查询中省略,因此依赖于查询中是否存在维度的 Liquid 变量(例如 _in_query 和 _is_selected)在 Looker 运行以计算总计的 SQL 查询中会评估为 false。
为什么总计值可能偏高或为 null
Looker 总数可能与您通过将行值相加得到的总数不同。具体而言,在以下情况下,您的总数可能会偏高,甚至显示为 null:
-
当查询按衡量指标过滤时:
Looker 会在将衡量指标过滤器的
HAVING子句应用于探索的各个行之前计算总数。- 如果整个数据集的总体汇总值满足度量过滤条件,则会显示总计值。由于此总计是在过滤条件从主探索数据表中移除行之前计算的,因此该总计可能高于所显示行的总和。
-
如果整个数据集的总体汇总值不满足度量过滤条件,则过滤条件在汇总查询中会评估为
false。由于总计查询未返回任何结果,因此总计显示为null。
- 当查询达到行数限制时:Looker 创建的总查询不受这些限制的约束,因为总查询只会返回一行。
行总数可能不同的原因
本页面的为什么总数可能偏低部分说明了 Looker 会生成一个 SQL 查询,其中不包含在探索中可能选择的未透视维度,然后针对数据库运行该查询。
对于行总计,Looker 的行为类似,但它不是移除未透视的维度,而是从它运行的用于计算总计的 SQL 查询中的 SELECT 和 GROUP BY 语句中移除透视的维度。
如何计算价值总数
如需仅根据表格中的值计算总数,您可以使用表计算创建一个新列。如需了解详情,请参阅以下示例。
计算列总计
如需计算列值的总和,您可以在表计算中使用 sum 函数:
sum(${view_name.field_name})
或者,如果您有权创建表计算,也可以使用累计列总计快捷计算。
计算行总计
如需计算行值的总和,您可以在表计算中使用 sum 和 pivot_row() 函数:
sum(pivot_row(${view_name.field_name}))
注意:此方法会生成一个新列,而不会显示为标准的“总计”行或列。
或者,如果您有权创建表计算,也可以使用运行中的行总计快捷计算。
其他资源
执行聚合的某些表计算(例如使用 percentile 或 median 的计算)也可能无法按预期方式进行汇总。这是因为表计算功能会使用总计行中的值来计算总计,而不是使用数据列中的值。如需问题排查提示,请参阅将可能令人困惑的表格计算总计显示为 Null 最佳实践页面。