浏览器用户画像分析-大屏静态布局制作+数据接入+交互设置

6.1

1 实验目的

本实验基于之前实验加工完成的用户画像统计表(user_profile_stats),完成浏览器用户画像分析大屏的静态布局设计。

通过本实验,学生应掌握:

  • 根据用户画像分析需求,合理设计大屏的信息结构与叙事逻辑
  • 理解不同图表类型在用户画像分析中的适用场景与分析价值
  • 将数据结果转化为可直观理解、可支撑决策的用户洞察
  • 站在"数据产品"角度,思考大屏如何向不同受众传递价值

2 实验环境

本次实验使用助睿数智(Uniplore)作为一站式数据科学平台。该平台覆盖从数据接入、ETL处理、机器学习建模到可视化展示的全链路零代码功能,适用于数据分析教学与企业数据加工场景。

助睿数智官网为 https://www.uniplore.com//

  • 可视化工具:助睿Max(数据大屏)

助睿Max 是低代码数据可视化平台,支持拖拽搭建、多种图表组件、地图可视化、交互筛选、低代码开发等能力,适用于业务监控、用户洞察、营销战报等场景。

助睿Max核心优势:

  • 组件丰富:覆盖所有常见图表和交互控件,满足企业级可视化需求
  • 图层管理:支持图层堆叠、锁定、隐藏、排序,复杂布局轻松实现
  • 低代码操作:拖拽式搭建 + 蓝图编辑器,无需复杂编程即可完成大屏布局与数据交互配置
  • 工业级数据处理能力:支持海量数据实时接入与渲染,千万级数据点秒级响应,满足企业级生产环境要求
  • 支持数字孪生:支持3D场景、GIS地图、实时物联数据接入,可快速构建数字孪生可视化系统

3 实验数据

本实验使用上一阶段加工完成的 user_profile_stats 表,该表按浏览器维度,统计了用户在各人口属性上的分布,包括:

  • 基本信息:性别、年龄、学历、职业、收入
  • 地域信息:居住地类型(城市/城郊/乡村)、省份
  • 维度:按浏览器名称分组,支持整体分析与分浏览器对比

4 整体分析框架

4.1 业务问题

在开始搭建大屏之前,先明确:这张大屏要帮助谁、看懂什么?

业务问题 对应的分析维度
目标用户是谁?(年龄、性别、职业) 明确核心目标人群,指导产品设计与营销沟通
用户的教育与收入水平如何? 影响产品复杂度设计、定价策略与商业化路径
用户分布在哪里? 指导区域市场投放与本地化运营
不同浏览器的用户画像是否存在差异? 识别差异化人群特征,制定针对性竞争策略

用户画像大屏的核心价值不是"罗列统计数字",而是回答"谁在用我们的产品",并将抽象的人口属性转化为可行动的人群认知。

4.2 大屏设计方案

分析目标 推荐图表 为什么
展示男女比例、城市/城郊/乡村占比 饼图 / 环形图 直观反映部分与整体的关系,适合占比类指标
对比各年龄段、各学历、各职业的用户数量 柱状图 / 条形图 便于横向比较不同类别的数量差异,条形图尤其适合类别较多的场景
展示省份分布 中国地图 空间信息的最佳载体,一眼看出热点区域与空白区域
展示关键数值(总用户、平均年龄等) 指标卡 / 翻牌器 突出核心结论,视觉聚焦,适合大屏"第一眼信息"
支持查看不同浏览器的用户画像差异 筛选器(如下拉多选) 提供交互能力,让大屏从"静态展示"变为"可探索的分析工具"

助睿Max支持以上所有图表类型,且每个图表组件都有丰富的样式自定义选项(颜色、标签、图例、提示框、动画等),满足企业级UI要求。

最终整理用户画像大屏的具体方案如下:

模块 子模块 指标项 组件 关联数据表 备注
数据概览 用户概况 覆盖用户数 指标卡 user_profile_stats 满足筛选条件的用户总数
性别比例 指标卡 user_profile_stats 用户年龄均值
本科以上占比 指标卡 user_profile_stats 学历本科及以上的用户比例
中高收入占比 指标卡 user_profile_stats 月收入>5k的用户比例
基本信息 性别分布 饼图 user_profile_stats 男/女用户占比
年龄分布 柱状图 user_profile_stats 按年龄段统计用户数
学历分布 条形图 user_profile_stats 按学历层次统计用户数
职业分布 柱状图 user_profile_stats 按职业类别统计用户数
收入分布 柱状图 user_profile_stats 按收入段统计用户数
地域分布 城市 vs 乡镇分布 饼图 user_profile_stats 城市/城郊/乡村用户占比
用户省份分布 中国地图 user_profile_stats 展示各省份用户数量分布
省份用户数TOP5 轮播列表 user_profile_stats 展示用户数量top5省份
筛选器 浏览器选择 下拉多选 - 支持选择单个、多个或全部浏览器,默认全部

4.3 参考图

​编辑

++1920×1080 416 KB++

4.4 项目整体说明

本次大屏项目包含"市场分析"和"用户画像"两个大屏,通过顶部导航按钮切换。市场分析大屏已在上一个实验中完成,本次实验只制作用户画像大屏。因此,在开始布局前,需要先将上一个实验已制作的市场分析图表全部隐藏,避免与当前用户画像内容重叠干扰。

助睿Max的图层管理功能:在大屏编辑界面右侧"图层"面板中,可以查看所有组件的堆叠顺序,支持拖拽调整图层上下关系、锁定组件防止误操作、隐藏组件临时不显示。本次实验中,我们可以将市场分析大屏的组件所在的"市场分析"组整体复制、隐藏,复制的组重命名为"用户画像",用户画像大屏的组件正常显示。这样两个大屏可以共存于同一个大屏文件中,通过图层可见性切换,便于统一管理。两个大屏的点击切换交互将在后续实验中专门讲解,本次暂不涉及。

5 各模块设计思路与步骤

5.1 用户省份分布(中国地图)

设计思路:

分析省份分布,是为了识别区域市场的"热点"与"空白":

  • 哪些省份用户最多?
  • 这些省份是否连片(如沿海高活跃带)?
  • 哪些省份是"灯下黑"?

这些信息直接指导区域运营资源的投放优先级,以及本地化推广的策略选择。同时,省份分布也是向投资人展示市场覆盖范围的直观方式。

布局位置:

在大屏布局中,我们把省份分布地图放在最醒目的主视觉位置(通常是大屏的中上部或右侧核心区)。因为地图的空间表现力最强,能够一眼传递"用户从哪来"的直观印象,适合作为大屏的视觉焦点。

图表选择理由:

省份分布必须用地图组件来展示。 地理空间数据的核心信息是"邻近关系"和"空间聚集模式"------柱状图可以告诉你广东用户最多,但它回答不了"华东地区整体表现如何"这类问题。地图保留了省份之间的实际位置关系,观众可以一眼发现热点区域和空白区域。所以地图在这个场景下是不可替代的。

助睿Max地图能力:

助睿Max的"基础平面地图"组件支持多种子图层:区域热力层(按省份颜色深浅)、散点层(城市级别标记)、飞线层(展示流向关系)、迁徙层(动态流动效果)。本实验使用区域热力层即可满足需求,也可以根据实际数据复杂度叠加多个图层,实现更丰富的地理洞察。对于需要数字孪生的场景,助睿Max还支持三维地图、倾斜摄影模型、实时物联数据叠加,可直接构建智慧城市、工业仿真等数字孪生应用。

实验步骤

(1)根据参考图布局,添加"基础平面地图"组件,设置好大小、位置后,添加"区域热力层"子组件

(2)点击"区域热力层"进入子组件配置页面,可根据自身需求配置颜色渐变、边界线宽、高亮样式等属性。助睿Max的地图组件支持自定义地图样式(如深色模式、清新模式),可匹配大屏整体风格。

5.2 核心指标

设计思路:

分析用户画像,需要一个快速获取整体印象的概览区。 在大屏布局中,核心指标卡通常放置在地图的上方、下方或左侧,与地图形成"数据总览+空间分布"的呼应关系。决策者关心四个问题:

  • 用户规模有多大?
  • 用户偏年轻还是成熟?
  • 用户的教育水平如何?
  • 有没有消费潜力?

因此,我们在主视觉区域设计了4个核心指标:

业务问题 对应指标
用户规模有多大? 用户总数
用户偏年轻还是成熟? 平均年龄
用户的教育水平如何? 本科及以上用户占比
有没有消费潜力? 中高收入用户(月收入≥5k)占比

