簡體   English   中英

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 [解釋對於每個商店,必須計算數據存在的總周數,並取所有商店的最大周數。 在這里,Store 11 總共有 2 周,而 Store 12 總共有 1 周。 所以,這里的最大值是 2,它被分配為這個變量的值]

Desired Result: Scaled AWS Formula Part_1 結果 [文章在商店內有記錄的周數/數據中的最大周數]

Store   part_1_value    
11      1.5 (3/2)
12      1 (2/2)

縮放的 AWS 公式第 2 部分結果 [AWS / 周數]

Store   part_2_value    
11      18.9 (37.8/2)
12      25.5 (25.5/1)

最終 Output 為: [Part_1 * Part_2]

Store   ScaledAverageWeeklySales    
11      28.35 (1.5*18.9)
12      25.5 (1*25.5)

總的來說,我們的最終結果應該是 Store Level。 提前致謝!

在您澄清之后,我能夠創建一個查詢來計算您要尋找的內容。

我已經將您提供的數據與WITH語句以及MAXCOUNT聚合內置方法一起使用在 BigQuery 中。下面是查詢,

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

和 output,

Row Store   AWS_result
1   11      28.35
2   12      25.5

請注意max_weeks_data是一個struct 因此,要訪問其值,必須遵循以下語法: name_of_struct.max_weeks_data 此外,請注意,您描述的每個變量都是在臨時表中計算的,始終帶有用於連接表的商店 ID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM