You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BigQuery中使用SQL函数合并重复值,满足DataStudio特定筛选下的聚合需求?

解决方案:BigQuery中避免重复计算每日Session数

Hey there! Let's break down how to solve your problem. The key issue here is that total_session_by_day repeats across products on the same date—so if you just sum the raw data, you'll end up double-counting (200+200+500+500=1400 instead of the 700 you want). Here are a few practical ways to fix this in BigQuery:

1. 预处理数据:创建每日唯一Session数的视图

If you can pre-process your data, creating a view is the cleanest approach. This view will keep only one entry per date (since all products on the same date have the same session count, we can use ANY_VALUE, MAX, or MIN interchangeably):

CREATE OR REPLACE VIEW `your-project.your-dataset.daily_unique_sessions` AS
SELECT
  Date,
  ANY_VALUE(total_session_by_day) AS total_session_by_day
  -- 如果你需要保留Product字段用于筛选,把`Product`加入SELECT和GROUP BY
  -- 注意:保留Product后,每个日期会有多条记录(每个产品一条),但session数相同
FROM
  `your-project.your-dataset.original-table`
GROUP BY
  Date;

在Data Studio中使用这个视图时,直接对total_session_by_day求和即可——即使你选择多个产品,也会自动避免同一日期的重复计算。

2. 保留Product字段,同时防止重复计算

如果你需要在Data Studio中保留Product筛选维度,但又不想重复计算每日session数,可以用窗口函数标记每个日期的第一条记录,然后只对标记的记录求和:
首先运行这个查询(或基于它创建视图):

SELECT
  Date,
  Product,
  total_session_by_day,
  -- 标记每个日期的第一个产品记录为1,其余为0
  ROW_NUMBER() OVER (PARTITION BY Date ORDER BY Product) AS row_num
FROM
  `your-project.your-dataset.original-table`

然后在Data Studio中创建一个计算字段:

SUM(CASE WHEN row_num = 1 THEN total_session_by_day ELSE 0 END)

现在当你选择多个产品时,每个日期的session数只会被计入一次,最终结果就是你想要的700。

3. 直接计算最终总和(无需Data Studio筛选)

如果你不需要在Data Studio中按Product或Date筛选,只想直接得到700的结果,可以在BigQuery中直接计算:

SELECT
  SUM(daily_session) AS total_session
FROM (
  -- 先获取每个日期的唯一session数
  SELECT
    Date,
    ANY_VALUE(total_session_by_day) AS daily_session
  FROM
    `your-project.your-dataset.original-table`
  GROUP BY
    Date
)

这个查询先按日期去重,再对每日数值求和,直接得到700的结果。

重要提示

不要直接在原表上使用SUM(DISTINCT total_session_by_day)——这会错误地跨日期去重数值。比如如果7月3日的session数也是200,这种方式只会把200计算一次,而正确的结果应该是200+500+200=900。

内容的提问来源于stack exchange,提问作者Kit Lactuan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 08:42:48