这4个指标覆盖了用户的"规模、年龄、教育、收入"四个层面,足以快速勾勒出用户群的基本轮廓。

图表选择理由:

核心指标通常用指标卡(数字翻牌器)来呈现。 指标卡的优势是:数字大而醒目,标题简洁,没有任何冗余的图表元素,观众的目光会直接落在数值上。这就是我们选择指标卡的原因------在信息层级中,最重要的数字必须最先被看到。

助睿Max翻牌器能力:

助睿Max的"数字翻牌器"组件支持动态数值变化动画、千分位分隔符、小数位数控制、前后缀自定义(如"万人"、"%"、"¥"),以及背景、边框、字体阴影等样式,使核心指标更加突出。同时,其工业级数据处理能力确保了即使底层数据达到千万级,翻牌器的数值更新依然流畅无延迟。

实验步骤

(1)根据参考图,添加4个"数字翻牌器"纵向排列,设置标题和数值样式

(2)每个"数字翻牌器"的标题,使用"单张图片"组件设置背景,背景图链接:https://gzu-edu-quality-max-studio.oss-cn-chengdu.aliyuncs.com/practice/browser-analysis/mbg.png

5.3 用户数TOP5省份排行榜

设计思路:

地图虽然展示了全国分布,但观众很难精确读出每个省份的具体数值。排行榜以列表形式直接给出用户数最高的几个省份及其数值,与地图形成互补:

  • 地图看趋势和空间关系,排行榜看具体排名和数值。
  • 帮助运营团队快速定位核心区域,优先在这些省份加大投放或开展线下活动。
  • 观察TOP省份排名变化,识别新兴增长区域。

图表选择理由:

排行榜通常用表格或横向条形图来展示。表格的优点是信息密度高、精确,适合展示排名、省份名称、用户数三列信息,这里,我们采用表格形式,简洁明了。

助睿Max表格组件:

助睿Max提供了多种列表组件:轮播列表、折叠指标表格、键值表格、进度条表格。其中轮播列表支持各行各列的样式和内容的自定义配置,支持列表内容的超链接配置,同时支持图片格式的列表内容,能够使用轮播动画的方式,将数据信息以列表的形式清晰地展示在可视化应用上。本实验选择轮播列表,既美观又节省空间。

实验步骤

(1)根据参考图,添加"单张图片"组件,作为排行榜区域背景,背景图链接:https://gzu-edu-quality-max-studio.oss-cn-chengdu.aliyuncs.com/enrollment-data/top-list-bg.png

(2)添加"通用标题"组件,调整好样式

(3)添加"轮播列表"组件,调整好样式(行高、列宽、字体、交替行背景色等)

5.4 性别分布

设计思路:

了解浏览器用户的性别构成,是认识用户画像的第一步。不同性别的用户在使用浏览器的内容和偏好上存在显著差异------男性用户通常对科技、财经、体育等内容关注度更高,而女性用户则更偏娱乐、育儿、时尚等。这种内容偏好差异直接影响广告投放策略和信息流推荐逻辑。

基于上述信息,我们着重分析本浏览器用户的性别分布:

  • 男女比例如何? 当前用户群是男性居多、女性居多,还是接近均衡?
  • 内容推荐依据:根据性别比例,可以推测用户可能更偏好哪些内容,指导运营团队调整推荐策略。
  • 异常监控:观察性别比例是否出现异常波动(如某月从7:3突变为5:5),这可能是市场或产品策略变化的信号。

图表选择理由:

性别分布用饼图来展示,因为性别只有两三个类别(男、女、未知)。饼图的扇形角度能被大脑瞬间识别为比例关系------看到半圆就知道50%,看到三分之一就知道33%,这种直觉反应是柱状图做不到的。所以我们用饼图,让观众不需要阅读数值就能感知男女比例。

助睿Max饼图家族:

助睿Max支持多种饼图:基础款饼图、基础饼图、标注对比图、目标占比图、多维度饼图、指标占比图、指标对比饼图、单值百分比饼图、轮播饼图。这里只有男、女、未知三个类别,使用基础饼图即可。同时,饼图支持内圈半径、外圈半径、标签位置、引导线等精细调节。

实验步骤

(1)使用"单张图片"组件设置区域背景,并设置好标题

(2)添加"基础饼图"组件,调整大小和位置

5.5 年龄段分布

设计思路:

浏览器用户的年龄结构,是洞察用户需求的切入点。通过分析不同年龄段的占比,我们可以推断出不同年龄段的用户对浏览器的核心诉求和消费潜力。

基于上述信息,我们着重分析本浏览器用户的年龄结构:

  • 哪个年龄段最多? 主力用户是学生群体(<18岁),还是青年职场人群(18-35岁),或是年龄更大的用户?
  • 功能设计决策:如果用户偏年轻,可以加强个性化、社交分享功能;如果用户偏成熟,则需要强调稳定性、安全性和办公协同能力。
  • 风险预警:如果用户年龄结构持续老化,意味着产品对新用户的吸引力可能正在下降,需要警惕品牌老化风险。

图表选择理由:

年龄分布用柱状图来呈现,因为年龄是多个有序区间(如<18、18-25、26-35、>35),柱状图能直观展示分布形态(哪段最高?趋势是上升还是下降?)。饼图处理4个以上类别时会变得难以比较,而柱状图完全没有这个问题。

助睿Max柱状图家族:

助睿Max支持多种柱状图:基础柱图、弧形柱图、水平基础柱图、水平胶囊柱图、垂直胶囊柱图、垂直基本柱图(堆叠柱状图)。这里使用基础柱图即可。

实验步骤

(1)使用"单张图片"组件设置区域背景,并设置好标题

(2)助睿Max 支持多种柱状图:基础柱图、弧形柱图、水平基础柱图、水平胶囊柱图、垂直胶囊柱图、垂直基本柱图(堆叠柱状图),这里我们使用基础柱图:

5.6 学历分布

设计思路:

浏览器用户的学历分布可以帮助我们从侧面了解用户群体的"特征画像"。不同教育背景的用户,在获取信息的习惯、对专业内容的接受度以及对新功能的探索意愿上可能存在差异。

基于上述信息,我们着重分析浏览器用户的学历结构:

  • 高学历用户占比如何? 产品是否吸引了更多拥有高等教育背景的用户?
  • 产品复杂度设计:如果高学历(本科及以上)用户占比较高,说明用户群体对新功能、专业工具的接受度更高,产品可以考虑增加高级自定义设置或开发者工具。

图表选择理由:

学历分布用条形图(横向柱状图)来展示,因为学历类别名称通常较长(如"初中及以下""高中/中专""大专""本科""硕士及以上"),条形图让类别名称自然左对齐,阅读流畅度明显更好。

助睿Max条形图:

这里使用水平基础柱图,它是横向条形图,尤其适合类别名称较长的场景。

实验步骤

(1)使用"单张图片"组件设置区域背景,并设置好标题

(2)这里我们使用助睿Max 的水平基础柱图:

5.7 职业分布

设计思路:

了解浏览器用户的职业分布,可以帮助我们理解用户的"生活背景",从而推断其典型的使用场景:

  • 判断用户群体:他们可能是学生、IT从业者、企业白领,还是自由职业者?
  • 场景化功能设计:学生用户多,可推出学习辅助功能;职场人士多,工作日活跃度高,可强化密码管理、云同步等办公属性功能。
  • 挖掘增长机会:如果某一职业群体占比较低,也许是未来定向推广或功能拓展的机会点。

图表选择理由:

职业分布用柱状图来展示。职业类别名称一般不长(如"学生""IT从业者""白领"等),柱状图可以清晰地进行横向对比。

实验步骤

(1)使用"单张图片"组件设置区域背景,并设置好标题

(2)这里我们使用助睿Max的基础柱图:

5.8 收入分布

设计思路:

浏览器用户的收入数据直接服务于商业化策略。用户的收入水平是衡量其付费能力与消费意愿的核心指标之一,直接关系到产品商业化的天花板。

  • 挖掘高潜用户:分析收入分布,可以帮助找到更具价值的用户群体。
  • 指导变现策略:如果10k以上用户占比较高,可以考虑订阅制、云服务会员等高端增值服务。反之,如果用户收入集中在中等水平,则免费增值模式(如去广告付费)可能更合适。

图表选择理由:

收入分布用柱状图来展示。收入分段是有序变量(如<3k、3-5k、5-10k、>10k),柱状图能直观展示用户收入水平的集中趋势。

