订单埋点看板

按日查看各点位曝光、点击与点击率。

⚠ 最新日期数据可能未完整

每日明细

日期按列展开;每行一个点位,包含 PV、UV 和点击率。

原始查询 SQL

以下 SQL 与刷新按钮后端查询口径一致;刷新时默认将 ${start_ds} / ${end_ds} 替换为最新分区日期。
0. 获取最新分区
set odps.sql.select.output.format=csv;
SELECT MAX_PT('icbucdm.dwd_en_log_click_basic_di') AS ds;
1. 新埋点:协商中订单 / 所有订单 / 起草按钮
set odps.sql.select.output.format=csv;
set odps.sql.mapper.split.size=4096;
SELECT
    ds,
    REGEXP_EXTRACT(click_other_info, 'actionName=([^|]*)', 1) AS action_name,
    CASE
        WHEN REGEXP_EXTRACT(click_other_info, 'scene=([^|]*)', 1) IS NULL
             OR REGEXP_EXTRACT(click_other_info, 'scene=([^|]*)', 1) = ''
          THEN '(无scene)'
        ELSE REGEXP_EXTRACT(click_other_info, 'scene=([^|]*)', 1)
    END AS scene,
    COUNT(*) AS pv,
    COUNT(DISTINCT cookie_id) AS uv_cookie
FROM icbucdm.dwd_en_log_click_basic_di
WHERE ds BETWEEN '${start_ds}' AND '${end_ds}'
  AND click_id = '/sc.trade-assurance.trade-order-list'
  AND REGEXP_EXTRACT(click_other_info, 'actionName=([^|]*)', 1) IN (
        'exposureNegotiationOrderTab',
        'exposureAllOrderTab',
        'clickNegotiationOrderTab',
        'clickAllOrderTab',
        'exposureDraftOrderBtn',
        'clickDraftOrderBtnFromEmptyPage',
        'clickDraftOrderBtnFromPageHeader'
      )
GROUP BY
    ds,
    REGEXP_EXTRACT(click_other_info, 'actionName=([^|]*)', 1),
    CASE
        WHEN REGEXP_EXTRACT(click_other_info, 'scene=([^|]*)', 1) IS NULL
             OR REGEXP_EXTRACT(click_other_info, 'scene=([^|]*)', 1) = ''
          THEN '(无scene)'
        ELSE REGEXP_EXTRACT(click_other_info, 'scene=([^|]*)', 1)
    END
