乐于分享
好东西不私藏

基于ETL与蓝图编辑器的浏览器用户行为大屏可视化实践

基于ETL与蓝图编辑器的浏览器用户行为大屏可视化实践

实验目的

本实验基于用户浏览器小时明细表,完成数据大屏所需的各项统计表加工,包括:

·浏览器市场格局统计(覆盖率、使用时长)

·浏览器周活跃趋势统计

·浏览器使用频率分布统计

·用户浏览器使用数量分布统计

·浏览器工作日与周末使用对比统计

·用户画像统计(性别、年龄、学历、职业、收入、居住地类型、省份分布)

实验环境

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

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

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

·数据处理:助睿 ETL 数据集成平台

·建模平台:助睿 AI 人工智能平台

·数据规模:1000 用户,800  + 条行为记录,约 825MB

实验数据

本实验基于上个实验《浏览器用户行为分析与流失预测数据加工》产出的数据,以及原始数据 demographic用户属性表。

上个实验已输出的数据:

·daily_browser_detail:用户浏览器小时明细表(将在本实验第4.1节中输出)

·browser_coverage:浏览器市场覆盖率统计表

·browser_hourly:浏览器时段活跃统计表

整体分析框架

4.1 我们要回答什么业务问题?

在制作数据大屏之前,我们需要先明确一个问题:大屏上要展示什么?

大屏的每个图表、每个数字,都需要有对应的数据来源。我们不能在大屏上直接查询原始明细表( behavior_events),因为:

1.原始明细表数据量大,查询慢,影响大屏加载速度

2.大屏需要的是聚合后的统计结果,不是原始明细

3.多个图表可能共用同一份聚合数据,提前加工可以避免重复计算

因此,在设计大屏之前,我们首先需要明确:我们要通过数据分析回答哪些业务问题?

业务问题

为什么重要

哪个浏览器用户最多?

了解市场领导者,判断自身产品的市场地位

哪个浏览器用户用得最久?

用户数多不代表粘性高,使用时长方能反映真实依赖度

用户活跃度在增长还是下降?

判断产品生命周期,及时发现衰退信号

用户什么时候最活跃?

优化推送和运营时机,在正确时间触达用户

用户是重度使用还是偶尔打开?

区分核心用户和边缘用户,制定差异化运营策略

用户同时用几个浏览器?

了解用户忠诚度,判断是否存在被竞品替代的风险

用户还用什么其他浏览器?

识别主要竞争对手,制定针对性竞争策略

工作日和周末使用习惯有何不同?

区分工作场景和娱乐场景,优化产品功能

核心用户是谁?(性别、年龄、职业)

明确目标用户群体,指导产品设计和营销方向

用户的教育水平如何?

影响产品复杂度设计,高学历用户可能接受更复杂的功能

用户的收入水平如何?

影响商业化策略,高收入用户付费意愿更强

用户分布在哪里?(城市、省份)

指导区域市场拓展和资源投放

4.2 选择哪些分析维度来回答这些问题?

根据上述业务问题,我们可以分为2个部分:市场分析与用户画像,这2个部分可以选择以下分析维度:

大屏一:浏览器市场行为分析

维度

回答的业务问题

核心指标

市场格局

哪个浏览器用户最多?哪个用得最久?

用户数、使用时长占比、人均时长

周活跃趋势

用户活跃度在增长还是下降?

每周活跃用户数

时段偏好

用户什么时候最活跃?

24小时活跃分布

使用频率

用户是重度还是轻度使用?

//重度用户占比

浏览器使用数量

用户同时用几个浏览器?

1/2/3种及以上用户占比

竞品重叠

用户还用什么其他浏览器?

同时使用两个浏览器的用户数

工作日vs周末

工作和娱乐时使用习惯有何不同?

工作日/周末使用时长对比

大屏一:浏览器用户画像分析

维度

回答的业务问题

核心指标

性别分布

男女用户比例如何?

男性/女性用户数及占比

年龄分布

哪个年龄段的用户最多?

各年龄段用户数及占比

学历分布

用户教育水平如何?

各学历层次用户数及占比

职业分布

哪些职业的用户最多?

各职业用户数及占比

收入分布

用户收入水平如何?

各收入段用户数及占比

居住地类型分布

城市用户还是乡镇用户多?

城市/城郊/乡村用户占比

地域分布

用户分布在哪些省份?

各省份用户数

4.3 需要加工哪些目标表?

根据上述分析维度,我们反推出需要加工的目标表:

大屏一目标表:

目标表

对应维度

数据来源

browser_overview

核心指标

daily_browser_detail

browser_coverage

市场格局

daily_browser_detail

browser_weekly_active