同时,在这个柱状图中展示绝对用户数,与顶部指标卡中的"中高收入用户占比"形成互补:占比给结构结论,绝对值给执行规模。

实验步骤

(1)使用"单张图片"组件设置区域背景,并设置好标题

(2)这里我们使用助睿Max 的水平基础柱图:

5.9 居住地类型分布

设计思路:

用户居住地类型(城市/城郊/乡村)反映了用户所处环境的数字化程度和消费习惯差异。城市用户通常网络基础设施更好、线上消费更活跃;城郊和乡村用户可能对某些本地化服务或轻量级应用有独特需求。了解这一分布有助于制定差异化的市场策略和产品功能适配。

图表选择理由:

居住地类型只有三个类别,适合用饼图展示结构占比

助睿Max特色饼图:

为了使大屏可视化效果更丰富,这里使用助睿Max的轮播饼图组件。轮播饼图可以在饼图基础上增加轮播动画,依次高亮每个扇区并显示详细数值,在有限空间内增强了信息传达的动态效果。

实验步骤

(1)使用"单张图片"组件设置区域背景,并设置好标题

(2)为了使大屏可视化效果更丰富,这里我们使用助睿Max 的轮播饼图:

5.10 筛选器

设计思路:

用户画像分析大屏的核心价值之一,是支持按不同浏览器进行对比分析。通过筛选器,用户可以:

  • 查看全部浏览器用户的整体画像(默认视图),了解产品大盘用户特征;
  • 选择单个浏览器(如 Chrome、IE、360 等),聚焦该浏览器用户的画像,回答"使用 Chrome 的用户与其他用户有什么不同?";
  • 选择多个浏览器进行对比,直观比较不同浏览器用户的年龄、职业、地域等分布差异,为产品定位和竞争策略提供数据依据。

图表选择理由:

筛选器应满足多选、可清空、支持全选/默认全选的交互需求,同时要贴合大屏整体风格。助睿Max的下拉多选组件是最常用的筛选器类型:占用空间小、选项清晰、支持搜索,适合浏览器数量不多(6个)但需要灵活选择的场景。另外也可以使用选项卡组件,但下拉框更节省空间,适合放在大屏顶部或侧边栏。

助睿Max筛选器组件:

助睿Max 提供了下拉框、下拉多选、单选框、时间选择器、选项卡等多种交互组件,均支持自定义选项、默认值、样式(边框、背景、字体颜色等),并可与多个图表联动,实现筛选后所有图表数据自动刷新。本实验使用下拉多选组件,默认选中"全部浏览器"。

实验步骤:

(1)在大屏顶部右侧合适位置,添加"下拉选择"组件(位于"交互"组件分类中),重命名为"浏览器筛选",调整组件位置和大小

(2)在组件右侧属性面板中,调整样式如下:

6 预览与总结

最后,点击"保存"并"预览",检查整体布局是否协调、组件是否对齐、颜色是否一致。助睿Max支持一键全屏预览:

​编辑

至此,浏览器用户画像分析大屏的静态布局已全部完成。本实验充分利用了助睿Max的丰富组件、图层堆叠管理、丰富的样式配置、以及地图、翻牌器、轮播饼图等特色组件,实现了专业级的数据大屏设计。下一实验我们将进入蓝图编辑器,为这些静态组件绑定真实数据,让大屏"活"起来。

6.2

1 实验目的

本实验基于上一实验《浏览器用户画像分析-大屏静态布局制作》完成的大屏布局,使用助睿Max的蓝图编辑器,将之前实验加工好的用户画像数据表接入到大屏的各个图表组件中,并配置筛选器实现多浏览器联动。

通过本实验,学生应掌握:

  • 理解蓝图编辑器的基本概念(数据源、触发器、动作、并行数据处理)
  • 使用并行数据处理节点接收筛选器参数并分发给多个SQL请求节点
  • 为不同图表组件编写带参数的SQL查询语句
  • 配置筛选器与图表的联动交互

2 实验环境

本次实验使用助睿数智(Uniplore)作为一站式数据科学平台。该平台覆盖从数据接入、ETL处理、机器学习建模到可视化展示的全链路零代码功能,适用于数据分析教学与企业数据加工场景。

助睿数智官网为 https://www.uniplore.com//

  • 可视化工具:助睿Max(数据大屏)

助睿Max 是低代码数据可视化平台,支持零代码拖拽搭建、多种图表组件、地图可视化、交互筛选等能力,适用于业务监控、用户洞察、营销战报等场景。

助睿Max核心优势:

  • 组件丰富:覆盖所有常见图表和交互控件,满足企业级可视化需求
  • 图层管理:支持图层堆叠、锁定、隐藏、排序,复杂布局轻松实现
  • 低代码操作:拖拽式搭建 + 蓝图编辑器,无需复杂编程即可完成大屏布局与数据交互配置
  • 工业级数据处理能力:支持海量数据实时接入与渲染,千万级数据点秒级响应,满足企业级生产环境要求
  • 支持数字孪生:支持3D场景、GIS地图、实时物联数据接入,可快速构建数字孪生可视化系统
  • 数据来源:团队私有数据库(MySQL)

本实验将重点使用蓝图编辑器完成数据接入与筛选器联动配置。

3 实验数据

本实验使用上一阶段加工完成的 user_profile_stats 表,该表结构如下:

字段 类型 说明
browser_name VARCHAR(50) 浏览器名称
gender VARCHAR(10) 性别
age_group VARCHAR(10) 年龄段
edu VARCHAR(50) 学历
job VARCHAR(50) 职业
income VARCHAR(50) 收入
city_type VARCHAR(10) 居住地类型
province VARCHAR(50) 省份
user_count INT 用户数

4 整体蓝图逻辑说明

4.1 什么是蓝图编辑器?

蓝图编辑器是助睿Max中用于配置数据流和交互逻辑的可视化编程工具。它采用"节点-连线"的方式,帮助您自由管理可视化应用中多个组件之间的交互关系。

蓝图编辑器的优势:

  • 蓝图编辑器可以保证交互和数据的实时性和同步性。
  • 蓝图编辑器支持数据请求合并和数据分发的功能。
  • 蓝图编辑器可模块化拆分,只需要专注于业务规则和交互需求即可。

4.2 核心概念

概念 说明
数据源 数据库连接配置,定义数据从哪里来
查询 SQL语句,定义取什么数据
触发器 触发数据加载的事件(如页面加载、组件点击、定时刷新等)
动作 触发器执行后的操作(如查询数据、刷新图表)
变量 用于在查询之间传递参数(如筛选器选中的浏览器名称)

4.3 核心流程

  1. 页面加载或用户选择浏览器 → 触发两个SQL请求:
  2. 维度数据SQL:查询性别、年龄、学历、职业、收入、居住地类型、省份分布。
  3. 核心指标SQL:查询总用户数、平均年龄、本科及以上占比、中高收入占比。
  4. 浏览器筛选器 → 将选中的浏览器值传递给两个SQL请求节点。
  5. 维度数据分发:通过一个并行数据处理节点,按 dimension_type 分发到各个图表。
  6. 核心指标分发:通过另一个并行数据处理节点,将单行多列的指标数据拆分为四个独立数值,分别发送给四个指标卡。
  7. 各图表组件接收数据并展示。

4.4 各节点职责

节点 职责
页面加载 大屏打开时自动触发一次数据加载
浏览器筛选器 用户选择浏览器后,触发数据刷新,并将选中的浏览器值传递给下游
浏览器参数接收 并行数据处理节点,接收筛选器参数,存储到全局变量
维度数据SQL请求 一次性查询所有维度数据(性别、年龄、学历、职业、收入、居住地类型、省份),输出格式 (dimension_type, name, value)
核心指标SQL请求 查询四个核心指标(总用户数、平均年龄、本科及以上占比、中高收入占比),输出单行多列格式
维度数据分发 并行数据处理节点,按 dimension_type 过滤,格式化后分发给7个图表
核心指标分发 并行数据处理节点,将单行多列数据拆分为四个独立数值,分发给四个指标卡
各图表组件 接收数据并渲染

4.5 本实验范围说明

本次实验只做全国范围的数据展示,包括:

  • 全国省份地图(各省份用户数分布)
  • 全国核心指标(总用户数、平均年龄、本科及以上占比、中高收入占比)
  • 全国各维度分布(性别、年龄、学历、职业、收入、居住地类型)

点击省份查看该省份核心指标数据将在下一实验中完成。

4.6 完整蓝图连接示意图

​编辑

++image1363×543 54.2 KB++

