BigQuery:如何找到按比例计算的平均每周销售额?
BigQuery: How to find Scaled Average Weekly Sales?
要解决的场景:
我们的最终目标是使用以下公式获得 Scaled AverageWeeklySales(AWS):
Scaled AWS = (Number of Weeks article has had a record within the store / maximum Number of Weeks in data) * (AWS / Number of Weeks)
输入'table_a'结构:
Store Article Date Week Year Sales
xx xx xx xx xx xx
试用:
构建查询直到找到 AWS [在商店级别] 并被困在那里继续进行。由于我是新手,我不确定如何通过 BigQuery SQL 实现这种 Scaled AWS。需要帮助!
WITH total_weekly_sales AS (
SELECT
Store,
Week,
SUM(Sales) AS TotalWeeklySales
FROM
table_a
GROUP BY
Store,
Week)
SELECT
Store,
AVG(TotalWeeklySales) AS AverageWeeklySales
FROM
total_weekly_sales tws
GROUP BY
Store
示例数据:
Store Article Date Week Year Sales
11 aa 2019-07-01 202001 2020 4.9
11 bb 2019-07-07 202001 2020 22.5
11 cc 2019-07-08 202002 2020 10.4
12 aa 2019-07-01 202001 2020 5.3
12 bb 2019-07-07 202001 2020 20.2
评论查询:
- AWS - 表示平均每周销售额[从给定的数据中得出
商店级别,正如我在“
Tried Out
”session中提到的
问题,关于在商店级别找到 totalweeklysale 并获得
它的平均值给出 AWS]
- 周数 - 在商店级别[对于每个商店,有多少周的数据
当前的。 例如 对于商店 11,此变量值将为 2 而对于
存储12,这个变量值就是1]
- 数据中的最大周数 - 例如: 从我们的样本数据中,
对于每个商店,此值将是 2 [Explaination:,必须
计算数据存在的总周数并取最大值
所有商店的周数。在这里,Store 11 有 2 周的时间
总计,而商店 12 总共有 1 周。所以这里最大
将是 2,它被分配为此变量的值]
期望的结果:
Scaled AWS Formula Part_1 结果 [文章在商店中有记录的周数/数据中的最大周数]
Store part_1_value
11 1.5 (3/2)
12 1 (2/2)
缩放 AWS 公式 Part_2 结果 [AWS / 周数]
Store part_2_value
11 18.9 (37.8/2)
12 25.5 (25.5/1)
最终输出为: [Part_1 * Part_2]
Store ScaledAverageWeeklySales
11 28.35 (1.5*18.9)
12 25.5 (1*25.5)
总的来说,我们的最终结果应该是Store Level。
提前致谢!
在你澄清之后,我能够创建一个查询来计算你正在寻找的内容。
我已经使用了您提供的数据以及 WITH statement, together with MAX, COUNT 聚合内置方法 BigQuery.Below 是查询,
WITH unique_articles AS (
SELECT Store, COUNT(DISTINCT Article) as uniq_art FROM `test-proj-261014.bq_load_codelab.sales_week`
GROUP BY Store
),
max_weeks_st AS (
#not possible to use DATE_DIFF cos the format of the date, the number of weeks would be 1 for the sample data
#so WEEK column will be used instead
SELECT Store, COUNT(Distinct Week) as max_weeks_st FROM `test-proj-261014.bq_load_codelab.sales_week`
group by Store
),
#below returns a struct. So in order to access the int64 value name_of_struct.max_weeks_data
max_weeks_data AS(
SELECT MAX(a.max_weeks_st) AS max_weeks_data FROM max_weeks_st a
),
sum_sales AS (
SELECT Store, SUM(sales) as sum_sales FROM `test-proj-261014.bq_load_codelab.sales_week`
GROUP BY Store
),
final_data AS(
select a.Store, a.uniq_art, b.max_weeks_st,c.sum_sales, max_weeks_data FROM unique_articles a LEFT JOIN sum_sales c USING(Store)
LEFT JOIN max_weeks_st b USING(Store) CROSS JOIN max_weeks_data
)
SELECT Store,((uniq_art/max_weeks_data.max_weeks_data)*(sum_sales/ max_weeks_st)) as AWS_result FROM final_data a
和输出,
Row Store AWS_result
1 11 28.35
2 12 25.5
注意 max_weeks_data 是一个 struct。因此,要访问其值,必须遵循语法:name_of_struct.max_weeks_data。此外,请注意,您描述的每个变量都是在临时 table 中计算的,始终带有用于连接 tables.
的商店 ID
要解决的场景: 我们的最终目标是使用以下公式获得 Scaled AverageWeeklySales(AWS):
Scaled AWS = (Number of Weeks article has had a record within the store / maximum Number of Weeks in data) * (AWS / Number of Weeks)
输入'table_a'结构:
Store Article Date Week Year Sales
xx xx xx xx xx xx
试用: 构建查询直到找到 AWS [在商店级别] 并被困在那里继续进行。由于我是新手,我不确定如何通过 BigQuery SQL 实现这种 Scaled AWS。需要帮助!
WITH total_weekly_sales AS (
SELECT
Store,
Week,
SUM(Sales) AS TotalWeeklySales
FROM
table_a
GROUP BY
Store,
Week)
SELECT
Store,
AVG(TotalWeeklySales) AS AverageWeeklySales
FROM
total_weekly_sales tws
GROUP BY
Store
示例数据:
Store Article Date Week Year Sales
11 aa 2019-07-01 202001 2020 4.9
11 bb 2019-07-07 202001 2020 22.5
11 cc 2019-07-08 202002 2020 10.4
12 aa 2019-07-01 202001 2020 5.3
12 bb 2019-07-07 202001 2020 20.2
评论查询:
- AWS - 表示平均每周销售额[从给定的数据中得出
商店级别,正如我在“
Tried Out
”session中提到的 问题,关于在商店级别找到 totalweeklysale 并获得 它的平均值给出 AWS] - 周数 - 在商店级别[对于每个商店,有多少周的数据 当前的。 例如 对于商店 11,此变量值将为 2 而对于 存储12,这个变量值就是1]
- 数据中的最大周数 - 例如: 从我们的样本数据中, 对于每个商店,此值将是 2 [Explaination:,必须 计算数据存在的总周数并取最大值 所有商店的周数。在这里,Store 11 有 2 周的时间 总计,而商店 12 总共有 1 周。所以这里最大 将是 2,它被分配为此变量的值]
期望的结果: Scaled AWS Formula Part_1 结果 [文章在商店中有记录的周数/数据中的最大周数]
Store part_1_value
11 1.5 (3/2)
12 1 (2/2)
缩放 AWS 公式 Part_2 结果 [AWS / 周数]
Store part_2_value
11 18.9 (37.8/2)
12 25.5 (25.5/1)
最终输出为: [Part_1 * Part_2]
Store ScaledAverageWeeklySales
11 28.35 (1.5*18.9)
12 25.5 (1*25.5)
总的来说,我们的最终结果应该是Store Level。 提前致谢!
在你澄清之后,我能够创建一个查询来计算你正在寻找的内容。
我已经使用了您提供的数据以及 WITH statement, together with MAX, COUNT 聚合内置方法 BigQuery.Below 是查询,
WITH unique_articles AS (
SELECT Store, COUNT(DISTINCT Article) as uniq_art FROM `test-proj-261014.bq_load_codelab.sales_week`
GROUP BY Store
),
max_weeks_st AS (
#not possible to use DATE_DIFF cos the format of the date, the number of weeks would be 1 for the sample data
#so WEEK column will be used instead
SELECT Store, COUNT(Distinct Week) as max_weeks_st FROM `test-proj-261014.bq_load_codelab.sales_week`
group by Store
),
#below returns a struct. So in order to access the int64 value name_of_struct.max_weeks_data
max_weeks_data AS(
SELECT MAX(a.max_weeks_st) AS max_weeks_data FROM max_weeks_st a
),
sum_sales AS (
SELECT Store, SUM(sales) as sum_sales FROM `test-proj-261014.bq_load_codelab.sales_week`
GROUP BY Store
),
final_data AS(
select a.Store, a.uniq_art, b.max_weeks_st,c.sum_sales, max_weeks_data FROM unique_articles a LEFT JOIN sum_sales c USING(Store)
LEFT JOIN max_weeks_st b USING(Store) CROSS JOIN max_weeks_data
)
SELECT Store,((uniq_art/max_weeks_data.max_weeks_data)*(sum_sales/ max_weeks_st)) as AWS_result FROM final_data a
和输出,
Row Store AWS_result
1 11 28.35
2 12 25.5
注意 max_weeks_data 是一个 struct。因此,要访问其值,必须遵循语法:name_of_struct.max_weeks_data。此外,请注意,您描述的每个变量都是在临时 table 中计算的,始终带有用于连接 tables.
的商店 ID