私は2つのテーブルを持っています:
1. スナップ ショットの日付によって取得された予測テーブルからの未加工の予測データ。このデータを使用して、次のようなウォーターフォールを作成します。
item/snapshot forecast weeks
123 | 8/25/14 | 9/1/14 | 9/8/14 | 9/15/14
--------------------------------------------
8/24/14| 7661 | 4980 | 588 | 2232
8/31/14| | 8319 | 1968 | 2760
9/7/14 | | | 6931 | 684
9/14/14| | | | 9328
行ラベルはスナップショットの日付で、列ラベルは予測週です。基本的に、データのスナップショットの日付がたくさんあり、各スナップショットはこのスナップショットの日付から始まる予測データを提供し、予測週に表示されます。最初のスナップショットの日付 x には x を超える予測週があり、2 番目のスナップショットの日付 y には y を超える予測週しかありません。
次に、テーブル 2、消費テーブルからの消費データがあります。消費テーブルの週を使用して予測テーブルの週と一致させ、消費を挿入してウォーターフォールの空白を埋めます。
Excelで手動で行っている場合、予測は8/25週、週番号は35で、消費テーブルから35週を見つけてここに挿入します。したがって、すべてのスナップショットの日付の 35 週目は同じになります。
次のようになります。
item/snapshot forecast weeks
123 | 8/25/14 | 9/1/14 | 9/8/14 | 9/15/14
--------------------------------------------
8/24/14| 7661 | 4980 | 588 | 2232
8/31/14| 2222 | 8319 | 1968 | 2760
9/7/14 | 2222 | 333 | 6931 | 684
9/14/14| 2222 | 333 | 444 | 9328
しかし、ここでの問題は私の予測テーブルにあります。たとえば、最初のスナップショットの日付には 1 週目から 10 週目までの予測が含まれますが、2 番目のスナップショットの日付には 2 週目から 10 週目の予測しかありません。空白は基本的にデータがなく、予測週間がないことを意味するため、このプロセスを自動化された bigquery sql にします。
誰かが私にアイデアを与えることができれば、私は本当に感謝しています
そして、ここに私のスクリプトがあります:
//Get item info from forecast table
DEFINE INLINE TABLE t1
SELECT CONCAT(SUBSTR(snapshot_date, -4, 4),'-',SUBSTR(snapshot_date, -10, 2),'-', SUBSTR(snapshot_date, -7, 2)) snapshot,
item_name,
type,
item_description,
CONCAT(SUBSTR(forecast_week_start_date, -4, 4),'-',SUBSTR(forecast_week_start_date, -10, 2),'-', SUBSTR(forecast_week_start_date, -7, 2)) forecast_week_start_date,
SUM(quantity) qty,
forecast_week_number,
forecast_year_number,
CONCAT(STRING(forecast_year_number),'-',STRING(forecast_week_number) year_week
FROM forecast
WHERE
concat(SUBSTR(snapshot_date, -4, 4),'-',SUBSTR(snapshot_date, -10, 2),'-', SUBSTR(snapshot_date, -7, 2)) >=
strftime_usec(date_add(TIME_USEC_TO_WEEK(date_add(now(),-84 ,'DAY'),1),-1,'DAY'),'%Y-%m-%d')
GROUP BY snapshot,
item_name,
type,
item_description,
forecast_week_start_date,
forecast_week_number,
forecast_year_number,
year_week
ORDER BY sdm_week_start_date
//Get min year_week to use later
DEFINE INLINE TABLE t2
SELECT MIN(year_week) min_year_week
FROM t1
//Get consumption data and apply using dc deploy week
SELECT
snapshot,
item_name,
type,
item_description,
forecast_week_start_date,
qty,
forecast_week_number,
forecast_year_number,
year_week
IF(t2.min_year_week!= year_week, qty+ABS(consumption_qty),qty)) quantity,
FROM t1
LEFT JOIN ALL
(SELECT item_name, week,sum(transaction_quantity) consumption_qt
FROM consumption
GROUP BY item_name,week) inv
ON t1.year_week=inv.week AND t1.item_name=inv.item_name
CROSS JOIN t2