助睿Max蓝图编辑器亮点:通过拖拽节点、连线即可完成复杂的交互逻辑,无需编写复杂代码。并行数据处理节点支持一个数据源同时分发到多个图表,实现高效的数据复用。

节点连线说明:

起点节点 终点节点 连线含义
页面加载(页面初始化完成) 浏览器参数接收(输入) 大屏打开时触发参数初始化
浏览器筛选器(下拉框内容被选中) 浏览器参数接收(输入) 用户选择浏览器后触发
浏览器参数接收(输出) 维度数据SQL请求(执行SQL) 传递浏览器参数
浏览器参数接收(输出) 核心指标SQL请求(执行SQL) 传递浏览器参数
维度数据SQL请求(执行成功) 维度数据分发(输入) 将维度数据传给分发节点
核心指标SQL请求(执行成功) 核心指标分发(输入) 将核心指标数据传给分发节点
维度数据分发(分支1-7) 各维度图表(导入数据接口) 性别、年龄、学历等数据
核心指标分发(分支1-4) 四个指标卡(导入数据接口) 总用户数、平均年龄等

5 实验步骤

5.1 前置准备:添加年龄字段

在用户画像大屏中,我们需要展示平均年龄这一核心指标。原有的 user_profile_stats 表中只有年龄段(age_group)字段,没有精确年龄。如果使用年龄段中值估算平均年龄(如 26-35 岁取 30.5 岁),会存在一定误差。

为了更准确地计算平均年龄,我们需要在 user_profile_stats 表中增加一个 age 字段。

修改目标表:

在团队私有数据库中执行以下SQL:

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 '用户数'

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户画像统计表';

修改转换流,在分组聚合中保留 age 字段:

打开"用户画像表加工"转换流,做以下修改:

① 修改排序记录组件,增加 age 字段的升序排序

② 修改分组组件,分组字段更加 age

③ 执行转换流

5.2 组件导出到蓝图编辑器

上周的实验【浏览器市场分析-大屏数据接入】已经介绍了如何连接数据源,本实验不再教学。

只有当组件导入到蓝图编辑器后,才可以为该组件配置交互。

打开上一实验制作的"用户画像"数据大屏,在画布编辑器内,右键单击左侧图层栏或中间画布区的组件,选择导出到蓝图编辑器,即可将对应组件导出到蓝图编辑器中。

将以下组件依次导出到蓝图编辑器:

  • 浏览器筛选器(下拉多选)
  • 性别分布饼图
  • 年龄段分布柱状图
  • 学历分布条形图
  • 职业分布柱状图
  • 收入分布柱状图
  • 居住地类型饼图
  • 用户省份分布地图
  • 省份排行榜(轮播列表)
  • 核心指标卡(总用户数、平均年龄、中高收入占比)

导出成功后,单击"蓝图编辑器"图标切换到蓝图编辑器 页面,可在导入节点列表中查看对应的节点。列表内所有节点都可供后续配置交互使用。

5.3 添加浏览器参数接收节点(并行数据处理)

大屏上的浏览器筛选器让用户可以选择某个具体的浏览器。当用户切换选择时,地图、饼图、柱状图等所有图表的数据都需要跟着变。

怎么实现这种联动呢?筛选器本身只能输出"我选中了哪个值",它不知道接下来要干什么。所以需要一个中间节点来做两件事:记住用户选中的浏览器,然后告诉SQL请求去查新数据。

这个节点就是"浏览器参数接收",它用"并行数据处理"组件来实现。

双击节点,添加两个处理方法:

方法一(页面加载时执行一次,设置基础URL)

const BASE_URL = 'https://lab.guilian.cn';

window.GLOBAL_BASE_URL = BASE_URL;

return data;

这个方法主要是为后续可能用到的外部API预留一个基础地址,本实验用不上,但保留结构。

方法二(每次筛选器变化时执行,接收浏览器参数)

const SELECTED_BROWSER = data.value;

window.GLOBAL_SELECTED_BROWSER = SELECTED_BROWSER;

return { value: SELECTED_BROWSER };

这个方法把用户选中的浏览器存到 window.GLOBAL_SELECTED_BROWSER 这个全局变量里。后面的SQL请求节点只要读取这个变量,就知道该查哪个浏览器的数据了。

连好线之后,整个流程是这样的:

  • 大屏打开 → 页面加载触发 → 节点初始化
  • 用户切换浏览器 → 筛选器输出新值 → 节点更新全局变量 → SQL重新执行 → 所有图表刷新

其中,浏览器的选项我们可以直接使用静态数据(因为个数不多):title为前端显示内容,value为实际查询内容,即数据库中存储的对应 browser_name,如:

{

"title": "IE浏览器",

"value": "IE浏览器"

}

我们需要填写6个浏览器的对应内容,并刷新数据,同时,输入框中默认选中设置为"IE浏览器"

​编辑

这样,一个筛选器就同时控制了所有图表。

5.4 添加SQL请求节点(一次除指标外所有维度数据)

这个节点负责查询性别、年龄、学历、职业、收入、居住地类型、省份等维度数据,使用 UNION ALL 合并,输出格式为 (dimension_type, name, value)。

添加"SQL请求"节点,重命名为"维度数据SQL请求",查询SQL如下:

// 从全局变量获取选中的浏览器值

const selectedBrowser = window.GLOBAL_SELECTED_BROWSER;

let sql = `

-- 性别分布

select

'gender' as dimension_type,

gender as name,

sum(user_count) as value

from labs.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 labs.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 labs.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 labs.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 labs.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 labs.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 labs.user_profile_stats

where browser_name = '${selectedBrowser}'

group by province

`;

return sql

这个 SQL 用了 UNION ALL 把所有属性维度的数据一次性查出来,每条记录都带一个 dimension_type 字段来标记它属于哪个维度。这样一次查询就能拿到所有图表需要的数据,不用每个图表单独发请求。

由于筛选器只能选单个浏览器,SQL 中直接用 where browser_name = '${selectedBrowser}' 即可,不需要处理"全部浏览器"的情况。

5.5 添加核心指标SQL请求节点(单独查询四个指标)

这个节点只查询四个核心指标,输出单行多列格式(一行包含四个字段),不需要 UNION ALL,取值更简单。

添加"SQL请求"节点,重命名为"核心指标SQL请求",查询SQL如下:

// 从全局变量获取选中的浏览器值

const selectedBrowser = window.GLOBAL_SELECTED_BROWSER;

let sql = `

-- 核心指标(总用户数、平均年龄、本科及以上占比、中高收入占比)

select

'total_users' as name,

sum(user_count) as value

from labs.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 labs.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 labs.user_profile_stats

where browser_name = '${selectedBrowser}'

union all

select

'high_income_ratio' as name,

round(sum(case when income in ('5001~8000元', '8001~12000元','12000元以上') then user_count else 0 end) * 100.0 / sum(user_count), 1) as value

from labs.user_profile_stats

where browser_name = '${selectedBrowser}'

`;

return sql

5.6 添加维度数据分发节点(并行数据处理)

上一步SQL查出来的是一张包含所有维度数据的大表,但每个图表只需要其中一部分:性别饼图只看 dimension_type='gender' 的数据,年龄柱状图只看 dimension_type='age' 的数据,以此类推。

所以需要一个分发节点,把数据按 dimension_type 拆开,分别送给对应的图表。这个节点也用"并行数据处理"来实现。

添加"并行数据处理"节点,重命名为"数据分发"。将SQL请求节点的"执行成功"连接到该节点。

双击节点,为每个图表添加一个处理方法:

分支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(match1) : 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

这里需要注意,轮播列表的映射字段是通过"数据系列"中的系列1、系列2来决定的

/ 过滤出省份数据

var filtered = data.filter(item => item.dimension_type === 'province');

// 按用户数降序排序

filtered.sort((a, b) => b.value - a.value);

// 取前5条

var top5 = filtered.slice(0, 5);

// 直接返回组件需要的字段名

return top5.map(item => ({

province: item.name,

user_count: item.value

}));

以上的输出结果不正确的话,可以在最终输出结果的节点的处理方法代码中添加以下代码,查看返回的数据:

// console.log("返回的数据",data)

5.7 添加核心指标分发节点(并行数据处理)

添加另一个"并行数据处理"节点,重命名为"核心指标分发"。将"核心指标SQL请求"节点的"执行成功"连接到该节点。

SQL 返回的是四行数据,而四个指标卡每个只需要一个数值。通过"并行数据处理"节点,我们按 name 字段过滤,将每个指标单独输出给对应的指标卡。