周活跃趋势

daily_browser_detail

browser_hourly

时段偏好

daily_browser_detail

browser_frequency_stats

使用频率

daily_browser_detail

browser_multi_usage

浏览器使用数量

daily_browser_detail

browser_cooccurrence

竞品重叠

daily_browser_detail

browser_weekday_weekend

工作日vs周末

daily_browser_detail

大屏二目标表:

目标表

对应维度

数据来源

user_profile_stats

性别、年龄、学历、职业、收入、省份、居住地类型

demographicdaily_browser_detail

4.4 目标表与数据来源关系

暂时无法在飞书文档外展示此内容

各目标表加工说明

目标表

用途

加工逻辑

数据来源

browser_coverage

回答哪个浏览器用户最多?哪个用得最久?

 browser_name  分组,统计用户数、总时长、人均时长

daily_browser_detail(已在上个实验输出)

browser_hourly

回答用户什么时候最活跃?

 browser_namehour 分组,统计活跃用户数

daily_browser_detail(已在上个实验输出)

browser_weekly_active

回答用户活跃度在增长还是下降?

 browser_name  和周编号分组,统计每周活跃用户数

daily_browser_detail

browser_frequency_stats

回答用户是重度还是轻度使用?

计算每个用户的周使用时长,按阈值(轻度<3h、中度3-10h、重度>10h)划分等级,再按浏览器分组统计

daily_browser_detail

browser_multi_usage

回答用户同时用几个浏览器?

统计每个用户使用多少种不同的浏览器,按1种、2种、3种及以上分组

daily_browser_detail

browser_cooccurrence

回答用户还用什么其他浏览器?

统计每对浏览器被同一用户使用的人数

daily_browser_detail

browser_weekday_weekend

回答工作日和周末使用习惯有何不同?

按浏览器和日期类型(工作日/周末)分组,统计人均使用时长

daily_browser_detail

user_profile_stats

回答核心用户是谁?用户教育/收入水平如何?”…

按性别、年龄、学历、职业、收入、省份、居住地类型分组统计

demographicdaily_browser_detail

实验步骤

6.1 准备用户浏览器小时明细表

上个实验中的互联网用户行为日志数据清洗抽取转换流已经包含了生成明细数据的完整逻辑,但只输出了分支ABbrowser_coverage和 browser_hourly)。我们需要将其复制一份,改为输出明细表,作为本实验后续加工的基础。

6.1.1 创建用户__浏览器_小时明细表

首先,我们先在团队私有数据库中创建用于存放 用户浏览器小时 明细表的数据表

打开上个实验创建的项目互联网用户行为日志

新建转换流创建用户__浏览器_小时明细表,拖入执行一个SQL脚本组件

双击执行一个SQL脚本组件,数据库连接选择团队私有数据库,并输入以下SQL