ORDER BY action_name, scene, ds;
2. IM起草入口:ext=expDraftOrder / clickDraftOrder
set odps.sql.select.output.format=csv;
set odps.sql.mapper.split.size=4096;
WITH events AS (
    SELECT
        ds,
        cookie_id,
        REGEXP_EXTRACT(url_decode(click_other_info), '"sellerId":"([^"]*)"', 1) AS seller_id,
        REGEXP_EXTRACT(url_decode(click_other_info), '"buyerId":"([^"]*)"', 1) AS buyer_id,
        CAST(ali_id AS STRING) AS ali_id_str,
        REGEXP_EXTRACT(click_other_info, 'ext=([^&|]*)', 1) AS ext
    FROM icbucdm.dwd_en_log_click_basic_di
    WHERE ds BETWEEN '${start_ds}' AND '${end_ds}'
      AND click_id = '/sc.ma.im'
      AND REGEXP_EXTRACT(click_other_info, 'ext=([^&|]*)', 1) IN ('expDraftOrder', 'clickDraftOrder')
), normalized AS (
    SELECT
        ds,
        cookie_id,
        CASE
            WHEN seller_id IS NOT NULL AND seller_id != '' THEN seller_id
            WHEN buyer_id IS NOT NULL AND buyer_id != '' THEN buyer_id
            WHEN ali_id_str IS NOT NULL AND ali_id_str != '' THEN ali_id_str
        END AS biz_user_id,
        CASE WHEN ext = 'expDraftOrder' THEN 1 ELSE 0 END AS is_expose,
        CASE WHEN ext = 'clickDraftOrder' THEN 1 ELSE 0 END AS is_click
    FROM events
)
SELECT
    ds,
    SUM(is_expose) AS expose_pv,
    COUNT(DISTINCT CASE WHEN is_expose = 1 THEN cookie_id END) AS expose_uv_cookie,
    COUNT(DISTINCT CASE WHEN is_expose = 1 THEN biz_user_id END) AS expose_uv_biz_user,
    SUM(is_click) AS click_pv,
    COUNT(DISTINCT CASE WHEN is_click = 1 THEN cookie_id END) AS click_uv_cookie,
    COUNT(DISTINCT CASE WHEN is_click = 1 THEN biz_user_id END) AS click_uv_biz_user,
    COALESCE(ROUND(SUM(is_click) * 100.0 / CASE WHEN SUM(is_expose) = 0 THEN NULL ELSE SUM(is_expose) END, 4), 0) AS click_pv_rate_pct,
    COALESCE(ROUND(COUNT(DISTINCT CASE WHEN is_click = 1 THEN cookie_id END) * 100.0 / CASE WHEN COUNT(DISTINCT CASE WHEN is_expose = 1 THEN cookie_id END) = 0 THEN NULL ELSE COUNT(DISTINCT CASE WHEN is_expose = 1 THEN cookie_id END) END, 4), 0) AS click_uv_cookie_rate_pct,
    COALESCE(ROUND(COUNT(DISTINCT CASE WHEN is_click = 1 THEN biz_user_id END) * 100.0 / CASE WHEN COUNT(DISTINCT CASE WHEN is_expose = 1 THEN biz_user_id END) = 0 THEN NULL ELSE COUNT(DISTINCT CASE WHEN is_expose = 1 THEN biz_user_id END) END, 4), 0) AS click_uv_biz_user_rate_pct
FROM normalized
GROUP BY ds
ORDER BY ds;
3. 协商引导弹窗:展示 / 手动起草 / 继续起草 / 关闭
set odps.sql.select.output.format=csv;
set odps.sql.mapper.split.size=4096;
WITH parsed AS (
    SELECT
        ds,
        cookie_id,
        REGEXP_EXTRACT(click_other_info, 'actionName=([^|]*)', 1) AS action_name,
        REGEXP_EXTRACT(click_other_info, 'closeType=([^|]*)', 1) AS close_type
    FROM icbucdm.dwd_en_log_click_basic_di
    WHERE ds BETWEEN '${start_ds}' AND '${end_ds}'
      AND click_id = '/sc.trade-assurance.trade-order-list'
      AND REGEXP_EXTRACT(click_other_info, 'actionName=([^|]*)', 1) IN (
            'showNegotiatingGuideDialog',
            'closeNegotiatingGuideDialog',
            'clickOpenNegotiationFromDialog',
            'clickManualDraftFromDialog'
          )
)
SELECT
    ds,
    SUM(CASE WHEN action_name = 'showNegotiatingGuideDialog' THEN 1 ELSE 0 END) AS expose_pv,
    COUNT(DISTINCT CASE WHEN action_name = 'showNegotiatingGuideDialog' THEN cookie_id END) AS expose_uv_cookie,
    SUM(CASE WHEN action_name = 'clickManualDraftFromDialog' THEN 1 ELSE 0 END) AS manual_click_pv,
    COUNT(DISTINCT CASE WHEN action_name = 'clickManualDraftFromDialog' THEN cookie_id END) AS manual_click_uv_cookie,
    SUM(CASE WHEN action_name = 'clickOpenNegotiationFromDialog' THEN 1 ELSE 0 END) AS open_negotiation_click_pv,
    COUNT(DISTINCT CASE WHEN action_name = 'clickOpenNegotiationFromDialog' THEN cookie_id END) AS open_negotiation_click_uv_cookie,
    SUM(CASE WHEN action_name = 'closeNegotiatingGuideDialog' AND close_type = 'button' THEN 1 ELSE 0 END) AS close_button_pv,
    COUNT(DISTINCT CASE WHEN action_name = 'closeNegotiatingGuideDialog' AND close_type = 'button' THEN cookie_id END) AS close_button_uv_cookie,
    SUM(CASE WHEN action_name = 'closeNegotiatingGuideDialog' AND close_type = 'mask' THEN 1 ELSE 0 END) AS close_mask_pv,
    COUNT(DISTINCT CASE WHEN action_name = 'closeNegotiatingGuideDialog' AND close_type = 'mask' THEN cookie_id END) AS close_mask_uv_cookie