分支示例(总用户数):

var item = data.find(item => item.name === 'total_users');

return { value: item ? item.value : 0 };

其他分支类似,只需修改 item.name === 'total_users'的条件即可

5.8 连接节点

按照4.6节的蓝图连接示意图,依次连接所有节点:

  1. 页面加载 → 浏览器参数接收(输入)
  2. 浏览器筛选器 → 浏览器参数接收(输入)
  3. 浏览器筛选器 → 维度数据SQL请求(执行SQL)
  4. 浏览器筛选器 → 核心指标SQL请求(执行SQL)
  5. 维度数据SQL请求(执行成功) → 维度数据分发(输入)
  6. 核心指标SQL请求(执行成功) → 核心指标分发(输入)
  7. 维度数据分发(分支1-8) → 各维度图表组件(导入数据接口)
  8. 核心指标分发(分支1-4) → 四个核心指标卡(导入数据接口)

​编辑

++1912×966 142 KB++

5.9 保存与预览

点击蓝图编辑器右上角的"保存"按钮,然后返回大屏,点击"预览"。

测试功能:

  1. 大屏打开时,默认显示第一个浏览器的用户画像数据(如下拉框默认选中的浏览器)
  2. 选择其他浏览器,所有图表应刷新为新浏览器的数据
  3. 观察地图、饼图、柱状图是否都随筛选器变化

​编辑

++1920×1080 372 KB++

1 实验目的

本实验基于上一实验《浏览器用户画像分析-大屏静态布局制作》完成的大屏布局,使用助睿Max的蓝图编辑器,将之前实验加工好的用户画像数据表接入到大屏的各个图表组件中,并配置筛选器实现多浏览器联动。

通过本实验,学生应掌握:

  • 理解蓝图编辑器的基本概念(数据源、触发器、动作、并行数据处理)
  • 使用并行数据处理节点接收筛选器参数并分发给多个SQL请求节点
  • 为不同图表组件编写带参数的SQL查询语句
  • 配置筛选器与图表的联动交互

2 实验环境

本次实验使用助睿数智(Uniplore)作为一站式数据科学平台。该平台覆盖从数据接入、ETL处理、机器学习建模到可视化展示的全链路零代码功能,适用于数据分析教学与企业数据加工场景。

助睿数智官网为 https://www.uniplore.com//

  • 可视化工具:助睿Max(数据大屏)

助睿Max 是低代码数据可视化平台,支持零代码拖拽搭建、多种图表组件、地图可视化、交互筛选等能力,适用于业务监控、用户洞察、营销战报等场景。

助睿Max核心优势:

  • 组件丰富:覆盖所有常见图表和交互控件,满足企业级可视化需求
  • 图层管理:支持图层堆叠、锁定、隐藏、排序,复杂布局轻松实现
  • 低代码操作:拖拽式搭建 + 蓝图编辑器,无需复杂编程即可完成大屏布局与数据交互配置
  • 工业级数据处理能力:支持海量数据实时接入与渲染,千万级数据点秒级响应,满足企业级生产环境要求
  • 支持数字孪生:支持3D场景、GIS地图、实时物联数据接入,可快速构建数字孪生可视化系统
  • 数据来源:团队私有数据库(MySQL)

本实验将重点使用蓝图编辑器完成数据接入与筛选器联动配置。

3 实验数据

本实验使用上一阶段加工完成的 user_profile_stats 表,该表结构如下:

字段 类型 说明
browser_name VARCHAR(50) 浏览器名称
gender VARCHAR(10) 性别
age_group VARCHAR(10) 年龄段
edu VARCHAR(50) 学历
job VARCHAR(50) 职业
income VARCHAR(50) 收入
city_type VARCHAR(10) 居住地类型
province VARCHAR(50) 省份
user_count INT 用户数

4 整体蓝图逻辑说明

4.1 什么是蓝图编辑器?

蓝图编辑器是助睿Max中用于配置数据流和交互逻辑的可视化编程工具。它采用"节点-连线"的方式,帮助您自由管理可视化应用中多个组件之间的交互关系。

蓝图编辑器的优势:

  • 蓝图编辑器可以保证交互和数据的实时性和同步性。
  • 蓝图编辑器支持数据请求合并和数据分发的功能。
  • 蓝图编辑器可模块化拆分,只需要专注于业务规则和交互需求即可。

4.2 核心概念

概念 说明
数据源 数据库连接配置,定义数据从哪里来
查询 SQL语句,定义取什么数据
触发器 触发数据加载的事件(如页面加载、组件点击、定时刷新等)
动作 触发器执行后的操作(如查询数据、刷新图表)
变量 用于在查询之间传递参数(如筛选器选中的浏览器名称)

4.3 核心流程

  1. 页面加载或用户选择浏览器 → 触发两个SQL请求:
  2. 维度数据SQL:查询性别、年龄、学历、职业、收入、居住地类型、省份分布。
  3. 核心指标SQL:查询总用户数、平均年龄、本科及以上占比、中高收入占比。
  4. 浏览器筛选器 → 将选中的浏览器值传递给两个SQL请求节点。
  5. 维度数据分发:通过一个并行数据处理节点,按 dimension_type 分发到各个图表。
  6. 核心指标分发:通过另一个并行数据处理节点,将单行多列的指标数据拆分为四个独立数值,分别发送给四个指标卡。
  7. 各图表组件接收数据并展示。

4.4 各节点职责

节点 职责
页面加载 大屏打开时自动触发一次数据加载
浏览器筛选器 用户选择浏览器后,触发数据刷新,并将选中的浏览器值传递给下游
浏览器参数接收 并行数据处理节点,接收筛选器参数,存储到全局变量
维度数据SQL请求 一次性查询所有维度数据(性别、年龄、学历、职业、收入、居住地类型、省份),输出格式 (dimension_type, name, value)
核心指标SQL请求 查询四个核心指标(总用户数、平均年龄、本科及以上占比、中高收入占比),输出单行多列格式
维度数据分发 并行数据处理节点,按 dimension_type 过滤,格式化后分发给7个图表
核心指标分发 并行数据处理节点,将单行多列数据拆分为四个独立数值,分发给四个指标卡
各图表组件 接收数据并渲染

4.5 本实验范围说明

本次实验只做全国范围的数据展示,包括:

  • 全国省份地图(各省份用户数分布)
  • 全国核心指标(总用户数、平均年龄、本科及以上占比、中高收入占比)
  • 全国各维度分布(性别、年龄、学历、职业、收入、居住地类型)

点击省份查看该省份核心指标数据将在下一实验中完成。

4.6 完整蓝图连接示意图

​编辑

++image1363×543 54.2 KB++

助睿Max蓝图编辑器亮点:通过拖拽节点、连线即可完成复杂的交互逻辑,无需编写复杂代码。并行数据处理节点支持一个数据源同时分发到多个图表,实现高效的数据复用。

节点连线说明:

起点节点 终点节点 连线含义
页面加载(页面初始化完成) 浏览器参数接收(输入) 大屏打开时触发参数初始化
浏览器筛选器(下拉框内容被选中) 浏览器参数接收(输入) 用户选择浏览器后触发
浏览器参数接收(输出) 维度数据SQL请求(执行SQL) 传递浏览器参数
浏览器参数接收(输出) 核心指标SQL请求(执行SQL) 传递浏览器参数
维度数据SQL请求(执行成功) 维度数据分发(输入) 将维度数据传给分发节点
核心指标SQL请求(执行成功) 核心指标分发(输入) 将核心指标数据传给分发节点
维度数据分发(分支1-7) 各维度图表(导入数据接口) 性别、年龄、学历等数据
核心指标分发(分支1-4) 四个指标卡(导入数据接口) 总用户数、平均年龄等

5 实验步骤

5.1 前置准备:添加年龄字段

在用户画像大屏中,我们需要展示平均年龄这一核心指标。原有的 user_profile_stats 表中只有年龄段(age_group)字段,没有精确年龄。如果使用年龄段中值估算平均年龄(如 26-35 岁取 30.5 岁),会存在一定误差。

为了更准确地计算平均年龄,我们需要在 user_profile_stats 表中增加一个 age 字段。

修改目标表:

在团队私有数据库中执行以下SQL:

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 '用户数'

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户画像统计表';

修改转换流,在分组聚合中保留 age 字段:

打开"用户画像表加工"转换流,做以下修改:

① 修改排序记录组件,增加 age 字段的升序排序

② 修改分组组件,分组字段更加 age

③ 执行转换流

5.2 组件导出到蓝图编辑器

