智慧地铁大屏 · 19 个组件完整操作手册
所以下面每个组件都要新建一个 SQL 数据集,不是一个数据集做所有图。
1. 通用套路(19 个组件都照这个做)
1.1 第 1 步:建 SQL 数据集
公共数据 → 智能地铁数据 → 【新建数据集】 → 选「SQL 数据集」 ↓ 数据连接:zhihuiditie 表 名:按下面每个组件里写的填(比如 ads_in_station_day_top) SQL 语句:把下面框里的整段复制粘贴进去 ↓ 点右上角【预览】 → 确认右边出数据了 → 点【确定】1.2 第 2 步:新建组件
我的分析 → 智慧地铁可视化大屏 → 点右上角【编辑】 ↓ 左下角 【+ 新建组件】 → 选择刚建好的那个数据集 → 确定1.3 第 3 步:拖字段出图
① 上方【图表类型】里选我指定的图(条形图/柱状图/环形图/雷达图/指标卡) ② 左侧字段列表,把我写的「纵轴字段」拖到【纵轴】槽位 ③ 再把我写的「横轴字段」拖到【横轴】槽位 ④ 双击标题改成我写的组件名 ⑤ 右上角【保存】注意:所有 SQL 里都已经写了 WHERE dt = '20180901',不用你再去筛选器里筛日期。每段 SQL 末尾都有 ORDER BY ... DESC(排行榜必须有),不要删。
2. 组件 1:进站人次排行榜 TOP10
数据集名:ads_in_station_day_top
SELECT in_station AS 进站站点, count(1) AS 进站人次 FROM dws.dws_take_subway_detail WHERE dt = '20180901' AND in_station != '""' GROUP BY in_station ORDER BY 进站人次 DESC LIMIT 10| 图表类型 | 纵轴字段 | 横轴字段 |
|---|---|---|
| 条形图 | 进站站点 | 进站人次 |
做完长这样:五和 9,500 → 布吉 8,702 → 丹竹头 7,577 → 民治 7,450 → 龙华 6,040 → 下水径 5,760 → 清湖 5,727 → 大芬 5,031 → 固戍 5,013 → 长龙 4,907。
3. 组件 2:出站人次排行榜 TOP10
数据集名:ads_out_station_day_top
SELECT out_station AS 出站站点, count(1) AS 总人数 FROM dws.dws_take_subway_detail WHERE dt = '20180901' AND out_station != '""' GROUP BY out_station ORDER BY 总人数 DESC LIMIT 10| 图表类型 | 纵轴字段 | 横轴字段 |
|---|---|---|
| 条形图 | 出站站点 | 总人数 |
做完长这样:深圳北 8,312 → 罗湖站 8,016 → 福田口岸 6,189 → 华强北 5,545 → 老街 5,329 → 会展中心站 5,027 → 南山站 4,894 → 兴东 4,748 → 五和 4,722 → 福田 4,609。
4. 组件 3:进出站人次排行榜
数据集名:ads_in_out_station_day_top
SELECT station AS 站点, sum(in_cnt) AS 进站人次, sum(out_cnt) AS 出站人次, sum(in_cnt) + sum(out_cnt) AS 总人次 FROM ( SELECT in_station AS station, 1 AS in_cnt, 0 AS out_cnt FROM dws.dws_take_subway_detail WHERE dt = '20180901' AND in_station != '""' UNION ALL SELECT out_station AS station, 0 AS in_cnt, 1 AS out_cnt FROM dws.dws_take_subway_detail WHERE dt = '20180901' AND out_station != '""' ) GROUP BY station ORDER BY 总人次 DESC LIMIT 20| 图表类型 | 纵轴字段 | 横轴字段 |
|---|---|---|
| 柱状图 | 站点 | 进站人次 和 出站人次(两个都拖进去,会并排显示) |
5. 组件 4:线路单日运输乘客总次数排行榜
数据集名:ads_line_send_passengers_day_top
SELECT in_company_name AS 线路, count(1) AS 乘客数 FROM dws.dws_take_subway_detail WHERE dt = '20180901' AND in_company_name != '""' GROUP BY in_company_name ORDER BY 乘客数 DESC| 图表类型 | 纵轴字段 | 横轴字段 |
|---|---|---|
| 柱状图 | 线路 | 乘客数 |
对数字:地铁五号线 82,947 → 三号线 68,945 → 一号线 49,995 → 四号线 38,428。
6. 组件 5:乘客通勤时间平均值 / min
数据集名:ads_all_passengers_single_ride_spend_time_average
SELECT round(avg(take_time), 2) AS 平均通勤分钟, count(1) AS 样本数 FROM dws.dws_take_subway_detail WHERE dt = '20180901'| 图表类型 | 指标字段 |
|---|---|
| 指标卡 | 平均通勤分钟 |
对数字:应该显示 29.86。
7. 组件 6:线路单程直达乘客耗时平均值排行榜
数据集名:ads_line_single_ride_average_time_day_top
SELECT in_company_name AS 线路, round(avg(take_time), 2) AS 平均耗时, count(1) AS 次数 FROM dws.dws_take_subway_detail WHERE dt = '20180901' AND conn_mark = 1 GROUP BY in_company_name ORDER BY 平均耗时 DESC| 图表类型 | 颜色字段 | 角度/指标字段 |
|---|---|---|
| 环形图 | 线路 | 平均耗时 |
对数字:十一号线 24.01 → 三号线 23.72 → 一号线 21.29 → 五号线 20.27。
8. 组件 7:每日运输乘客最多的车站区间排行榜
数据集名:ads_stations_send_passengers_day_top
SELECT if(in_station > out_station, concat(in_station, '-', out_station), concat(out_station, '-', in_station)) AS 乘车区间, count(1) AS 人流量 FROM dws.dws_take_subway_detail WHERE dt = '20180901' AND in_station != out_station AND in_station != '""' AND out_station != '""' GROUP BY 乘车区间 ORDER BY 人流量 DESC LIMIT 20| 图表类型 | 纵轴字段 | 横轴字段 |
|---|---|---|
| 柱状图 | 乘车区间 | 人流量 |
对数字:赤尾-华强北 1,908 → 福田口岸-福民 1,273 → 深圳北-五和 1,051。
9. 组件 8:站点进站闸机数(雷达图)
数据集名:ads_station_in_equ_num_top
SELECT in_station AS 站点, uniqExact(in_equ_no) AS 闸机数 FROM dws.dws_take_subway_detail WHERE dt = '20180901' AND in_station != '""' GROUP BY in_station ORDER BY 闸机数 DESC LIMIT 10| 图表类型 | 维度字段 | 指标字段 |
|---|---|---|
| 雷达图 | 站点 | 闸机数 |
对数字:华强北 24 → 福田 22 → 老街 22 → 市民中心 21 → 少年宫 20。
10. 组件 9:单日从上车到下车间隔时间排行榜
数据集名:ads_passenger_spend_time_day_top
SELECT card_no AS 卡号, in_station AS 进站, out_station AS 出站, round(take_time, 2) AS 通勤分钟 FROM dws.dws_take_subway_detail WHERE dt = '20180901' ORDER BY take_time DESC LIMIT 10| 图表类型 | 颜色字段 | 标签字段 |
|---|---|---|
| 气泡图 | 卡号 | 通勤分钟 |
对数字:BEBJGJFFA 下水径→红岭北 285.38 → FFGCDFHGJ 龙华→龙华 280.30。
11. 组件 10:站点出站闸机数(雷达图)
数据集名:ads_station_out_equ_num_top
SELECT out_station AS 站点, uniqExact(out_equ_no) AS 闸机数 FROM dws.dws_take_subway_detail WHERE dt = '20180901' AND out_station != '""' GROUP BY out_station ORDER BY 闸机数 DESC LIMIT 10| 图表类型 | 维度字段 | 指标字段 |
|---|---|---|
| 雷达图 | 站点 | 闸机数 |
12. 组件 11:线路进站闸机数(饼图)
数据集名:ads_line_in_equ_num_top
SELECT in_company_name AS 线路, uniqExact(in_equ_no) AS 闸机数 FROM dws.dws_take_subway_detail WHERE dt = '20180901' AND in_company_name != '""' GROUP BY in_company_name ORDER BY 闸机数 DESC| 图表类型 | 颜色字段 | 角度/指标字段 |
|---|---|---|
| 饼图 | 线路 | 闸机数 |
13. 组件 12:换乘耗时最久的乘客 TOP10
数据集名:ads_conn_spend_time_top
SELECT card_no AS 卡号, in_station AS 进站, out_station AS 出站, round(take_time, 2) AS 通勤分钟 FROM dws.dws_take_subway_detail WHERE dt = '20180901' AND conn_mark = 0 ORDER BY take_time DESC LIMIT 10| 图表类型 | 颜色字段 | 标签字段 |
|---|---|---|
| 气泡图 | 卡号 | 通勤分钟 |
14. 组件 13:线路出站闸机数(饼图)
数据集名:ads_line_out_equ_num_top
SELECT out_company_name AS 线路, uniqExact(out_equ_no) AS 闸机数 FROM dws.dws_take_subway_detail WHERE dt = '20180901' AND out_company_name != '""' GROUP BY out_company_name ORDER BY 闸机数 DESC| 图表类型 | 颜色字段 | 角度/指标字段 |
|---|---|---|
| 饼图 | 线路 | 闸机数 |
15. 组件 14:出站交易收入 TOP10
数据集名:ads_station_deal_day_top
SELECT out_station AS 站点, round(sum(deal_money), 2) AS 收入, count(1) AS 笔数 FROM dws.dws_take_subway_detail WHERE dt = '20180901' AND out_station != '""' GROUP BY out_station ORDER BY 收入 DESC LIMIT 10| 图表类型 | 纵轴字段 | 横轴字段 |
|---|---|---|
| 柱状图 | 站点 | 收入 |
对数字:深圳北 3,542,330 → 罗湖站 3,481,475 → 南山站 2,622,940。
16. 组件 15:出站交易所在线路收入 TOP10
数据集名:ads_line_deal_day_top
SELECT out_company_name AS 线路, round(sum(deal_money), 2) AS 收入, count(1) AS 笔数 FROM dws.dws_take_subway_detail WHERE dt = '20180901' AND out_company_name != '""' GROUP BY out_company_name ORDER BY 收入 DESC| 图表类型 | 纵轴字段 | 横轴字段 |
|---|---|---|
| 柱状图 + 折线组合图 | 线路 | 收入(柱)+ 笔数(折线) |
对数字:一号线 27,059,430 → 三号线 26,259,185 → 五号线 26,089,240。
17. 组件 16:每张卡日消费排行
数据集名:ads_card_deal_day_top
SELECT card_no AS 卡号, round(sum(deal_money), 2) AS 消费金额, count(1) AS 次数 FROM dws.dws_take_subway_detail WHERE dt = '20180901' GROUP BY card_no ORDER BY 消费金额 DESC LIMIT 10| 图表类型 | 纵轴字段 | 横轴字段 |
|---|---|---|
| 柱状图 | 卡号 | 消费金额 |
对数字:FHIGEIEDB 4,800 → FFGEDJEGD 4,200。
18. 组件 17:每天每线路换乘出站乘客百分比
数据集名:ads_conn_ratio_day_top
SELECT in_company_name AS 线路, sum(if(conn_mark = 0, 1, 0)) AS 换乘人数, count(1) AS 总人数, round(sum(if(conn_mark = 0, 1, 0)) / count(), 4) AS 换乘占比 FROM dws.dws_take_subway_detail WHERE dt = '20180901' AND in_company_name != '""' GROUP BY in_company_name ORDER BY 换乘占比 DESC| 图表类型 | 纵轴字段 | 横轴字段 |
|---|---|---|
| 面积图 / 折线图 | 线路 | 换乘占比 |
对数字:七号线 0.693 → 四号线 0.6366 → 九号线 0.6029。
19. 组件 18:每分钟每条线在线人数(环形)
数据集名:ads_on_line_min_top
SELECT in_company_name AS 线路, count() AS 在位数 FROM dws.dws_take_subway_detail WHERE dt = '20180901' AND concat(take_day, ' ', in_time) <= concat(take_day, ' 08:30') AND concat(take_day, ' ', out_time) > concat(take_day, ' 08:30') GROUP BY in_company_name ORDER BY 在位数 DESC这里为什么用 concat(...) <= concat(...) 而不是时间函数?ClickHouse 的 toUnixTimestamp 不接受 08:30 这种缺秒的时间串(会直接报错)。2018-09-01 08:30 的字符串字典序就是时间序,所以直接用字符串比较最稳。
| 图表类型 | 颜色字段 | 角度/指标字段 |
|---|---|---|
| 环形图 | 线路 | 在位数 |
对数字(08:30 早高峰):五号线 16,165 → 三号线 12,281 → 一号线 8,045。
20. 组件 19:每小时每条线在线人数(环形)
数据集名:ads_on_line_hour_top
SELECT in_company_name AS 线路, count() AS 在位数 FROM dws.dws_take_subway_detail WHERE dt = '20180901' AND concat(take_day, ' ', in_time) <= concat(take_day, ' 18:00') AND concat(take_day, ' ', out_time) > concat(take_day, ' 18:00') GROUP BY in_company_name ORDER BY 在位数 DESC| 图表类型 | 颜色字段 | 角度/指标字段 |
|---|---|---|
| 环形图 | 线路 | 在位数 |
想换成别的小时,只改 SQL 里那两个 18:00 就行(比如 12:00 看午高峰)。
21. 最后一步:把这 19 个组件拼成大屏
- 我的分析 → 智慧地铁可视化大屏 → 编辑
- 左下角点「新建仪表板」,起名 智慧地铁可视化大屏
- 左侧会列出你做的所有组件,一个个拖到画布上,按老师那张图的布局摆
- 摆好后点「保存」
┌──────────────────────────────────────────────────┐ │ 智慧地铁可视化大屏 [日期筛选] │ ├──────────────────────────────────────────────────┤ │ 进出站人次排行榜(通栏) │ ├───────────────┬──────────────┬───────────────────┤ │ 进站排行榜 │ 通勤平均指标卡 │ 出站排行榜 │ ├───────────────┼──────────────┼───────────────────┤ │ 线路运输乘客数 │ 线路耗时环形 │ 车站区间客流 │ ├───────────────┼──────────────┼───────────────────┤ │ 站点进站闸机雷达│ 通勤最长TOP │ 站点出站闸机雷达 │ ├───────────────┼──────────────┼───────────────────┤ │ 线路进站闸机饼图│ 换乘最久TOP │ 线路出站闸机饼图 │ ├───────────────┼──────────────┼───────────────────┤ │ 车站收入TOP10 │ 线路收入 │ 每卡日消费 │ ├───────────────┼──────────────┼───────────────────┤ │ 换乘出站百分比 │ 每分钟在位数 │ 每小时在位数 │ └───────────────┴──────────────┴───────────────────┘22. 常见问题
| 现象 | 原因 | 解决 |
|---|---|---|
| 预览 SQL 报错 | 复制时漏了字符 | 重新整段复制,注意别漏结尾的 LIMIT 10 |
| 图表是空的 | 字段拖错位置 | 值字段要拖到「横轴/指标」,文字字段拖到「纵轴/维度」 |
| 数字对不上 | 数据集还是旧的直连表 | 确认新建的是 SQL 数据集,不是数据库表 |
| 图表类型选不到雷达图 | 数据维度不够 | 雷达图需要 1 个维度 + 1 个指标,检查是否都拖了 |
| 想改日期 | 换 dt | 把 SQL 里的 20180901 改成 20180831(但那天只有 170 行数据) |