{
"code": 200,
"message": "SUCCESS",
"data": {
"theme_id": "0b5ae7a1-8ad7-45b3-884a-17fe57f06875",
"session_id": "f2cc82c8-df33-4bbe-a406-1ac5f9a0a217",
"message_id": "f9f54c8b-f45c-4877-abab-42197ae2e1c9",
"question": "最近12个月会员与非会员的每月销售额、销量和订单数趋势分别如何?",
"attachments": [],
"rewritten_question": "最近12个月会员与非会员的每月销售额、销量和订单数趋势分别如何?",
"answer": {
"action": "query",
"explain": "",
"thoughts": "按数据最新日期而不是当前系统日期取最近12个月,避免查询未来无数据;时间范围为数据最大成交日期所在月往前11个月的月初至数据最大成交日期。按月份和会员/非会员拆分,销售额使用订单公司零售额,销量汇总销售数量,订单数去重统计订单号。",
"query": "WITH `最大日期` AS (SELECT MAX(TO_DATE(`成交日期`)) AS `最大成交日期` FROM `销售表`), `范围` AS (SELECT TRUNC(ADD_MONTHS(`最大成交日期`, -11), 'MM') AS `开始日期`, `最大成交日期` AS `结束日期` FROM `最大日期`) SELECT DATE_FORMAT(TO_DATE(`s`.`成交日期`), 'yyyy-MM') AS `月份`, CASE WHEN `s`.`是否会员` = '1' THEN '会员' WHEN `s`.`是否会员` = '0' THEN '非会员' ELSE '未知' END AS `会员类型`, SUM(`s`.`订单公司零售额`) AS `销售额`, SUM(`s`.`销售数量`) AS `销量`, COUNT(DISTINCT `s`.`订单号`) AS `订单数` FROM `销售表` AS `s` CROSS JOIN `范围` AS `r` WHERE TO_DATE(`s`.`成交日期`) >= `r`.`开始日期` AND TO_DATE(`s`.`成交日期`) <= `r`.`结束日期` GROUP BY DATE_FORMAT(TO_DATE(`s`.`成交日期`), 'yyyy-MM'), CASE WHEN `s`.`是否会员` = '1' THEN '会员' WHEN `s`.`是否会员` = '0' THEN '非会员' ELSE '未知' END ORDER BY `月份`, `会员类型`",
"sql_decomposition": {
"dimensions": [
"月份",
"会员类型"
],
"metrics": [
"销售额(求和)",
"销量(求和)",
"订单数(去重计数)"
],
"filters": [
"成交日期大于等于最大成交日期向前推11个月后的月初,并且小于等于最大成交日期"
],
"dimension_details": [
{
"name": "月份",
"tooltip": "成交日期"
},
{
"name": "会员类型",
"tooltip": "是否会员:1表示会员,0表示非会员,其他表示未知"
}
],
"metric_details": [
{
"name": "销售额(求和)",
"tooltip": "订单公司零售额"
},
{
"name": "销量(求和)",
"tooltip": "销售数量"
},
{
"name": "订单数(去重计数)",
"tooltip": "订单号"
}
]
},
"language": "Chinese"
},
"sql": "WITH `最大日期` AS (SELECT MAX(TO_DATE(`成交日期`)) AS `最大成交日期` FROM `销售表`), `范围` AS (SELECT TRUNC(ADD_MONTHS(`最大成交日期`, -11), 'MM') AS `开始日期`, `最大成交日期` AS `结束日期` FROM `最大日期`) SELECT DATE_FORMAT(TO_DATE(`s`.`成交日期`), 'yyyy-MM') AS `月份`, CASE WHEN `s`.`是否会员` = '1' THEN '会员' WHEN `s`.`是否会员` = '0' THEN '非会员' ELSE '未知' END AS `会员类型`, SUM(`s`.`订单公司零售额`) AS `销售额`, SUM(`s`.`销售数量`) AS `销量`, COUNT(DISTINCT `s`.`订单号`) AS `订单数` FROM `销售表` AS `s` CROSS JOIN `范围` AS `r` WHERE TO_DATE(`s`.`成交日期`) >= `r`.`开始日期` AND TO_DATE(`s`.`成交日期`) <= `r`.`结束日期` GROUP BY DATE_FORMAT(TO_DATE(`s`.`成交日期`), 'yyyy-MM'), CASE WHEN `s`.`是否会员` = '1' THEN '会员' WHEN `s`.`是否会员` = '0' THEN '非会员' ELSE '未知' END ORDER BY `月份`, `会员类型`",
"watched_question_id": null,
"card": {
"card_version": 2,
"card_meta": {
"chartType": "MULTI_LINE",
"chartMeta": {
"chartMain": {
"zoneData": {
"row": [
{
"fdType": "STRING",
"metaType": "DIM",
"name": "月份",
"disable": false,
"granularity": null
}
],
"column": [
{
"fdType": "STRING",
"metaType": "DIM",
"name": "会员类型",
"disable": false,
"granularity": null
},
{
"metaType": "MPH"
}
],
"tooltip": [],
"metric": [
{
"fdType": "DOUBLE",
"metaType": "METRIC",
"name": "销售额",
"fieldFormat": {
"numberFormat": {
"formatType": "NUMBER",
"decimalPlaces": 2,
"useThousandsSeparator": true,
"suffix": "元",
"showSuffix": true,
"divideDataBy": 1
}
},
"disable": false,
"granularity": null
}
],
"metric_additional": [
{
"fdType": "LONG",
"metaType": "METRIC",
"name": "销量",
"fieldFormat": {
"numberFormat": {
"formatType": "NUMBER",
"decimalPlaces": 0,
"useThousandsSeparator": true,
"suffix": "件",
"showSuffix": true,
"divideDataBy": 1
}
},
"disable": false,
"granularity": null
},
{
"fdType": "LONG",
"metaType": "METRIC",
"name": "订单数",
"fieldFormat": {
"numberFormat": {
"formatType": "NUMBER",
"decimalPlaces": 0,
"useThousandsSeparator": true,
"suffix": "单",
"showSuffix": true,
"divideDataBy": 1
}
},
"disable": false,
"granularity": null
}
]
},
"zoneDataEdit": null,
"props": {},
"fallbackApplied": false,
"fallbackDetail": "",
"fastModeVisualization": false
}
},
"chartName": "最近12个月会员与非会员每月销售额、销量和订单数趋势"
},
"card_meta_original": null
},
"table": [
{
"table_id": "k91e9b283a34747b0b1088b8",
"table_name": "销售表",
"db_type": "SPARK"
}
],
"visual_insight": null,
"recommended_cards": [],
"user_info": {
"user_id": "aGFueHVlbWVp",
"username": "Meiko"
},
"feedback": {
"is_collected": false,
"vote": {
"vote_type": null,
"comment": null,
"voter_id": null,
"voter_name": null,
"voted_at": null
},
"processing": null
},
"answer_status": "success",
"created_at": "2026-07-06 18:40:46",
"finished_at": "2026-07-06 18:42:09",
"is_insight": 0,
"task_context": {
"stage": "finished",
"history": [
{
"stage": "intent_recognition",
"content": {
"rewritten_question": "最近12个月会员与非会员的每月销售额、销量和订单数趋势分别如何?",
"intent": "write query",
"rewrite_analysis": {
"is_rewritten": false,
"reason_code": "no_history"
}
},
"end_time": "2026-07-06 18:40:46"
},
{
"stage": "knowledge_search",
"content": {
"knowledge": [
"客均购买频次: 购买单数 / 购买人数",
"销售额: 默认使用订单公司零售额",
"纯新增多单会员: 上个时间段不是会员,这个时间段变成了多单会员的人",
"销售表: 订单日期默认使用`成交日期`字段",
"新增多单会员: 上个时间段不是多单会员,这个时间段变成了多单会员的人",
"留存率: 先计算目标时间点往前滚动13-24个月购买的人数作为分母, 再统计这些人中往前滚动12个月有购买的人数作为分子, 相除得到留存率",
"流失激活率: 先计算统计周期前滚25-36月购买且近13-24个月未购买人数作为分母, 再统计这些人中近12个月有购买的人数作为分子, 相除得到流失激活率",
"首单与绑卡时间间隔: 会员首购日期减去首次绑卡日期",
"新增会员: 在统计周期内绑卡的会员",
"有效会员: 低活会员 + 活跃会员, 其中低活、活跃是指消费者状态为低活、活跃",
"纯新增一单会员: 上个时间段不是会员,这个时间段变成了一单会员的人",
"会员等级: 值有: 体验会员, 银卡会员, 金卡会员, 普通会员, 黑金卡会员, 高级会员, 见习特工, 白金卡会员, 黄金会员, VIP会员",
"核心会员: `人群资产类型` in ('一单会员','多单会员')",
"客件数: 购买件数 / 购买人数",
"客单价: 购买金额/购买单数。购买金额为: SUM(`订单公司零售额`),购买单数为: COUNT(DISTINCT `订单号`)",
"客单件: 购买件数 / 购买单数",
"n天二回人数/单数/购买件数/购买金额: 先ROW_NUMBER()函数计算出第一单和第二单以及对应时间,再判断第二单成交日期在统计周期内的人数/订单数/件数/金额,并且这部分人的第一单时间和第二单时间间隔≤n天",
"人均客单价: 购买金额/购买单数。购买金额为: SUM(`订单公司零售额`),购买单数为: COUNT(DISTINCT `订单号`)",
"购买频次: 购买单数 / 购买人数",
"个护: 如果是过滤条件,选取`品类` = '个人护理'",
"分摊金额: 同一订单号的商品,按照订单原价金额的占比分摊总的实付金额,得到分摊金额",
"跨渠道购买: 销售渠道与归属渠道不一致的情况, 特指((`归属渠道` = '线下' AND `销售渠道` = '电商渠道') OR (`归属渠道` = '线上' AND `销售渠道` = '商超渠道'))"
]
},
"end_time": "2026-07-06 18:41:00"
},
{
"stage": "choose_table",
"content": {
"tables": [
{
"table_id": "k91e9b283a34747b0b1088b8",
"table_name": "销售表",
"db_type": "SPARK"
}
]
},
"end_time": "2026-07-06 18:41:36"
},
{
"stage": "reply_generation",
"content": {
"thought": "按数据最新日期而不是当前系统日期取最近12个月,避免查询未来无数据;时间范围为数据最大成交日期所在月往前11个月的月初至数据最大成交日期。按月份和会员/非会员拆分,销售额使用订单公司零售额,销量汇总销售数量,订单数去重统计订单号。"
},
"end_time": "2026-07-06 18:41:36"
}
],
"context_id": "eea7607f-66bf-44d1-91f8-25e8e9c77c69"
},
"answer_context": {
"ext": {
"answer_extra": {
"example_match": {
"matched": false
},
"schema_version": 1,
"sql_candidates": {
"candidates": [
{
"id": "candidate_1",
"sql": "WITH `最大日期` AS (SELECT MAX(TO_DATE(`成交日期`)) AS `最大成交日期` FROM `销售表`), `范围` AS (SELECT TRUNC(ADD_MONTHS(`最大成交日期`, -11), 'MM') AS `开始日期`, `最大成交日期` AS `结束日期` FROM `最大日期`) SELECT DATE_FORMAT(TO_DATE(`s`.`成交日期`), 'yyyy-MM') AS `月份`, CASE WHEN `s`.`是否会员` = '1' THEN '会员' WHEN `s`.`是否会员` = '0' THEN '非会员' ELSE '未知' END AS `会员类型`, SUM(`s`.`订单公司零售额`) AS `销售额`, SUM(`s`.`销售数量`) AS `销量`, COUNT(DISTINCT `s`.`订单号`) AS `订单数` FROM `销售表` AS `s` CROSS JOIN `范围` AS `r` WHERE TO_DATE(`s`.`成交日期`) >= `r`.`开始日期` AND TO_DATE(`s`.`成交日期`) <= `r`.`结束日期` GROUP BY DATE_FORMAT(TO_DATE(`s`.`成交日期`), 'yyyy-MM'), CASE WHEN `s`.`是否会员` = '1' THEN '会员' WHEN `s`.`是否会员` = '0' THEN '非会员' ELSE '未知' END ORDER BY `月份`, `会员类型`",
"order": 1,
"is_selected": true
}
],
"confidence": "high",
"generated_n": 1
}
}
}
},
"answer_extra": {
"schema_version": 1,
"sql_candidates": {
"generated_n": 1,
"confidence": "high",
"selection_reason": null,
"candidates": [
{
"id": "candidate_1",
"order": 1,
"sql": "WITH `最大日期` AS (SELECT MAX(TO_DATE(`成交日期`)) AS `最大成交日期` FROM `销售表`), `范围` AS (SELECT TRUNC(ADD_MONTHS(`最大成交日期`, -11), 'MM') AS `开始日期`, `最大成交日期` AS `结束日期` FROM `最大日期`) SELECT DATE_FORMAT(TO_DATE(`s`.`成交日期`), 'yyyy-MM') AS `月份`, CASE WHEN `s`.`是否会员` = '1' THEN '会员' WHEN `s`.`是否会员` = '0' THEN '非会员' ELSE '未知' END AS `会员类型`, SUM(`s`.`订单公司零售额`) AS `销售额`, SUM(`s`.`销售数量`) AS `销量`, COUNT(DISTINCT `s`.`订单号`) AS `订单数` FROM `销售表` AS `s` CROSS JOIN `范围` AS `r` WHERE TO_DATE(`s`.`成交日期`) >= `r`.`开始日期` AND TO_DATE(`s`.`成交日期`) <= `r`.`结束日期` GROUP BY DATE_FORMAT(TO_DATE(`s`.`成交日期`), 'yyyy-MM'), CASE WHEN `s`.`是否会员` = '1' THEN '会员' WHEN `s`.`是否会员` = '0' THEN '非会员' ELSE '未知' END ORDER BY `月份`, `会员类型`",
"is_selected": true
}
]
},
"example_match": {
"matched": false,
"matched_qa_example": null
},
"clarify": null
},
"query_status": "success",
"query_result": {
"columns": [
{
"name": "月份",
"fdType": "STRING",
"seqNo": 0
},
{
"name": "会员类型",
"fdType": "STRING",
"seqNo": 1
},
{
"name": "销售额",
"fdType": "DOUBLE",
"seqNo": 2
},
{
"name": "销量",
"fdType": "LONG",
"seqNo": 3
},
{
"name": "订单数",
"fdType": "LONG",
"seqNo": 4
}
],
"preview": [
[
"2023-10",
"会员",
"1391812.362238",
"29604",
"8832"
],
[
"2023-10",
"非会员",
"3304977.809516",
"82787",
"22505"
],
[
"2023-11",
"会员",
"882619.250997",
"7560",
"3462"
],
[
"2023-11",
"非会员",
"2330696.298388",
"20256",
"9089"
],
[
"2023-12",
"会员",
"836748.442491",
"3087",
"2601"
],
[
"2023-12",
"非会员",
"2193823.894121",
"7103",
"6285"
],
[
"2024-01",
"会员",
"421618.784916",
"1913",
"1288"
],
[
"2024-01",
"非会员",
"993432.206238",
"4213",
"2667"
],
[
"2024-02",
"会员",
"1132321.31059",
"4180",
"3152"
],
[
"2024-02",
"非会员",
"5744082.512606",
"16577",
"14684"
],
[
"2024-03",
"会员",
"3197542.684149",
"13094",
"8559"
],
[
"2024-03",
"非会员",
"17035225.231274",
"52393",
"41631"
],
[
"2024-04",
"会员",
"2951129.427398",
"10075",
"6307"
],
[
"2024-04",
"非会员",
"9023845.038005",
"31795",
"25495"
],
[
"2024-05",
"会员",
"3817982.476635",
"10153",
"8635"
],
[
"2024-05",
"非会员",
"14201886.326635",
"41901",
"34727"
],
[
"2024-06",
"会员",
"6258134.784162",
"17329",
"13525"
],
[
"2024-06",
"非会员",
"24934731.5535",
"67436",
"59570"
],
[
"2024-07",
"会员",
"1654622.957973",
"9020",
"6688"
],
[
"2024-07",
"非会员",
"8610311.396915",
"43110",
"35887"
],
[
"2024-08",
"会员",
"6180457.954727",
"23601",
"15828"
],
[
"2024-08",
"非会员",
"29141798.660435",
"90675",
"78771"
],
[
"2024-09",
"会员",
"429704.348313",
"1166",
"978"
],
[
"2024-09",
"非会员",
"1928786.048899",
"5199",
"4570"
]
],
"columns_original": null,
"preview_original": null,
"row_limit": 1000,
"cell_limit": null,
"row_truncated": false,
"cell_truncated": false,
"sql": "function (c) {\nvar resTable = c.ac.realLimitRowCountForInputDatasetByCollect(function () {\nc.ac.registerTempViewWithNodeId(c.cu.loadDF(c.sqc, 'f670fb452d39e4d7d95f564e')['select(Column[])'](c.f.col('订单号')['cast(String)']('string'), c.f.col('消费者唯一标识')['cast(String)']('string'), c.f.col('是否退单标记')['cast(String)']('string'), c.f.col('店铺名称')['cast(String)']('string'), c.f.col('销售渠道')['cast(String)']('string'), c.f.col('成交日期')['cast(String)']('string'), c.f.col('付款时间')['cast(String)']('string'), c.f.col('物料编码')['cast(String)']('string'), c.f.col('商品名称')['cast(String)']('string'), c.f.col('销售分类')['cast(String)']('string'), c.f.col('品牌')['cast(String)']('string'), c.f.col('销售数量')['cast(String)']('long'), c.f.col('订单原价金额')['cast(String)']('double'), c.f.col('订单公司零售额')['cast(String)']('double'), c.f.col('订单实付总金额')['cast(String)']('double'), c.f.col('平台')['cast(String)']('string'), c.f.col('订单次序')['cast(String)']('long'), c.f.col('物料组')['cast(String)']('string'), c.f.col('品类')['cast(String)']('string'), c.f.col('品项')['cast(String)']('string'), c.f.col('品目')['cast(String)']('string'), c.f.col('系列')['cast(String)']('string'), c.f.col('会员等级')['cast(String)']('string'), c.f.col('消费者类型')['cast(String)']('string'), c.f.col('频次分类')['cast(String)']('string'), c.f.col('人群资产类型')['cast(String)']('string'), c.f.col('注册时间')['cast(String)']('string'), c.f.col('归属渠道')['cast(String)']('string'), c.f.col('线上绑卡时间')['cast(String)']('string'), c.f.col('线下绑卡时间')['cast(String)']('string'), c.f.col('是否会员')['cast(String)']('string'), c.f.col('省份')['cast(String)']('string'), c.f.col('城市')['cast(String)']('string'), c.f.col('区县')['cast(String)']('string')), '销售表', '6410fad2d9994d0da1a3948caf440ac5');\nc.ac.registerTempViewWithNodeId(c.cu.loadDF(c.sqc, 'f670fb452d39e4d7d95f564e'), '__THIS__', '6410fad2d9994d0da1a3948caf440ac5');\nreturn c.ac.runSQLWithViewsWithNodeId('WITH `最大日期` AS (SELECT MAX(TO_DATE(`成交日期`)) AS `最大成交日期` FROM `销售表`), `范围` AS (SELECT TRUNC(ADD_MONTHS(`最大成交日期`, -11), \\'MM\\') AS `开始日期`, `最大成交日期` AS `结束日期` FROM `最大日期`) SELECT DATE_FORMAT(TO_DATE(`s`.`成交日期`), \\'yyyy-MM\\') AS `月份`, CASE WHEN `s`.`是否会员` = \\'1\\' THEN \\'会员\\' WHEN `s`.`是否会员` = \\'0\\' THEN \\'非会员\\' ELSE \\'未知\\' END AS `会员类型`, SUM(`s`.`订单公司零售额`) AS `销售额`, SUM(`s`.`销售数量`) AS `销量`, COUNT(DISTINCT `s`.`订单号`) AS `订单数` FROM `销售表` AS `s` CROSS JOIN `范围` AS `r` WHERE TO_DATE(`s`.`成交日期`) >= `r`.`开始日期` AND TO_DATE(`s`.`成交日期`) <= `r`.`结束日期` GROUP BY DATE_FORMAT(TO_DATE(`s`.`成交日期`), \\'yyyy-MM\\'), CASE WHEN `s`.`是否会员` = \\'1\\' THEN \\'会员\\' WHEN `s`.`是否会员` = \\'0\\' THEN \\'非会员\\' ELSE \\'未知\\' END ORDER BY `月份`, `会员类型`', '6410fad2d9994d0da1a3948caf440ac5');\n}(), 1001);\nreturn Java.type('com.google.common.collect.ImmutableMap').of('schema', resTable.dtypes(), 'data', resTable);\n}",
"truncated": false
},
"query_stats": {
"row_count": 24,
"column_count": 5,
"maybe_empty": false
},
"query_context": null,
"config": {
"fast_mode": false,
"agent_mode": "multi_agent",
"analysis_confirmation_enabled": false,
"plan_mode": false,
"sql_generation_only": false,
"n_samples": 3,
"analysis_expert_id": null,
"allow_draft_analysis_expert": false
},
"final_status": "success"
}
}