上周的实验【浏览器市场分析-大屏数据接入】已经介绍了如何连接数据源,本实验不再教学。

只有当组件导入到蓝图编辑器后,才可以为该组件配置交互。

打开上一实验制作的"用户画像"数据大屏,在画布编辑器内,右键单击左侧图层栏或中间画布区的组件,选择导出到蓝图编辑器,即可将对应组件导出到蓝图编辑器中。

将以下组件依次导出到蓝图编辑器:

  • 浏览器筛选器(下拉多选)
  • 性别分布饼图
  • 年龄段分布柱状图
  • 学历分布条形图
  • 职业分布柱状图
  • 收入分布柱状图
  • 居住地类型饼图
  • 用户省份分布地图
  • 省份排行榜(轮播列表)
  • 核心指标卡(总用户数、平均年龄、中高收入占比)

导出成功后,单击"蓝图编辑器"图标切换到蓝图编辑器 页面,可在导入节点列表中查看对应的节点。列表内所有节点都可供后续配置交互使用。

​编辑

++1920×945 122 KB++

5.3 添加浏览器参数接收节点(并行数据处理)

大屏上的浏览器筛选器让用户可以选择某个具体的浏览器。当用户切换选择时,地图、饼图、柱状图等所有图表的数据都需要跟着变。

怎么实现这种联动呢?筛选器本身只能输出"我选中了哪个值",它不知道接下来要干什么。所以需要一个中间节点来做两件事:记住用户选中的浏览器,然后告诉SQL请求去查新数据。

这个节点就是"浏览器参数接收",它用"并行数据处理"组件来实现。

双击节点,添加两个处理方法:

方法一(页面加载时执行一次,设置基础URL)

const BASE_URL = 'https://lab.guilian.cn';

window.GLOBAL_BASE_URL = BASE_URL;

return data;

这个方法主要是为后续可能用到的外部API预留一个基础地址,本实验用不上,但保留结构。

方法二(每次筛选器变化时执行,接收浏览器参数)

const SELECTED_BROWSER = data.value;

window.GLOBAL_SELECTED_BROWSER = SELECTED_BROWSER;

return { value: SELECTED_BROWSER };

这个方法把用户选中的浏览器存到 window.GLOBAL_SELECTED_BROWSER 这个全局变量里。后面的SQL请求节点只要读取这个变量,就知道该查哪个浏览器的数据了。

连好线之后,整个流程是这样的:

  • 大屏打开 → 页面加载触发 → 节点初始化
  • 用户切换浏览器 → 筛选器输出新值 → 节点更新全局变量 → SQL重新执行 → 所有图表刷新

其中,浏览器的选项我们可以直接使用静态数据(因为个数不多):title为前端显示内容,value为实际查询内容,即数据库中存储的对应 browser_name,如:

{

"title": "IE浏览器",

"value": "IE浏览器"

}

我们需要填写6个浏览器的对应内容,并刷新数据,同时,输入框中默认选中设置为"IE浏览器"

​编辑

++324×449 6.35 KB++

​编辑

++325×487 9.05 KB++

这样,一个筛选器就同时控制了所有图表。

​编辑

++1920×945 128 KB++

5.4 添加SQL请求节点(一次除指标外所有维度数据)

这个节点负责查询性别、年龄、学历、职业、收入、居住地类型、省份等维度数据,使用 UNION ALL 合并,输出格式为 (dimension_type, name, value)。

添加"SQL请求"节点,重命名为"维度数据SQL请求",查询SQL如下:

// 从全局变量获取选中的浏览器值

const selectedBrowser = window.GLOBAL_SELECTED_BROWSER;

let sql = `

-- 性别分布

select

'gender' as dimension_type,

gender as name,

sum(user_count) as value

from labs.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 labs.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 labs.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 labs.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 labs.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 labs.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 labs.user_profile_stats

where browser_name = '${selectedBrowser}'

group by province

`;

return sql

这个 SQL 用了 UNION ALL 把所有属性维度的数据一次性查出来,每条记录都带一个 dimension_type 字段来标记它属于哪个维度。这样一次查询就能拿到所有图表需要的数据,不用每个图表单独发请求。

由于筛选器只能选单个浏览器,SQL 中直接用 where browser_name = '${selectedBrowser}' 即可,不需要处理"全部浏览器"的情况。

​编辑

++318×434 9.14 KB++

5.5 添加核心指标SQL请求节点(单独查询四个指标)

这个节点只查询四个核心指标,输出单行多列格式(一行包含四个字段),不需要 UNION ALL,取值更简单。

添加"SQL请求"节点,重命名为"核心指标SQL请求",查询SQL如下:

// 从全局变量获取选中的浏览器值

const selectedBrowser = window.GLOBAL_SELECTED_BROWSER;

let sql = `

-- 核心指标(总用户数、平均年龄、本科及以上占比、中高收入占比)

select

'total_users' as name,

sum(user_count) as value

from labs.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 labs.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 labs.user_profile_stats

where browser_name = '${selectedBrowser}'

union all

select

'high_income_ratio' as name,

round(sum(case when income in ('5001~8000元', '8001~12000元','12000元以上') then user_count else 0 end) * 100.0 / sum(user_count), 1) as value

from labs.user_profile_stats

where browser_name = '${selectedBrowser}'

`;

return sql

5.6 添加维度数据分发节点(并行数据处理)

上一步SQL查出来的是一张包含所有维度数据的大表,但每个图表只需要其中一部分:性别饼图只看 dimension_type='gender' 的数据,年龄柱状图只看 dimension_type='age' 的数据,以此类推。

所以需要一个分发节点,把数据按 dimension_type 拆开,分别送给对应的图表。这个节点也用"并行数据处理"来实现。

添加"并行数据处理"节点,重命名为"数据分发"。将SQL请求节点的"执行成功"连接到该节点。

双击节点,为每个图表添加一个处理方法:

分支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(match1) : 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

这里需要注意,轮播列表的映射字段是通过"数据系列"中的系列1、系列2来决定的

/ 过滤出省份数据

var filtered = data.filter(item => item.dimension_type === 'province');

// 按用户数降序排序

filtered.sort((a, b) => b.value - a.value);

// 取前5条

var top5 = filtered.slice(0, 5);

// 直接返回组件需要的字段名

return top5.map(item => ({

province: item.name,

user_count: item.value

}));

以上的输出结果不正确的话,可以在最终输出结果的节点的处理方法代码中添加以下代码,查看返回的数据:

// console.log("返回的数据",data)

5.7 添加核心指标分发节点(并行数据处理)

添加另一个"并行数据处理"节点,重命名为"核心指标分发"。将"核心指标SQL请求"节点的"执行成功"连接到该节点。

SQL 返回的是四行数据,而四个指标卡每个只需要一个数值。通过"并行数据处理"节点,我们按 name 字段过滤,将每个指标单独输出给对应的指标卡。

分支示例(总用户数):

var item = data.find(item => item.name === 'total_users');

return { value: item ? item.value : 0 };

其他分支类似,只需修改 item.name === 'total_users'的条件即可

5.8 连接节点

按照4.6节的蓝图连接示意图,依次连接所有节点:

  1. 页面加载 → 浏览器参数接收(输入)
  2. 浏览器筛选器 → 浏览器参数接收(输入)
  3. 浏览器筛选器 → 维度数据SQL请求(执行SQL)
  4. 浏览器筛选器 → 核心指标SQL请求(执行SQL)
  5. 维度数据SQL请求(执行成功) → 维度数据分发(输入)
  6. 核心指标SQL请求(执行成功) → 核心指标分发(输入)
  7. 维度数据分发(分支1-8) → 各维度图表组件(导入数据接口)
  8. 核心指标分发(分支1-4) → 四个核心指标卡(导入数据接口)

​编辑

++1912×966 142 KB++

5.9 保存与预览

点击蓝图编辑器右上角的"保存"按钮,然后返回大屏,点击"预览"。

测试功能:

  1. 大屏打开时,默认显示第一个浏览器的用户画像数据(如下拉框默认选中的浏览器)
  2. 选择其他浏览器,所有图表应刷新为新浏览器的数据
  3. 观察地图、饼图、柱状图是否都随筛选器变化

​编辑

6.3

1 实验目的

本实验基于前两个实验完成的市场分析大屏和用户画像大屏,使用助睿Max的蓝图编辑器,配置两个大屏之间的切换交互,以及地图省份点击联动指标卡的功能。

