浏览器用户画像大屏搭建:从静态布局到交互联动(附完整代码)

📅 发布时间:2026/7/5 15:08:29 👁️ 浏览次数:
浏览器用户画像大屏搭建:从静态布局到交互联动(附完整代码)
本文为 Uniplore 「浏览器用户画像分析」实验系列全流程指南覆盖静态布局制作、数据接入、交互联动三大核心模块包含可直接复用的 SQL、蓝图节点代码与避坑技巧新手也能零代码复刻企业级数据大屏。一、实验背景与目标本系列实验基于user_profile_stats用户画像统计表完成从大屏静态设计到动态交互的全链路开发最终实现三大核心能力零代码搭建浏览器用户画像分析大屏的完整布局通过蓝图编辑器实现筛选器与全图表的联动数据刷新配置大屏切换、地图下钻交互完成企业级数据可视化开发适用场景数据分析教学实验、企业用户画像看板、数据可视化学习练手以下为本次实验所使用平台的基础信息平台全称助睿数智Uniplore一站式数据科学实验平台平台定位覆盖数据接入、ETL 处理、机器学习建模到可视化分析的全链路 Agentic 零代码数据智能平台二、实验 1大屏静态布局制作组件搭建一核心设计框架先明确大屏的业务叙事逻辑再按模块拆分组件避免盲目拖拽布局模块子模块推荐组件核心作用数据概览核心指标用户数 / 平均年龄 / 本科占比 / 中高收入占比数字翻牌器一眼传递用户规模与质量地域分布省份热力地图 TOP5 排行榜基础平面地图 轮播列表展示用户地理分布与热点区域人口属性性别 / 居住地类型基础饼图 / 轮播饼图展示用户结构占比人口属性年龄 / 职业 / 收入分布基础柱状图 / 水平柱状图对比不同类别的用户数量人口属性学历分布水平基础柱图适配长类别名称的对比展示交互控件浏览器筛选器下拉多选组件实现多浏览器数据切换二快速搭建步骤避坑版步骤 1图层分组与复用将上一实验的「市场分析大屏」组件整体复制、重命名为市场分析组并隐藏新建用户画像组用于本次实验两个大屏可通过图层可见性切换避免组件重叠干扰。步骤 2组件与背景配置附素材按参考图依次添加组件统一设置背景样式推荐素材链接如下素材页面背景图表区域背景指标标题背景排行榜背景步骤 3关键组件设置技巧基础平面地图添加「区域热力层」子组件开启省份边界高亮后续将通过数据动态渲染热力颜色轮播列表TOP5 省份设置交替行背景色、行高与字体样式提升可读性饼图组件性别分布用基础饼图居住地类型用轮播饼图增强大屏动态效果下拉多选筛选器设置 6 个浏览器选项默认选中第一个浏览器开启可清空 / 全选功能三、实验 2数据接入与筛选器联动蓝图配置一核心数据流逻辑页面加载 / 筛选器选择 → 触发参数接收 → 维度数据 SQL 核心指标 SQL 并行查询 → 数据分发到各图表组件实现一次查询、全图表联动刷新。二前置准备表结构优化为准确计算平均年龄先修改user_profile_stats表结构添加age字段DROP TABLE IF EXISTS user_profile_stats; CREATE TABLE user_profile_stats ( browser_name VARCHAR(50) NOT NULL COMMENT 浏览器名称, gender VARCHAR(10) COMMENT 性别, age INT NOT NULL COMMENT 年龄, age_group VARCHAR(10) COMMENT 年龄段, edu VARCHAR(50) COMMENT 学历, job VARCHAR(50) COMMENT 职业, income VARCHAR(50) COMMENT 收入, city_type VARCHAR(10) COMMENT 居住地类型, province VARCHAR(50) COMMENT 省份, user_count INT NOT NULL COMMENT 用户数 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT用户画像统计表;修改「用户画像表加工」转换流在分组组件中保留age字段并重新执行。三蓝图节点配置完整代码节点 1浏览器参数接收并行数据处理接收筛选器选中的浏览器存入全局变量供后续 SQL 调用节点 2维度数据 SQL 请求一次查询全维度数据用UNION ALL合并所有人口属性维度数据统一输出格式const selectedBrowser window.GLOBAL_SELECTED_BROWSER; let sql -- 性别分布 select gender as dimension_type, gender as name, sum(user_count) as value from cs_group_8.user_profile_stats where browser_name ${selectedBrowser} group by gender union all -- 年龄段分布 select age as dimension_type, age_group as name, sum(user_count) as value from cs_group_8.user_profile_stats where browser_name ${selectedBrowser} group by age_group union all -- 学历分布 select edu as dimension_type, edu as name, sum(user_count) as value from cs_group_8.user_profile_stats where browser_name ${selectedBrowser} group by edu union all -- 职业分布 select job as dimension_type, job as name, sum(user_count) as value from cs_group_8.user_profile_stats where browser_name ${selectedBrowser} group by job union all -- 收入分布 select income as dimension_type, income as name, sum(user_count) as value from cs_group_8.user_profile_stats where browser_name ${selectedBrowser} group by income union all -- 居住地类型分布 select city_type as dimension_type, city_type as name, sum(user_count) as value from cs_group_8.user_profile_stats where browser_name ${selectedBrowser} group by city_type union all -- 省份分布 select province as dimension_type, province as name, sum(user_count) as value from cs_group_8.user_profile_stats where browser_name ${selectedBrowser} group by province ; return sql;节点 3维度数据分发并行数据处理按dimension_type过滤数据分发给对应图表组件以下为关键分支代码// 分支1性别分布饼图 var filtered data.filter(item item.dimension_type gender); return filtered.map(item ({ name: item.name, value: item.value })); // 分支2年龄段分布柱状图按顺序排序 var filtered data.filter(item item.dimension_type age); var order [18, 18-25, 26-35, 36-45, 45]; filtered.sort((a, b) order.indexOf(a.name) - order.indexOf(b.name)); return filtered.map(item ({ x: item.name, y: item.value, s: 用户数 })); // 分支3学历分布条形图 var filtered data.filter(item item.dimension_type edu); var order [小学及以下, 初中, 高中/中专/技校, 大专, 大学本科, 硕士及以上]; filtered.sort((a, b) order.indexOf(a.name) - order.indexOf(b.name)); return filtered.map(item ({ x: item.name, y: item.value, s: 学历})); // 分支4职业分布柱状图 var filtered data.filter(item item.dimension_type job); return filtered.map(item ({ x: item.name, y: item.value, s: 职业})); // 分支5收入分布柱状图 var filtered data.filter(item item.dimension_type income); // 按收入金额升序排序提取数字进行比较 filtered.sort((a, b) { // 提取收入段中的最小金额 var getMinIncome (incomeStr) { // 处理 无收入、500元及以下 等特殊情况 if (incomeStr 无收入) return -1; if (incomeStr 500元及以下) return 0; // 提取数字如 1501~2000元 提取 1501 var match incomeStr.match(/(\d)/); return match ? parseInt(match[1]) : 999999;}; return getMinIncome(a.name) - getMinIncome(b.name);}); return filtered.map(item ({ x: item.name, y: item.value, s: 收入})); // 分支6居住地类型分布饼图 var filtered data.filter(item item.dimension_type city_type); return filtered.map(item ({ name: item.name unknown ? 未知 : item.name, value: item.value})); // 分支7省份TOP5排行榜轮播列表 var filtered data.filter(item item.dimension_type province); filtered.sort((a, b) b.value - a.value); var top5 filtered.slice(0, 5); return top5.map(item ({ province: item.name, user_count: item.value }));节点 4核心指标 SQL 请求与分发查询四个核心指标并拆分分发到对应指标卡// SQL请求节点代码 const selectedBrowser window.GLOBAL_SELECTED_BROWSER; let sql select total_users as name, sum(user_count) as value from cs_group_8.user_profile_stats where browser_name ${selectedBrowser} union all select avg_age as name, round(sum(age * user_count) / sum(user_count), 1) as value from cs_group_8.user_profile_stats where browser_name ${selectedBrowser} union all select high_edu_ratio as name, round(sum(case when edu in (本科, 硕士及以上) then user_count else 0 end) * 100.0 / sum(user_count), 1) as value from cs_group_8.user_profile_stats where browser_name ${selectedBrowser} union all select high_income_ratio as name, round(sum(case when income in (50018000元, 800112000元,12000元以上) then user_count else 0 end) * 100.0 / sum(user_count), 1) as value from cs_group_8.user_profile_stats where browser_name ${selectedBrowser} ; return sql; // 分发节点分支示例总用户数 var item data.find(item item.name total_users);四、实验 3大屏交互配置切换 地图下钻一大屏切换功能实现通过 Tab 列表组件控制两个大屏的图层可见性实现无刷新切换添加 Tab 列表组件设置 1 行 2 列id分别为 1市场分析和 2用户画像背景透明度设为 0与导航按钮重合导出 Tab 列表、两个图层组到蓝图编辑器添加分支判断节点return data.id 1;满足分支显示「市场分析组」隐藏「用户画像组」不满足分支则相反二地图省份点击联动核心交互点击地图省份时右侧核心指标卡自动刷新为该省份数据实现地理下钻分析步骤 1省份名称映射并行数据处理处理地图返回的全称与数据表简称的匹配问题const specialMap { 北京市: 北京, 天津市: 天津, 上海市: 上海, 重庆市: 重庆, 广西壮族自治区: 广西, 内蒙古自治区: 内蒙古, 西藏自治区: 西藏, 宁夏回族自治区: 宁夏, 新疆维吾尔自治区: 新疆, 香港特别行政区: 香港, 澳门特别行政区: 澳门 }; let provinceName data.name; if (specialMap[provinceName]) { provinceName specialMap[provinceName]; } else { provinceName provinceName.replace(/(省|自治区|市)$/, ); } window.globalProvinceName provinceName; return provinceName;步骤 2省份核心指标 SQL 查询根据选中的浏览器和省份查询该省份的核心指标const selectedProvince window.globalProvinceName; const selectedBrowser window.GLOBAL_SELECTED_BROWSER; const sql select total_users as name, sum(user_count) as value from cs_group_8.user_profile_stats where browser_name ${selectedBrowser} and province ${selectedProvince} union all select avg_age as name, round(sum(age * user_count) / sum(user_count), 0) as value from cs_group_8.user_profile_stats where browser_name ${selectedBrowser} and province ${selectedProvince} union all select high_edu_ratio as name, round(sum(case when edu in (本科, 硕士及以上) then user_count else 0 end) * 100.0 / sum(user_count), 2) as value from cs_group_8.user_profile_stats where browser_name ${selectedBrowser} and province ${selectedProvince} union all select high_income_ratio as name, round(sum(case when income in (50018000元, 800112000元,12000元以上) then user_count else 0 end) * 100.0 / sum(user_count), 2) as value from cs_group_8.user_profile_stats where browser_name ${selectedBrowser} and province ${selectedProvince} ; return sql;步骤 3地图热力层动态渲染根据用户数自动调整省份颜色深浅实现热力效果添加「提取 adcode 映射表」节点从地图 GeoJSON 数据中提取省份与 adcode 的映射关系配置「各省份用户数查询」SQL 节点统计当前浏览器下各省份用户数添加「地图数据映射」节点将查询结果转换为热力层所需格式function convertToMapData(data) { return data.map(item { const provinceName item.name; let area_id globalProvinceAdcode[provinceName]; if (!area_id) { const simplifiedName provinceName.replace(/省|市|自治区/g, ); for (const fullName in globalProvinceAdcode) { if (fullName.includes(simplifiedName)) { area_id globalProvinceAdcode[fullName]; break; } } } return { name: provinceName, value: parseFloat(item.value) || 0, area_id: Number(area_id) }; }); } return convertToMapData(data);将映射结果导入「区域热力层」的「导入热力值数据接口」五、常见问题与避坑指南筛选器不联动检查参数接收节点是否正确存入全局变量SQL 语句中是否正确引用window.GLOBAL_SELECTED_BROWSER节点连线是否为「执行成功」→「执行 SQL」地图省份不匹配优先检查省份名称映射代码确保数据表中的省份简称与地图返回的全称能正确转换热力层颜色不更新确认 adcode 映射表已正确加载SQL 查询结果包含所有省份且数据映射节点输出格式为{name, value, area_id}指标卡数据为 0检查 SQL 查询是否按浏览器和省份过滤核心指标分发节点是否按name字段正确过滤数据六、实验总结通过本系列实验我们掌握了助睿 Max 数据大屏的完整开发流程从静态组件布局、蓝图编辑器数据接入到多场景交互配置实现了浏览器用户画像分析大屏的从 0 到 1 搭建。这种低代码可视化开发方式大幅降低了企业级数据大屏的开发门槛适合数据分析、产品运营、前端开发等多场景使用。#助睿数智 #Uniplore #数据大屏