我正在尝试计算两周之间的差异,但是在绘制结果时出现了一个奇怪的峰值( SQL / BigQuery )

Posted

技术标签:

【中文标题】我正在尝试计算两周之间的差异,但是在绘制结果时出现了一个奇怪的峰值( SQL / BigQuery )【英文标题】:I'm trying to calculate the difference between two weeks but I'm getting a weird peak when plotting the results ( SQL / BigQuery ) 【发布时间】:2019-03-04 16:28:33 【问题描述】:

所以我有一张每日表格,其中包含每天每家商店的访客数量。

我的表格列是:

日期 商店 Number_of_Visitors Views :商店广告的浏览量。

因此,我首先将我的表格汇总为每周表格,以便计算一周与下一周之间的差异。

我是这样定义方差的:

Variance  = `Number Of Visitors in WEEK N+1 / Number of Visitors in WEEK N

为此我编写了以下查询(新表称为:每周)

SELECT
  year_week,
  min(date) as date,
  Store,
  SUM(Number_Of_Visitors) AS TOTAL_VISITORS
FROM (
  SELECT
    *,
    CONCAT(cast((extract(YEAR from date)), LPAD(cast((extract(WEEK from date)) as string), 2, '0') ) AS year_week
  FROM `my-project`)
GROUP BY
  year_week,  Store


  ORDER BY year_week

然后,为了计算方差,我也使用了以下查询:

SELECT
  base.*,
  ((base.TOTAL_VISITORS-lw.TOTAL_VISITORS)/lw.TOTAL_VISITORS) AS VAR_FF,

FROM
  `weekly` base
JOIN (
  SELECT
    * EXCEPT (date),
    DATE_ADD(DATE(TIMESTAMP(date)), INTERVAL 1 Week)AS n_date
  FROM
    `weekly` ) lw
ON
  base.date = lw.n_date
  AND base.Store= lw.Store

当我使用 Data Studio 绘制方差 (VAR_FF) 时,我得到以下图表,中间的高峰似乎没有意义;

【问题讨论】:

【参考方案1】:

我认为您的代码应该如下所示:

SELECT date_trunc(date, week) as year_week,
       Store,
       SUM(Number_Of_Visitors) AS TOTAL_VISITORS,
       (1 - 
        (LAG(SUM(Number_Of_Visitors)) OVER (PARTITION BY Store ORDER BY MIN(date) /
         SUM(Number_Of_Visitors)
        )
       ) as VAR_FF,
FROM`my-project`
GROUP BY year_week, Store
ORDER BY year_week;

我不确定你计算星期的奇怪计算到底在做什么。这是基于前一周的数据。

【讨论】:

错误:窗口 ORDER BY 表达式引用了在 [5:86] 处既不分组也不聚合的列日期(此行:ORDER BY date_trunc(date, WEEK))。这也促使我按日期分组以避免此错误:( 另外,我不认为我们在计算同一家商店两周之间的相同差异 :) @helloworld 。 . .奇怪的是,在这种情况下不接受该表达式。无论如何,MIN(date) 提供了相同的功能。

以上是关于我正在尝试计算两周之间的差异,但是在绘制结果时出现了一个奇怪的峰值( SQL / BigQuery )的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 Django 中的模型表之间建立关系。但是在插入值时出现错误 |外键项必须是一个实例

在循环中检索索引时出现问题

OpenCV中calcOpticalFlowFarneback的绘制结果无循环

在JAVA中对多边形进行抗锯齿时出现鬼白线

重新绘制图像时出现白色闪烁[颤动]

向文本绘制文本时出现字体错误