通过本实验,学生应掌握:

  1. 使用图层可见性控制实现大屏内容切换
  2. 使用按钮组件配置页面跳转或内容显示/隐藏
  3. 使用地图组件的交互事件,实现省份下钻联动
  4. 配置指标卡组件根据地图点击动态更新数据

2 实验环境

实验平台:助睿在线实验平台 https://lab.guilian.cn/

可视化工具:助睿Max(数据大屏)

数据来源:团队私有数据库(MySQL)

3 整体交互逻辑说明

3.1 大屏切换逻辑

市场分析和用户画像两个大屏实际上是在同一个大屏文件中,通过控制图层的可见性来实现切换。

实现原理:通过 tab列表组件实现。将市场分析的所有组件放入"市场分析组",用户画像的所有组件放入"用户画像组"。tab列表组件设置2列("市场分析"和"用户画像"),每列设置不同的ID(如 "id": 1 和 "id": 2),背景设为透明以融合导航栏样式。点击某列时,根据ID控制两个组的可见性:显示对应组,隐藏另一组。

助睿Max图层管理优势:通过"图层"面板可以轻松控制组件的显示/隐藏,无需编写代码。配合蓝图编辑器,可以实现按钮与图层可见性的联动。

3.2 地图省份点击联动逻辑

在用户画像大屏中,点击地图上的某个省份时,右侧的四个核心指标卡(总用户数、平均年龄、本科及以上占比、中高收入占比)需要更新为该省份的数据。

用户点击省份 → 地图组件触发"点击区域"事件 → 蓝图接收省份名称 → SQL请求查询该省份的核心指标 → 指标卡刷新数据

4 整体蓝图逻辑说明

4.1 什么是蓝图编辑器?

蓝图编辑器是助睿Max中用于配置数据流和交互逻辑的可视化编程工具。它采用"节点-连线"的方式,帮助您自由管理可视化应用中多个组件之间的交互关系。

蓝图编辑器的优势:

  1. 蓝图编辑器可以保证交互和数据的实时性和同步性。
  2. 蓝图编辑器支持数据请求合并和数据分发的功能。
  3. 蓝图编辑器可模块化拆分,专注单个的交互链路,不需要考虑代码的整理和规范,只需要专注于业务规则和交互需求即可。

4.2 核心概念

4.3 核心流程(大屏切换)

  1. 用户点击tab列表中的"市场分析"列 → 触发点击事件,输出ID 1
  2. 蓝图接收ID → 设置"市场分析组"可见,设置"用户画像组"隐藏
  3. 用户点击tab列表中的"用户画像"列 → 触发点击事件,输出ID 2
  4. 蓝图接收ID → 设置"市场分析组"隐藏,设置"用户画像组"可见

4.4 核心流程(地图点击联动)

  1. 用户点击地图上的省份区域 → 触发"点击区域"事件
  2. 地图组件 → 输出被点击的省份名称
  3. 省份参数接收节点 → 接收省份名称,存储到全局变量
  4. 省份核心指标查询节点 → 读取省份名称和当前浏览器,查询该省份的核心指标
  5. 省份核心指标分发节点 → 将查询结果拆分为4个独立数值
  6. 四个核心指标卡 → 接收新数据并刷新显示

4.5 各节点职责

4.5 完整蓝图连接示意图

助睿Max蓝图编辑器亮点:通过拖拽节点、连线即可完成复杂的交互逻辑,无需编写复杂代码。并行数据处理节点支持一个数据源同时分发到多个图表,实现高效的数据复用。

5 实验步骤

5.1 配置大屏切换

实现原理:

Tab列表组件是一个可自定义选项的交互组件。助睿Max的Tab列表组件内置了丰富的样式自定义选项(背景色、字体、选中态颜色等),无需额外CSS即可实现美观的导航栏。Tab列表组件点击时会触发"当Tab点击时"事件,并输出被点击项的ID。通过分支判断节点判断ID,然后分别执行"设置图层可见性"动作,即可实现两组内容的切换。

本实验将Tab列表组件设置为2列,与两个导航按钮的大小、位置重合,分别代表"市场分析"和"用户画像"。通过为每列设置唯一的ID,点击时即可区分用户的选择,从而实现不同内容的切换。

操作步骤:

  1. 添加Tab列表组件,调整大小、位置,两个导航按钮重合
  1. Tab列表组件的基本设置中,设置行数为1,列数为2,再标签默认配置中,将"背景颜色"、"选中背景色"、"悬浮背景色"的透明度设置为0,这样就看不见Tab列表组件,给用户的感觉就是只有2个按钮

(3)设置Tab列表组件每个选项的id:在数据中,保留2列数据,id分别为1、2,content为空,设置后记得刷新数据

(4)将"市场分析"组、"用户画像"组、Tab列表组件导出到蓝图编辑器

(5)在蓝图编辑器中,将"市场分析"组、"用户画像"组、Tab列表组件添加到蓝图编辑器画布中,通过"分支判断"节点来做"当Tab点击时"的id判断,处理刚发为:

return data.id == 1;

(6)在"分支判断"的 满足 分支上,添加两个"设置图层可见性"动作:

目标图层:市场分析组 → 显示

目标图层:用户画像组 → 隐藏

(7)在"判断选项卡"的 不满足 分支上,添加两个"设置图层可见性"动作:

目标图层:市场分析组 → 隐藏

目标图层:用户画像组 → 显示

5.2 配置地图省份点击联动

5.2.1 设计思路与原理

在用户画像大屏中,我们希望通过点击地图上的任意省份,右侧的核心指标卡(总用户数、平均年龄、本科及以上占比、中高收入占比)能立即切换为该省份的数据。这是一种典型的地理下钻分析,也是数据大屏的核心交互之一。

助睿Max 的蓝图编辑器让这种交互无需编写后端代码,只需通过"事件-动作"的连线即可实现。整个数据流如下:

地图点击(事件) → 提取省份名称(并行数据处理) → 动态SQL查询(SQL请求) → 数据分发(并行数据处理) → 四个指标卡刷新

核心知识点:

  1. 事件驱动:地图组件的"点击区域时"事件是起点,它会输出被点击区域的地理信息(如省份名称),前提是需要开启组件的交互事件。
  2. 变量传递:通过 window.globalProvinceName 全局变量,可以将省份名称在不同节点间共享,避免重复连线。
  3. 动态SQL:SQL请求节点可以接收外部变量,实现"根据用户点击的省份查询不同数据"。
  4. 并行数据处理:将一次查询返回的多行数据(每个指标一行)拆分、过滤,分别发送给不同的目标组件。

5.2.2 核心组件配置

(1)提取地区名称(并行数据处理)

地图组件点击后返回的省份名称是全称(如"江苏省"、"广西壮族自治区"),但我们的数据表中存储的是简称("江苏"、"广西")。因此需要先做一个名称映射。

作用:接收地图点击事件输出的 data 对象,从中提取 name 字段,并通过映射表转换为数据表中的简称,最后存入全局变量 window.globalProvinceName。

代码(已提供完整映射表,支持省、自治区、直辖市、特别行政区):

// 省份特殊映射(直辖市、自治区、特别行政区)

const specialMap = {

'北京市': '北京', '天津市': '天津', '上海市': '上海', '重庆市': '重庆',

'广西壮族自治区': '广西', '内蒙古自治区': '内蒙古', '西藏自治区': '西藏',

'宁夏回族自治区': '宁夏', '新疆维吾尔自治区': '新疆',

'香港特别行政区': '香港', '澳门特别行政区': '澳门'

};

let provinceName = data.name;

// 优先使用特殊映射

if (specialMapprovinceName) {

provinceName = specialMapprovinceName;

} else {

// 通用处理:去除末尾的"省"、"自治区"、"市"

provinceName = provinceName.replace(/(省|自治区|市)$/, '');

}

window.globalProvinceName = provinceName;

return provinceName;

(2)省份核心指标查询(SQL请求节点)

根据当前选中的浏览器(window.GLOBAL_SELECTED_BROWSER)和点击的省份(window.globalProvinceName),从 user_profile_stats 表中查询四个核心指标。为了便于后续分发,使用 UNION ALL 将四个指标输出为多行,每行包含 name(指标名)和 value(数值)。

SQL 如下:

const selectedProvince = window.globalProvinceName;

console.log("点击的省份名称(处理后):", selectedProvince);

const selectedBrowser = window.GLOBAL_SELECTED_BROWSER;