CREATE TABLE IF NOTEXISTS `daily_browser_detail` (
`user_id` VARCHAR(50NOT NULL COMMENT '用户ID',
`usage_date` DATENOT NULL COMMENT '使用日期',
`browser_name` VARCHAR(50NOT NULL COMMENT '浏览器名称',
`hour` TINYINT NOT NULL COMMENT '小时',
`total_duration_sec` INTNOT NULL COMMENT '总使用时长()',
`active_count` INTNOT NULL COMMENT '活跃次数'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户__浏览器_小时明细表';

右键根目录,点击粘贴

粘贴后右键重命名为输出用户日浏览器小时明细表

6.1.3 浏览器名称映射

在分组组件后添加值映射组件,值映射组件连接到原分支A的分组 1组件、复制发送到原分支B的排序记录 2组件

这里需要注意:上个实验的“4.5.3 过滤记录:筛选进程为主要浏览器的数据步骤中

·如果匹配条件是process_name IN LIST “iexplore.exe;360chrome.exe;360se.exe;chrome.exe;sogouexplorer.exe;QQBrowser.exe”,则继续下一步骤

·如果匹配条件与以上不同,则删除匹配值中的EXCEL.EXEWINWORD.EXEAlilM.exe,因为这3个不是浏览器

双击表输出组件,配置如下:

·数据库连接:选择团队私有数据库

·目标表:daily_browser_detail

·勾选裁剪表,清空原有数据

·勾选指定数据库字段,建立字段映射

6.1.6 执行转换流

运行按钮,执行转换流

双击执行一个SQL脚本组件,数据库连接选择团队私有数据库,并输入以下SQL,使用DROP TABLE可以避免需要重新建表时语句报错:




-- 1. 
核心指标概览表
DROP TABLE IF EXISTS `browser_overview`;
CREATE TABLE `browser_overview` (
`metric_name` VARCHAR(50) NOT NULL COMMENT '指标名称',
`metric_value` DECIMAL(12,2) NOT NULL COMMENT '指标值'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='核心指标概览表';
-- 2. 各浏览器周活跃趋势表
DROP TABLE IF EXISTS browser_weekly_active;
CREATE TABLE `browser_weekly_active` (
`browser_name` VARCHAR(50) NOT NULL COMMENT '浏览器名称',
`week_range` VARCHAR(20) NOT NULL COMMENT '周日期范围',
`active_user_count` INT NOT NULL COMMENT '活跃用户数'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='各浏览器周活跃趋势表';
-- 3. 浏览器使用频率分布表
DROP TABLE IF EXISTS browser_frequency_stats;
CREATE TABLE `browser_frequency_stats` (
`browser_name` VARCHAR(50) NOT NULL COMMENT '浏览器名称',
`usage_level` VARCHAR(10) NOT NULL COMMENT '使用等级',
`user_count` INT NOT NULL COMMENT '用户数'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='浏览器使用频率分布表';
-- 4. 用户使用浏览器数量分布表
DROP TABLE IF EXISTS browser_multi_usage;
CREATE TABLE `browser_multi_usage` (
`browser_count` VARCHAR(10) NOT NULL COMMENT '使用浏览器数量',
`user_count` DECIMAL(5,2) NOT NULL COMMENT '用户数量'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户使用浏览器数量分布表';
-- 5. 浏览器工作日周末对比表
DROP TABLE IF EXISTS browser_weekday_weekend;
CREATE TABLE `browser_weekday_weekend` (
`browser_name` VARCHAR(50) NOT NULL COMMENT '浏览器名称',
`day_type` VARCHAR(10) NOT NULL COMMENT '工作日/周末',
`avg_duration_sec` INT NOT NULL COMMENT '人均使用时长()',
`total_duration_hour` BIGINT NOT NULL COMMENT '总使用时长(小时)',
`user_count` INT NOT NULL COMMENT '用户数'
) COMMENT '浏览器工作日周末对比表';
-- 6. 用户画像统计表
DROP TABLE IF EXISTS `user_profile_stats`;
CREATE TABLE `user_profile_stats` (
`browser_name` VARCHAR(50) NOT NULL COMMENT '浏览器名称',
`gender` VARCHAR(10) 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='用户画像统计表';

6.3 各浏览器周活跃趋势表数据抽取执行

目标:统计每个浏览器在第1-4周的每周活跃用户数

新建转换流各浏览器周活跃趋势表数据抽取,拖拽表输入组件画布中,数据库连接选择团队私有数据库,点击获取SQL查询语句,选择daily_browser_detail 获取所有查询语句

双击字段选择组件,点击元数据,右键插入,输入字段名称usage_date,类型为Date,格式为“yyyy-MM-dd”

双击值映射组件,使用的字段名选择“usage_date”,目标字段名(空=覆盖)输入“week_range”,表示创建新字段week_range用来存储映射结果,接下来就插入行,将每个日期映射为对应的周区间

排序记录组件设置为按照browser_nameweek_range 升序排序

分组字段为browser_nameweek_range,聚合时对user_id进行去重计数,得到active_user_count,因此,聚合配置中输入字段“active_user_count”subject “user_id”,类型为统计不同值的数量(N)”

6.4 各浏览器使用频率分布表数据抽取

目标:按轻//重度划分用户使用频率

新建转换流使用频率分布数据抽取,拖拽表输入组件画布中,数据库连接选择团队私有数据库,点击获取SQL查询语句,选择daily_browser_detail 获取所有查询语句

排序记录组件设置为按照 user_idbrowser_name 升序排序

分组组件的分组字段为 user_idbrowser_name,总使用时长 = 每天总使用时长 total_duration_sec 求和

增加常量组件配置中增加新字段“hour_m_s”,将其类型设置为 Integer ,并且值固定为 3600,如下

通过计算器,计算小时,新增使用时长单位为小时的字段“total_hours”,计算公式为“A / B”,字段A“total_seconds”,字段B“hour_m_s”,保留2位小数

双击JavaScript代码组件,如下以下代码,点击获取变量,自动获取代码中的变量

var total_hours = total_hours;
var usage_level = '';
if (total_hours < 3) {
usage_level = '轻度';
elseif (total_hours >= 3 && total_hours < 10) {
usage_level = '中度';
else {
usage_level = '重度';
}

接下来,我们就可以统计每个浏览器的各使用等级的用户数了

同样的,先拖入排序记录组件,将数据按照 browser_nameusage_level 升序排序

最后拖入表输出组件,将分组聚合结果入库,表输出组件配置为:

·数据库连接:选择团队私有数据库

·目标表:browser_frequency_stats

·勾选裁剪表,清空原有数据

·勾选指定数据库字段,建立字段映射

执行转换流:

接下来,我们统计每个用户使用各浏览器的种类数量,拖拽排序记录组件到画布中,创建表输入组件到排序记录组件的连线

排序后拖拽分组组件,排序记录组件连接到分组组件

接下来,我们划分浏览器数量等级。拖入JavaScript代码组件,计算器组件连接到JavaScript代码组件

<img width=”690″ height=”348″ src=”data:image/png;base64,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” style=”outline: 0px; object-fit: cover; object-position: center top; max-width: 100%; display:inline-block; aspect-ratio: 690 / 348; border-bottom-style:none; border-left-style:none; border-right-style:none; border-top-style:none; height:auto; vertical-align:middle;” ‘=”” data-base62-sha1=”8G0K8D4aXk3XPMdJM9I6kCxx3wT” role=”presentation” srcset=”https://community.uniplore.com/uploads/default/optimized/1X/3cd125b34f935566fdf474c016c0db6872ac484b_2_690x348.png, https://community.uniplore.com/uploads/default/optimized/1X/3cd125b34f935566fdf474c016c0db6872ac484b_2_1035x522.png 1.5x, https://community.uniplore.com/uploads/default/optimized/1X/3cd125b34f935566fdf474c016c0db6872ac484b_2_1380x696.png 2x” data-dominant-color=”F5F6F7″ loading=”lazy” v:shapes=”_x0000_i1076″>

双击JavaScript代码组件,如下以下代码,点击获取变量,自动获取代码中的变量

var browser_cnt = browser_cnt;
var browser_count = '';
if (browser_cnt == 1) {
browser_count = '1';
elseif (browser_cnt == 2) {
browser_count = '2';
else {
browser_count = '3种及以上';
}

再拖入分组组件,按 browser_count 分组,统计 user_countuser_id去重计数)

6.6 各浏览器工作日周末对比表数据抽取

目标:统计各浏览器工作日周末使用时长对比

新建转换流浏览器工作日周末对比数据抽取,拖拽表输入组件画布中,数据库连接选择团队私有数据库,点击获取SQL查询语句,选择daily_browser_detail 获取所有查询语句

双击JavaScript代码组件,如下以下代码,点击获取变量,自动获取代码中的变量

// 获取日期
var date = usage_date;
// 获取星期几(0=周日, 1=周一, ..., 6=周六)
var dayOfWeek = date.getDay();
// 判断工作日还是周末
var day_type = "";
if (dayOfWeek >= 1 && dayOfWeek <= 5) {
day_type = "工作日";
else {
day_type = "周末";
}

将数据按照 browser_name day_type升序排序

平均使用时长单位是秒的数值不会太大,是比较好观察,但是总使用时长的单位是秒的话数值很大,不够直观,所以将其转为小时,参考“6.4 各浏览器使用频率分布表数据抽取种计算小时的方法,使用增加常量组件和计算器组件来实现

在计算过程中出现了一些中间字段,我们使用字段选择组件来删除冗余字段

6.7 核心指标数据抽取

目标:将大屏顶部四个指标卡的数据存入一张通用的键值对表中

在以上数据抽取中,我们已经获取了各浏览器的用户数、使用时长、活跃用户数、重度用户数,但我们设计的核心指标是全局数据,除了使用时长,其他用户数相关的数据在不同浏览器之间是存在重叠的,所以需要重新计算。

用一个表输入组件,直接SQL一次性算出所有指标,然后通过列转行将一行转为四行

新建转换流“”,拖入表输入组件,数据库连接团队私有数据库,在SQL语句框中输入以下SQL

SELECT
ROUND(SUM(total_duration_sec) /36002AS total_hours,
ROUND(SUM(total_duration_sec) /3600/COUNT(DISTINCT user_id), 2AS avg_hours,
ROUND(
(SELECTCOUNT(DISTINCT user_id) FROM daily_browser_detail 
WHERE usage_date BETWEEN'2012-08-06'AND'2012-08-12'
*100.0/COUNT(DISTINCT user_id), 2
AS active_ratio,
ROUND(
(SELECTCOUNT(*FROM (
SELECT user_id FROM daily_browser_detail 
WHERE usage_date BETWEEN'2012-05-07'AND'2012-07-08'
GROUPBY user_id
HAVINGSUM(total_duration_sec) /3600>30
) t) *100.0/COUNT(DISTINCT user_id), 2
AS heavy_ratio
FROM daily_browser_detail

字段名称

key

value字段

total_hours

total_hours

metric_value

avg_hours

avg_hours

metric_value

active_ratio

active_ratio

metric_value

heavy_ratio

heavy_ratio

metric_value

接下来使用值映射组件将指标名称映射为中文

点击tab选项数据资源,可以看到 demographic.csv

选择导出到的目录,例如根目录

刷新文件库的根目录,即可看到 demographic.csv

双击“CSV文件输入组件,点击浏览文件按钮,在弹出的窗口中选择 demographic.csv,然后点击确定

往下滑一点,在空白表格处右键点击获取字段

6.8.3 年龄分段

原人口属性数据中没有年龄字段,但是有出生年份,因此我们可以通过计算获取用户的年龄属性

首先我们拖入增加常量组件,增加常量字段“year”,值设为“2012”(数据是2012年的)

接下来我们将年龄划分为四段:<1818-2526-35>35

拖入JavaScript代码组件,计算器组件连接到JavaScript代码组件

6.8.4 表输入:读取用户__浏览器_小时明细数据

拖入表输入组件到画布中

在弹出的窗口中,选择用户__浏览器_小时明细表daily_browser_detail

获取SQL查询语句后点击确认

我们先拖拽2排序记录组件到画布中,分别创建表输入组件到排序记录 1”组件的连线、“CSV文件输入组件到排序记录组件的连线,其中“CSV文件输入组件到排序记录组件的连线类型选择主输出步骤

仅保留“user-id”,其他字段选中后右键点击删除选中的行

同样的双击排序记录组件,命名为用户属性数据按用户ID排序,设置按 USERID 升序排序

双击记录集连接组件,第一个Transform选择明细数据按用户ID排序,第二个Transform选择用户属性数据按用户ID排序,连接类型选择“LEFT OUTER”

2个数据是通过用户ID关联的,所以第一个Transform的连接字段保留“user_id”,第二个Transform的连接字段保留“USERID”,其他字段通过删除选中的行来删除

拖入分组组件,排序记录组件连接到分组组件,按browser_nameGENDEREDUJOBINCOMEPROVINCEISCITYage_group 分组,聚合 user_count = user_id (统计不同值的数量(N)

6.8.9 查看结果数据

点击元数据”tab选项,右键团队私有数据库,点击加载元数据

实验目的

本实验基于上两个实验《浏览器市场与用户画像分析数据加工》产出的各项统计表,使用助睿Max数据大屏制作浏览器市场行为分析大屏。

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

·根据业务问题设计大屏布局与图表选型

·将已加工的聚合表接入可视化工具

·生成可交互的数据大屏,并提炼业务结论

实验环境

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

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

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

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

实验数据

本实验直接使用上一实验加工完成的大屏一(市场行为分析)目标表,聚焦浏览器本身的市场格局、使用行为、时段偏好、竞争关系。

模块

子模块

指标项

组件

关联数据表

备注

数据概览

浏览器市场

总使用时长

指标卡

browser_coverage

所有用户累计使用时长(小时)

人均使用时长

指标卡

browser_coverage

总使用时长 / 覆盖用户数(小时/周)

活跃用户占比

指标卡

browser_coverage

周活跃用户数 / 覆盖用户数

重度用户占比

指标卡

browser_frequency_stats

使用时长>10小时/周的用户占比

市场格局

用户规模

用户数

柱状图

browser_coverage

展示6个浏览器用户数

使用规模

使用时长

饼图

browser_coverage

展示各浏览器使用时长占比

使用粘性

人均使用时长

柱状图

browser_coverage

用户行为

时间趋势

周活跃趋势

折线图

browser_weekly_active

展示第1-4周各浏览器活跃用户数变化

使用习惯

使用频率分布

堆叠柱状图

browser_frequency_stats

//重度用户在各浏览器的占比

时段偏好

全天时段

24小时活跃分布

折线图

browser_hourly

X轴小时,Y轴活跃用户数,不同颜色代表不同浏览器

周内对比

工作日vs周末

分组柱状图

daily_browser_detail

对比工作日和周末的使用时长

竞争关系

使用数量

浏览器使用数量分布

饼图

browser_multi_usage

用户使用1/2/3种及以上浏览器的比例

整体分析框架

4.1 业务问题

我们希望通过大屏回答以下核心业务问题:

业务问题

对应的分析维度

哪个浏览器用户最多?哪个用得最久?

市场格局

用户活跃度在增长还是下降?

周活跃趋势

用户什么时候最活跃?

时段偏好

用户是重度使用还是偶尔打开?

使用频率

用户同时用几个浏览器?

浏览器使用数量

用户还用什么其他浏览器?

竞品重叠

工作日和周末使用习惯有何不同?

工作日vs周末

4.2 大屏设计原则

·从上到下、从左到右的叙事顺序:先整体后局部,先趋势后细节

·核心指标突出显示:顶部放置关键指标卡(覆盖用户数、总时长、人均时长、活跃占比、重度占比)

·图表类型与数据性质匹配:趋势用折线图,对比用条形图/柱状图,分布用环形图/饼图

·颜色规范:6个浏览器使用固定颜色标识(IE蓝、Chrome红、360绿等),便于识别

·交互支持:提供浏览器筛选器,支持查看全部或单个浏览器

4.3 大屏布局草图

暂时无法在飞书文档外展示此内容

参考图:

进入子平台——助睿数据大屏可视化平台

在模板选择中点击空白模板

我们输入市场分析,然后点击下一步,自动跳转到市场分析大屏的制作界面

5.2 设置大屏样式

5.2.1 背景设置

想修改设置助睿数据大屏的背景,可以通过修改背景图片来完成

助睿数据大屏中使用到的图片元素均使用oss-browser存储,并获取存储链接。本次实验用到的图片链接会在文后汇总,若同学有新图片使用需求,可以联系@谭萍处理。

本次数据大屏的背景图片链接为:

其他设置可以保持默认

5.2.2 标题设置

大屏的标题可以通过组件自己设计,也可以自行设计一个图片来实现。本次实验我们预先设计好了标题图,链接:

大屏画布中自动出现图片组件

输入标题banner”

点开基础属性,可以设置长宽、位置等属性,我们设置如下:

这样标题banner就设置好了,我们点击保存

除了直接设置属性值,也可以通过拖拽和缩放来设置组件的大小和位置

按钮上的文字我们使用通用标题来实现,点击文字分类下的通用标题,重命名为市场分析

点开基本设置,修改标题名为市场分析

文字即显示为我们修改的文字

第二个大屏的导航可以复制这个按钮的设置

现在,只需修改用户画像按钮背景用户画像组件的横坐标,如下:

保存预览一下

这个组命名为顶部

将区域背景图片链接:https://gzu-edu-quality-max-studio.oss-cn-chengdu.aliyuncs.com/public-material/area-bg.png 粘贴到背景图链接中

添加通用标题组件,重命名为标题,按照参考图,调整大小和位置,标题名修改为浏览器用户数,对齐方式为左对齐,其他设置参考如下:

重命名为浏览器用户数柱状图,调整大小和位置

这时候我们会发现,柱子和图例的距离过小,影响美观,我们可以点开全局样式来调整

将柱子上边距调大即可

5.3.2 使用规模浏览器使用时长占比

复制上一小节制作的浏览器用户数组,重命名为浏览器使用时长

复制的组件内容可能会不显示,重新刷新数据即可

浏览器使用时长占比图表类型为饼图,我们删除复制的柱状图,重新添加饼图。助睿数据大屏提供多样不同样式的饼图,可根据需求选择,这里我们选择多维度饼图,调整位置大小,名重命名为浏览器使用时长占比

将标签类目设置为可见

将饼图组件拖到浏览器使用时长组中,并及时保存

5.3.3 使用粘性浏览器人均使用时长

复制5.3.1小节制作的浏览器用户数组,重命名为浏览器人均使用时长

复制的组件内容可能会不显示,重新刷新数据即可

浏览器人均使用时长图表类型为柱状图,因此无需修改图表类型,将复制的柱状图重命名为人均使用时长柱状图即可

5.3.4 指标区

复制5.3.1小节制作的浏览器用户数组,重命名为数据概览

可以看到标题背景被拉伸了,因为我们使用的是短的标题背景图,现在需要换成长的标题背景图:

将标题名修改为数据概览,并刷新数据

添加数据翻牌器组件,重命名为总使用时长,并调整大小、位置

点开翻牌器设置,水平对齐改为居中对齐,其他设置如下:

暂时无法在飞书文档外展示此内容

复制3总使用时长组,分别重命名为人均使用时长活跃用户占比重度用户占比,其中活跃用户占比重度用户占比两个组中的图标背景图链接更改为: https://gzu-edu-quality-max-studio.oss-cn-chengdu.aliyuncs.com/library-data/degree-thesis.png

修改翻牌器标题、后缀,最后调整位置如下:

参考布局草图,拖拽周内对比组到合适位置

将柱状图删除,重新添加分组柱状图,命名为工作日vs周末使用时长分组柱状图,并调整大小,位置如下:

其他样式调整参考如下:

暂时无法在飞书文档外展示此内容

效果:

参考布局草图,拖拽“24小时活跃分布组到合适位置

将标题名修改为“24小时活跃用户数分布,并刷新数据

样式调整参考如下,参考颜色为#29F1FA

暂时无法在飞书文档外展示此内容

效果:

5.3.8 使用习惯使用频率分布

复制上一小节制作的浏览器周活跃用户数变化组,重命名为使用频率分布,参考以上的实验,调整位置、标题并更换图表类型为垂直基本柱图

基本饼图样式调整参考如下:

至此,市场分析大屏的静态布局已完成,下一实验我们将使用蓝图编辑器,完成数据接入。

附录:图片链接

素材

链接

页面背景

https://gzu-edu-quality-max-studio.oss-cn-chengdu.aliyuncs.com/public-material/bg-2.png

导航按钮

https://gzu-edu-quality-max-studio.oss-cn-chengdu.aliyuncs.com/comprehensive-data/navigation-bg-1.png

banner标题

https://gzu-edu-quality-max-studio.oss-cn-chengdu.aliyuncs.com/practice/browser-analysis/banner01.png

短标题背景

https://gzu-edu-quality-max-studio.oss-cn-chengdu.aliyuncs.com/public-material/title-bg-short.png

长标题背景

https://gzu-edu-quality-max-studio.oss-cn-chengdu.aliyuncs.com/public-material/title-bg-long.png

图表区域背景

https://gzu-edu-quality-max-studio.oss-cn-chengdu.aliyuncs.com/public-material/area-bg.png

时长指标

https://gzu-edu-quality-max-studio.oss-cn-chengdu.aliyuncs.com/library-data/audio-video.png

用户指标

https://gzu-edu-quality-max-studio.oss-cn-chengdu.aliyuncs.com/library-data/degree-thesis.png

实验目的

本实验基于上一实验《浏览器市场分析数据大屏静态布局制作》完成的大屏布局,使用助睿Max的蓝图编辑器,将之前实验加工好的数据表接入到大屏的各个图表组件中,使图表能够动态展示真实数据。

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

·理解蓝图编辑器的基本概念(数据源、触发器、动作)

·创建数据库数据源连接

·为图表组件编写SQL查询语句

·将查询结果绑定到图表组件

实验环境

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

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

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

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

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

实验数据

本实验使用上一实验加工完成的大屏一目标表,共6张表:

表名

用途

关联图表

browser_coverage

浏览器市场覆盖率统计

指标卡、柱状图、饼图

browser_hourly

浏览器时段活跃统计

24小时活跃分布折线图

browser_weekly_active

各浏览器周活跃趋势

周活跃趋势折线图

browser_frequency_stats

浏览器使用频率分布

使用频率堆叠柱状图

browser_multi_usage

用户浏览器使用数量分布

浏览器使用数量饼图

browser_weekday_weekend

浏览器工作日周末对比

工作日vs周末分组柱状图

蓝图编辑器概述

4.1 什么是蓝图编辑器?

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

蓝图编辑器的优势:

·蓝图编辑器可以保证交互和数据的实时性和同步性。

·蓝图编辑器支持数据请求合并和数据分发的功能。

·蓝图编辑器可模块化拆分,专注单个的交互链路,不需要考虑代码的整理和规范,只需要专注于业务规则和交互需求即可。

4.2 核心概念

概念

说明

数据源

数据库连接配置,定义数据从哪里来

查询

SQL语句,定义取什么数据

触发器

触发数据加载的事件(如页面加载、组件点击、定时刷新等)

动作

触发器执行后的操作(如查询数据、刷新图表)

变量

用于在查询之间传递参数(如筛选器选中的浏览器名称)

实验步骤

5.1 创建数据库数据源

首先,我们需要创建链接团队私有数据库的数据源,进入数据大屏平台后,点击我的数据

输出团队私有数据库的信息后,点击立即添加

5.2 组件导出到蓝图编辑器

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

打开上一实验制作的市场分析数据大屏

同样的,依次把所有需要接入数据的组件导出到蓝图编辑器中

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

5.3 添加全局节点

在蓝图编辑器里,在逻辑节点面板中,将需要使用的逻辑节点单击拖入中间画布中。逻辑节点包括了全局节点数据处理类节点流程控制类节点以及输入设备类节点

首先,我们全局节点,画布中自动添加1个全局节点,全局节点可用于在大屏打开时自动执行后续操作(如加载数据)

点击“SQL请求节点,在配置面板中,数据源选择团队私有数据库SQL类型为查询,处理方法的代码框中,输入以下SQL,一次性查询来源为browser_coverage 的数据:

let sql = `
select
browser_name as x, 
user_count as y1, 
round(total_duration_sec/3600,0as y2, 
round((total_duration_sec/3600)/user_count,1as y3 
from labs.browser_coverage 
order by browser_name`
return sql

接下来根据每个图表的数据接口映射格式处理查询到的数据,在画布编辑器界面,选择图表,可以在数据tab选项中查看数据接口映射:

暂时无法在飞书文档外展示此内容

根据查询结果,三个图表需要的字段

·浏览器用户数柱状图:x(浏览器名称)、y1(用户数)

·浏览器使用时长占比:name(浏览器名称)、value(使用时长)

·人均使用时长柱状图:x(浏览器名称)、y3(人均时长)

因此,并行数据处理的3个处理方法的代码如下,分别粘贴到对应的代码块中即可:

各浏览器用户数

return data.map(item => ({
x: item.x,
y: item.y1,
s'用户数'
}));

各浏览器总使用时长

returndata.map(item => ({
name: item.x,
value: item.y2
}));

各浏览器人均使用时长

return data.map(item => ({
x: item.x,
y: item.y3,
s'人均时长(小时)'
}));

5.4.3 添加图表节点

点击浏览器用户数柱状图、浏览器使用时长占比、人均使用时长柱状图这3个节点,将它们添加到画布中,再将并行数据处理的3个处理方法的输出接口连接到对应的图表的导入数据接口,如下:

可以看到,数据已经更新为数据库中的数据了

预览出现下图情况

饼图的样式可以调整一下,使其更协调

在画布编辑器中选择浏览器使用时长占比饼图,在数据系列中调整每个系列的内外半径,实现类似的以下效果:

5.5 为指标区域图表配置数据

5.5.1 添加SQL请求节点

从逻辑节点面板中,点击“SQL请求节点,并将全局节点的页面初始化完成输出接口连接到“SQL 请求节点的执行SQL”输入接口

该查询返回一个数组,格式如下:

[
{"metric_name":"总使用时长","metric_value":456800.00},
{"metric_name":"人均使用时长","metric_value":8.20},
{"metric_name":"活跃用户占比","metric_value":71.30},
{"metric_name":"重度用户占比","metric_value":23.50}
]

5.5.2 并行数据处理

添加并行数据处理组件,并在其处理方法中再增加3个处理方法,一共4个处理方法,分别命名为:总使用时长、人均使用时长、活跃用户占比、重度用户占比

SQL请求节点的执行成功输出接口分别连接到并行数据处理的4个处理方法接口,如下:

其中,name字段我们已经在数据翻牌器中设置好了,现在只需处理value 字段的映射关系根据查询结果:

总使用时长

var item = data.find(d => d.metric_name === '总使用时长');
return [{ value: item ? item.metric_value : 0 }];

人均使用时长

var item = data.find(d => d.metric_name === '人均使用时长');
return [{ value: item ? item.metric_value : 0 }];

活跃用户占比

var item = data.find(d => d.metric_name === '活跃用户占比');
return [{ value: item ? item.metric_value : 0 }];

重度用户占比

var item = data.find(d => d.metric_name === '重度用户占比');
return [{ value: item ? item.metric_value : 0 }];

每个分支的输出格式为[{ value: xxx }],指标卡组件直接读取value字段显示数值。指标名称已预先配置在指标卡组件的标题中

5.5.3 添加图表节点

点击4个数字翻牌器组件的节点,将它们添加到画布中,再将并行数据处理的4个处理方法的输出接口连接到对应的图表的导入数据接口,如下:

点击保存,预览数据是否符合预期

5.7 24小时活跃用户分布图表配置数据

5.7.1 添加SQL请求节点

参考以上SQL请求节点的配置步骤,完成SQL请求节点配置,查询代码如下:

let sql = `
select hour as x,
active_user_count as y,
browser_name as s
from labs.browser_hourly
order by browser_name, hour
`
return sql

5.7.2 添加图表节点

点击24小时活跃用户分布节点,将它添加到画布中,再SQL请求节点的执行成功输出接口连接到导入数据接口,如下:

设置完成后,效果如下:

点击保存,预览数据是否符合预期

设置完成后,效果如下:

点击保存,预览数据是否符合预期

5.10 为浏览器使用数量分布图表配置数据

5.10.1 添加SQL请求节点

参考以上SQL请求节点的配置步骤,完成SQL请求节点配置,查询代码如下:

let sql = `
select
browser_count as name, 
user_count asvalue
from labs.browser_multi_usage 
order by browser_count
`
return sql

5.10.2 添加图表节点

点击浏览器使用数量分布节点,将它添加到画布中,再SQL请求节点的执行成功输出接口连接到导入数据接口,如下:

预览确认无误后,单击大屏页面右上角的发布图标

单击分享链接右侧的复制按钮