• 日本語
  • English
  • Entry ASIN別にLTV Customer Lifetime Value (CLTV)算出

    entry asin別に一定期間(6週間とか)初回購入以降の継続購入を売上、個数で集計。
    時間が日本時間になっていないためCONVERT_TIME_ZONE_FROM_UTC(event_date_utc, ‘Asia/Tokyo’)をつかって日本時間に設定して全てを計算。

    --4ステップ展開
    --初回購入日から各user別に同じ日数で継続購入を集計するSQL文です
    --初回購入で評価したasinを限定列挙しておく。ここでは仮に
    entryasin1
    entryasin2
    entryasin3
    entryasin4
    の4つを想定(SQL文ではasinの値を''で囲んでください、↓例示)
    --自社で販売しているasinをリスト化してallasinlist というテーブルをアップロードしておく
    
    
    WITH initial_purchases AS (
        SELECT
            user_id,
            tracked_asin AS initial_asin, -- Track the ASIN for grouping purposes
            CAST(CONVERT_TIME_ZONE_FROM_UTC(MIN(event_date_utc), 'Asia/Tokyo') AS TIMESTAMP) AS first_purchase_date,
            COALESCE(SUM(total_product_sales), 0) AS total_initial_revenue, -- Sum of revenue for this ASIN
            COALESCE(SUM(total_units_sold), 0) AS initial_unit_count -- Sum of units sold for initial purchases
        FROM
            TABLE(EXTEND_TIME_WINDOW('conversions_all', 'P60D', 'P1D')) -- Keep window for Jan-Feb
        WHERE
            new_to_brand = TRUE
            AND CONVERT_TIME_ZONE_FROM_UTC(event_date_utc, 'Asia/Tokyo') BETWEEN '2024-01-01' AND '2024-02-29'
            AND tracked_asin IN ('entryasin1', 'entryasin2', 'entryasin3', 'entryasin4') -- Filter for specific ASINs
        GROUP BY
            user_id, tracked_asin -- Group by user_id and tracked_asin to ensure breakdown by ASIN
    ),
    
    -- Step 2: Repeat purchases with unit count, ensuring > 0 revenue for repeat purchases
    repeat_purchases AS (
        SELECT
            r.user_id,
            i.initial_asin, -- Include initial ASIN for grouping purposes
            COALESCE(SUM(r.total_product_sales), 0) AS total_repeat_revenue,
            COALESCE(SUM(r.total_units_sold), 0) AS repeat_unit_count -- Sum of units sold for repeat purchases
        FROM
            TABLE(EXTEND_TIME_WINDOW('conversions_all', 'P300D', 'P1D')) r -- Extended time window for repeat purchases
        JOIN
            initial_purchases i ON r.user_id = i.user_id -- Join on user_id
        JOIN
            allasinlist p ON r.tracked_asin = p.asin -- Filter repeat purchases by ASINs in external table
        WHERE
            r.new_to_brand = FALSE
            AND CONVERT_TIME_ZONE_FROM_UTC(r.event_date_utc, 'Asia/Tokyo') >= i.first_purchase_date
            AND CONVERT_TIME_ZONE_FROM_UTC(r.event_date_utc, 'Asia/Tokyo') <= '2024-11-25'
            AND r.total_product_sales > 0 -- Only include purchases with non-zero revenue
        GROUP BY
            r.user_id, i.initial_asin -- Group by user_id and initial ASIN
    )
    
    -- Step 3: Final output with ASIN breakdown using COUNT(DISTINCT)
    SELECT
        i.initial_asin, -- Group results by ASIN
        COUNT(DISTINCT i.user_id) AS initial_user_count, -- Exact count of distinct users for initial purchases
        COALESCE(SUM(i.total_initial_revenue), 0) AS total_initial_revenue, -- Total initial revenue
        COALESCE(SUM(i.initial_unit_count), 0) AS total_initial_units, -- Total initial units sold
        COALESCE(SUM(r.total_repeat_revenue), 0) AS total_repeat_revenue, -- Total repeat revenue
        COALESCE(SUM(r.repeat_unit_count), 0) AS total_repeat_units, -- Total repeat units sold
        COUNT(DISTINCT r.user_id) AS repeat_user_count -- Exact count of distinct users for repeat purchases
    FROM
        initial_purchases i
    LEFT JOIN
        repeat_purchases r ON i.user_id = r.user_id AND i.initial_asin = r.initial_asin -- Join on user_id and ASIN
    WHERE
        i.initial_asin IS NOT NULL
    GROUP BY
        i.initial_asin -- Group by initial ASIN;