const sql = `

select 'total_users' as name, sum(user_count) as value

from labs.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 labs.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 labs.user_profile_stats

where browser_name = '{selectedBrowser}' and province = '{selectedProvince}'

union all

select 'high_income_ratio' as name,

round(sum(case when income in ('5001~8000元', '8001~12000元','12000元以上') then user_count else 0 end) * 100.0 / sum(user_count), 2) as value

from labs.user_profile_stats

where browser_name = '{selectedBrowser}' and province = '{selectedProvince}'

`;

console.log("生成的省份核心指标SQL:", sql);

return sql;

(3)省份核心指标分发(并行数据处理)

SQL 返回的是四行数据,而四个指标卡每个只需要一个数值。通过"并行数据处理"节点,我们按 name 字段过滤,将每个指标单独输出给对应的指标卡。

分支示例(总用户数):

var item = data.find(item => item.name === 'total_users');

return { value: item ? item.value : 0 };

其他分支类似,只需修改 item.name === 'total_users'的条件即可

5.2.3 蓝图连线与数据流

  1. 区域热力层的"点击区域时"事件 → 连接到 "提取地区名称" 节点。
  2. "提取地区名称" 的"执行成功"输出 → 连接到 "省份核心指标查询" 节点的"执行SQL"输入。
  3. "省份核心指标查询" 的"执行成功"输出 → 连接到 "省份核心指标分发" 节点的输入。
  4. "省份核心指标分发" 的四个输出分支 → 分别连接到四个核心指标卡的"导入数据接口"。

5.3 地图热力层根据用户数渲染颜色

5.3.1 设计思路与原理

为了直观展示全国各省份的用户分布,我们需要在地图上用颜色深浅来表示每个省份的用户数(用户数越多,颜色越深)。这是数据大屏中常见的热力图效果。

助睿Max 的地图组件支持通过"区域热力层"子组件接收自定义数据。数据格式要求为 { name, value, area_id },其中 name 为省份名称,value 为用户数,area_id 为行政区划代码(adcode)。因此,我们需要完成以下步骤:

  1. 提取地理数据中的 adcode 和 name:地图组件内部包含全国各省份的 GeoJSON 边界数据,其中包含 adcode(行政区划代码)和标准名称。我们需要提取并建立一个"省份名称 → adcode"的映射表,存储在全局变量中。
  2. 查询所有省份的用户数:根据当前选中的浏览器,从 user_profile_stats 表中统计每个省份的用户总数。
  3. 数据映射与格式化:将查询结果中的省份名称与 adcode 映射表匹配,输出格式 { name, value, area_id }。
  4. 导入热力值数据:将格式化后的数据导入地图的"区域热力层"子组件,即可自动渲染颜色深浅。

传统开发中,实现地图热力层需要前端加载 GeoJSON、手动计算颜色映射、绑定事件等。而助睿Max 只需配置子组件的数据接口,平台自动完成渲染,极大降低了地理可视化的门槛。

5.3.2 核心组件配置

(1)提取 adcode 映射表(并行数据处理)

此节点只需执行一次,在页面加载时运行,从地图组件内置的 GeoJSON 中提取每个省份的 adcode 和标准名称,建立映射表 globalProvinceAdcode。

操作步骤:

  1. 在蓝图中添加"并行数据处理"节点,命名为"提取adcode映射表"。
  2. 将区域热力层的"当数据接口地理边界geojson数据加载完成时"事件连接到该节点(确保地图数据加载后执行)。
  3. 提取 adcode 映射表的处理方法中输入以下代码:

/**

* 提取地理数据中的 adcode 和 name,建立名称→adcode 映射

* @param {Object} data - 地理数据对象(包含 features 数组)

* @returns {Object} 名称到 adcode 的映射表

*/

function extractAdcodeAndName�data) {

if (!data || !Array.isArray�data.features)) {

console.error�'无效的地图数据格式');

return {};

}

const nameToAdcode = {};

data.features.forEach�feature => {

const props = feature.properties;

if (props && props.adcode && props.name) {

nameToAdcodeprops.name = props.adcode;

}

});

return nameToAdcode;

}

const mapping = extractAdcodeAndName�data);

window.globalProvinceAdcode = mapping;

console.log�"省份adcode映射表已加载", Object.keys�mapping).length);

return mapping;

(2)查询所有省份的用户数(SQL请求节点)

根据当前选中的浏览器(window.GLOBAL_SELECTED_BROWSER),统计每个省份的用户总数,并按用户数降序排列。

操作步骤:

  1. 添加"SQL请求"节点,命名为"各省份用户数查询"。
  2. 处理方法中输入以下代码:

const selectedBrowser = window.GLOBAL_SELECTED_BROWSER; // 当前选中的浏览器

const sql = `

SELECT

province AS name,

SUM(user_count) AS value

FROM labs.user_profile_stats

WHERE browser_name = '${selectedBrowser}'

AND province IS NOT NULL

AND province != ''

GROUP BY province

ORDER BY value DESC

`;

console.log�"生成的所有省份用户数SQL:", sql);

return sql;

(3)地图数据映射(并行数据处理节点)

将 SQL 查询结果中的省份名称与 window.globalProvinceAdcode 匹配,生成 { name, value, area_id } 格式的数据,供地图热力层使用。

操作步骤:

  1. 添加"并行数据处理"节点,重命名为"地图数据与用户数映射"。
  2. 处理方法中输入以下代码:

function convertToMapData�data) {

if (!Array.isArray�data) || data.length === 0) {

return \[\];

}

return data.map�item => {

const provinceName = item.name; // 注意:SQL 返回字段名为 name

let area_id = globalProvinceAdcodeprovinceName;

// 如果直接匹配失败,尝试简化名称(案例中已实现)

if (!area_id) {

const simplifiedName = provinceName.replace(/省|市|自治区|特别行政区|回族|壮族|维吾尔|藏族|苗族/g, '');

for (const fullName in globalProvinceAdcode) {

if (fullName.includes�simplifiedName)) {

area_id = globalProvinceAdcodefullName;

break;

}

}

}

if (!area_id) {

// console.warn(`未找到省份 "${provinceName}" 的匹配 adcode`);

area_id = "000000";

}

return {

name: provinceName,

value: parseFloat�item.value) || 0,

area_id: Number�area_id)

};

});

}

const result = convertToMapData�data);

// console.log("最终返回的地图热力数据:", result);

return result;

(4)导入地图热力层

在地图组件(基础平面地图)中,已经添加了子组件"区域热力层"。我们需要将映射后的数据导入该子组件。

操作步骤:

  1. 将"地图数据与用户数映射"节点的输出端口连接到"区域热力层"的"导入热力值数据接口"。

助睿Max的地图组件及其子组件的事件和动作非常丰富。通过"导入热力值数据接口"动态更新数据,可以实现浏览器切换时热力图自动刷新。

5.3.3 蓝图连线与数据流

完整的蓝图数据流如下(热力渲染部分独立于点击联动):

5.4 预览与发布

完成上述所有配置后,大屏应具备三个核心交互功能:

  1. 大屏切换:点击 tab 列表的"市场分析"/"用户画像",正确显示对应大屏内容。
  2. 地图热力层:地图上各省份颜色深浅反映该省份在当前浏览器下的用户数(用户数越多颜色越深)。
  3. 省份点击联动:点击地图上的省份,右侧四个核心指标卡自动更新为该省份的数据。

保存预览,对以上功能进行验证,确保三个核心交互功能均正常工作。

最后点击"发布"按钮,在弹出的发布对话框中打开发布分享开关,复制分享链接,打开浏览器,将复制的链接粘贴到地址栏中,即可在线观看

相关推荐
北极星日淘1 天前
前端 i18n 中日双语交互 + 翻译客服接口联动方案|日系海淘平台中文友好化开发实战
前端·交互
UXbot1 天前
帮助企业低门槛开展AI应用开发的平台推荐
前端·低代码·ui·交互·产品经理·原型模式·web app
蓝速科技1 天前
蓝速科技 AI 数字人部署与交互实战指南
人工智能·科技·交互
UXbot2 天前
原型设计工具如何帮助新人快速进入产品行业?
前端·低代码·ui·交互·团队开发·原型模式·web app
Resurgence_zc2 天前
openGauss 资源池化主备页面交互流程梳理
网络·交互·数据库开发
LONGZETECH2 天前
无人机仿真教学软件选型实战:5 个硬核技术维度,避开实训建设踩坑
3d·无人机·交互·cocos2d
袖手蹲3 天前
K10 百炼 AI 语音助手从网络配置到全链路语音交互的嵌入式实战
网络·人工智能·交互
Z-D-K3 天前
S-44的周末”旅行“-周日
人工智能·ai·aigc·交互·agi