如何自动更新最近 12 周的数据?
Posted
技术标签:
【中文标题】如何自动更新最近 12 周的数据?【英文标题】:How to automatically update data from the 12 most recent weeks? 【发布时间】:2017-10-03 15:57:22 【问题描述】:我想创建两个动态每周 BigQuery Firebase 报告,反映最近 12 周的数据:
-
每周事件发生次数
每周触发事件发生次数的 DISTINCT 用户
这些报道的灵感来自我在网上看到的一个Tableau-report:
我正在尝试创建动态时间戳来提取 1.count of event.name 和 2.distinct user_dim.app_info.app_instance_id 的值。
我的第一次迭代:
SELECT event.name as event_name,
COUNT(CASE WHEN _TABLE_SUFFIX >= '20170724' AND _TABLE_SUFFIX < '20170731' THEN event.name END) AS W1,
COUNT(CASE WHEN _TABLE_SUFFIX >= '20170731' AND _TABLE_SUFFIX < '20170807' THEN event.name END) AS W2,
COUNT(CASE WHEN _TABLE_SUFFIX >= '20170807' AND _TABLE_SUFFIX < '20170814' THEN event.name END) AS W3,
COUNT(CASE WHEN _TABLE_SUFFIX >= '20170814' AND _TABLE_SUFFIX < '20170821' THEN event.name END) AS W4,
COUNT(CASE WHEN _TABLE_SUFFIX >= '20170821' AND _TABLE_SUFFIX < '20170828' THEN event.name END) AS W5,
COUNT(CASE WHEN _TABLE_SUFFIX >= '20170828' AND _TABLE_SUFFIX < '20170904' THEN event.name END) AS W6,
COUNT(CASE WHEN _TABLE_SUFFIX >= '20170904' AND _TABLE_SUFFIX < '20170911' THEN event.name END) AS W7,
COUNT(CASE WHEN _TABLE_SUFFIX >= '20170911' AND _TABLE_SUFFIX < '20170918' THEN event.name END) AS W8,
COUNT(CASE WHEN _TABLE_SUFFIX >= '20170918' AND _TABLE_SUFFIX < '20170925' THEN event.name END) AS W9,
COUNT(CASE WHEN _TABLE_SUFFIX >= '20170925' AND _TABLE_SUFFIX < '20171002' THEN event.name END) AS W10,
COUNT(CASE WHEN _TABLE_SUFFIX >= '20171002' AND _TABLE_SUFFIX < '20171009' THEN event.name END) AS W11,
COUNT(CASE WHEN _TABLE_SUFFIX >= '20171009' AND _TABLE_SUFFIX < '20171016' THEN event.name END) AS W12
FROM `<<project-id>>.app_events_*`, UNNEST(event_dim) AS event
WHERE _TABLE_SUFFIX >= '20170724' AND _TABLE_SUFFIX < '20171016'
GROUP BY event_name
ORDER BY event_name DESC;
我也玩过下面的 sudo 代码:
# Enable StandardSQL SELECT week, event.name as event_name, COUNT(event.name) as event_count FROM (TABLE_DATE_RANGE([firebase-analytics-sample-data:android_dataset.app_events_],DATE_ADD(CURRENT_TIMESTAMP(), -1, 'WEEK'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'WEEK'))), .... .... .... (TABLE_DATE_RANGE([firebase-analytics-sample-data:android_dataset.app_events_],DATE_ADD(CURRENT_TIMESTAMP(), -12, 'WEEK'), DATE_ADD(CURRENT_TIMESTAMP(), -12, 'WEEK'))), UNNEST(event_dim) as event GROUP BY event_name ORDER BY week DESC LIMIT 12;
注意:通配符表不支持视图。查询返回错误 如果通配符表匹配数据集中的任何视图。目前, 针对多个表的查询不支持缓存结果 使用通配符函数(即使使用缓存结果选项是 检查)。如果您多次运行相同的通配符查询,您将 为每个查询计费。通配符表支持原生 BigQuery 存储 只要。查询外部表或表时不能使用通配符 查看 (source)。
总结一下:
如果我不必每周手动输入日期字段会快很多,但脚本“知道”我们当前所在的week's index number,并更新最近 12 周的数据。附录
第 30 周 2017 年 7 月 24 日 2017 年 7 月 30 日 20170724 20170730 第 31 周 2017 年 7 月 31 日 2017 年 8 月 6 日 20170731 20170806 第 32 周 2017 年 8 月 7 日 2017 年 8 月 13 日 20170807 20170813 第 33 周 2017 年 8 月 14 日 2017 年 8 月 20 日 20170814 20170820 第 34 周 2017 年 8 月 21 日 2017 年 8 月 27 日 20170821 20170827 第 35 周 2017 年 8 月 28 日 2017 年 9 月 3 日 20170828 20170903 第 36 周 2017 年 9 月 4 日 2017 年 9 月 10 日 20170904 20170910 第 37 周 2017 年 9 月 11 日 2017 年 9 月 17 日 20170911 20170917 第 38 周 2017 年 9 月 18 日 2017 年 9 月 24 日 20170918 20170924 第 39 周 2017 年 9 月 25 日 2017 年 10 月 1 日 20170925 20171001 第 40 周 2017 年 10 月 2 日 2017 年 10 月 8 日 20171002 20171008 第 41 周 2017 年 10 月 9 日 2017 年 10 月 15 日 20171009 20171015【问题讨论】:
你的问题到底是什么!? ;-) 我重写了这个问题,以便更清楚。你能再次投票吗?或许请分享您关于如何解决这个问题的智慧。 在我看来,这个问题太宽泛了,不适合 Stack Overflow。我建议您先自己尝试一下,然后再提出更具体的问题并分解这些问题。 我创建了一个更明确的问题。 【参考方案1】:如果我不必每周手动输入日期字段会快很多),但脚本“知道”我们所在的周数,并根据该周更新最近 12 周的数据我们进去了。
以下是 BigQuery 标准 SQL
WHERE _TABLE_SUFFIX
BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 12 * 7 + EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) - 2 DAY))
AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) - 1 DAY))
下面只显示输出
#standardSQL
SELECT
FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 2 * 7 + EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) - 2 DAY)) first_day,
FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) - 1 DAY)) last_day
-
first_day last_day
20171002 20171015
每当您运行上述脚本时,它都会返回您最近 12 周的开始和结束时间
更新:
我在上面发布了我想要的第一个迭代答案
#standardSQL
SELECT
CONCAT(
FORMAT_DATE('Week %W %d %B %Y, ', first_day),
FORMAT_DATE('%d %B %Y, ', last_day),
FORMAT_DATE('%Y%m%d ', first_day),
FORMAT_DATE('%Y%m%d', last_day)
) wk
FROM (
SELECT
DATE_SUB(CURRENT_DATE(), INTERVAL 1 * 7 + EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) - 2 DAY) first_day,
DATE_SUB(CURRENT_DATE(), INTERVAL EXTRACT(DAYOFWEEK FROM CURRENT_DATE()) - 1 DAY) last_day
)
输出
wk
Week 41 09 October 2017, 15 October 2017, 20171002 20171015
【讨论】:
一次一个问题!所以plug into Google Data Studio
肯定是我建议您作为单独问题发布的另一个问题!同时,请参阅我对extra
格式的更新。任何新问题和/或后续问题 - 请作为新问题发布!!!
感谢更新,每周仍然缺少“事件发生次数”。我实际上会在哪里计算这个值?您的脚本此时仅指示输出表日期,而我想报告每周 event_names 的计数,还是我遗漏了什么?再次感谢您的耐心:)以上是关于如何自动更新最近 12 周的数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用@EnvironmentObject 在 SwiftUI 中自动填充和更新列表?