FROM parsed
GROUP BY ds
ORDER BY ds;
4. Copilot订单催付工具:stageCardExpose / stageToolClick
set odps.sql.select.output.format=csv;
set odps.sql.mapper.split.size=4096;
WITH raw_events AS (
    SELECT
        ds,
        cookie_id,
        ali_id,
        REGEXP_EXTRACT(click_other_info, 'ext=([^&|]*)', 1) AS ext,
        url_decode(click_other_info) AS decoded_info,
        REGEXP_EXTRACT(url_decode(click_other_info), 'operateContent=([^&|]*)', 1) AS operate_content
    FROM icbucdm.dwd_en_log_click_basic_di
    WHERE ds BETWEEN '${start_ds}' AND '${end_ds}'
      AND click_id = '/sc.ma.im'
      AND REGEXP_EXTRACT(click_other_info, 'ext=([^&|]*)', 1) IN ('stageCardExpose', 'stageToolClick')
), parsed AS (
    SELECT
        ds,
        cookie_id,
        ali_id,
        ext,
        decoded_info,
        GET_JSON_OBJECT(operate_content, '$.actionName') AS action_name,
        GET_JSON_OBJECT(operate_content, '$.bizData.sellerAliId') AS seller_ali_id,
        GET_JSON_OBJECT(operate_content, '$.bizData.stageType') AS stage_type,
        GET_JSON_OBJECT(operate_content, '$.bizData.toolType') AS tool_type
    FROM raw_events
)
SELECT
    ds,
    SUM(CASE WHEN ext = 'stageCardExpose' AND action_name = 'stageCardExpose' AND stage_type = 'REQUIREMENT' AND INSTR(decoded_info, 'OrderPay') > 0 THEN 1 ELSE 0 END) AS expose_pv,
    COUNT(DISTINCT CASE WHEN ext = 'stageCardExpose' AND action_name = 'stageCardExpose' AND stage_type = 'REQUIREMENT' AND INSTR(decoded_info, 'OrderPay') > 0 THEN cookie_id END) AS expose_uv_cookie,
    COUNT(DISTINCT CASE WHEN ext = 'stageCardExpose' AND action_name = 'stageCardExpose' AND stage_type = 'REQUIREMENT' AND INSTR(decoded_info, 'OrderPay') > 0 THEN CASE WHEN seller_ali_id IS NOT NULL AND seller_ali_id != '' THEN seller_ali_id ELSE CAST(ali_id AS STRING) END END) AS expose_uv_seller,
    SUM(CASE WHEN ext = 'stageToolClick' AND action_name = 'stageToolClick' AND stage_type = 'REQUIREMENT' AND tool_type = 'OrderPay' THEN 1 ELSE 0 END) AS click_pv,
    COUNT(DISTINCT CASE WHEN ext = 'stageToolClick' AND action_name = 'stageToolClick' AND stage_type = 'REQUIREMENT' AND tool_type = 'OrderPay' THEN cookie_id END) AS click_uv_cookie,
    COUNT(DISTINCT CASE WHEN ext = 'stageToolClick' AND action_name = 'stageToolClick' AND stage_type = 'REQUIREMENT' AND tool_type = 'OrderPay' THEN CASE WHEN seller_ali_id IS NOT NULL AND seller_ali_id != '' THEN seller_ali_id ELSE CAST(ali_id AS STRING) END END) AS click_uv_seller
FROM parsed
GROUP BY ds
ORDER BY ds;
点位示意图