文章 查看内容

查询轻应用和桌面应用中包含页面的看板制作方法

查询轻应用和桌面应用中包含页面的看板制作方法

30 0 可视化分析 2026-6-30 10:07 发布者: Chansey

摘要当需要盘点环境内“每个轻应用/桌面应用分别包含哪些页面”时,可以从元数据库抽取应用、页面相关源表,在 ETL 中加工成应用页面关系宽表,再制作一个带筛选器的查询看板。一、适用场景该方法适用于以下场景:需 ...

摘要

当需要盘点环境内“每个轻应用/桌面应用分别包含哪些页面”时,可以从元数据库抽取应用、页面相关源表,在 ETL 中加工成应用页面关系宽表,再制作一个带筛选器的查询看板。

一、适用场景

该方法适用于以下场景:

  • 需要查询某个轻应用包含哪些页面。
  • 需要查询某个桌面应用包含哪些页面。
  • 需要按应用名称、应用类型快速筛选页面明细。
  • 需要排查页面是否被多个应用引用。
  • 需要在迁移、治理、权限梳理前导出应用与页面关系。

最终看板建议包含两个筛选器和一张明细表:

卡片类型作用
应用类型筛选筛选器在“轻应用”和“桌面应用”之间切换
应用名称筛选筛选器按应用名称定位目标应用
应用页面明细表明细表展示应用与页面关系明细

二、整体思路

整体流程如下:

  1. 连接环境元数据库。
  2. 分别抽取应用、页面、页面路径相关原表。
  3. 在 ETL 中过滤有效记录。
  4. 在 ETL 中拆分轻应用页面列表、解析桌面应用页面结构。
  5. 合并轻应用和桌面应用的页面关系。
  6. 关联页面基础信息和页面路径信息。
  7. 去重并整理输出字段。
  8. 使用输出宽表制作看板筛选器和明细表。

本方案使用的元数据表如下:

表名用途
custom_app轻应用配置表,通过 page_list 获取轻应用包含的页面 ID
web_portal桌面应用配置表,通过 structure 获取桌面应用包含的页面 ID 和应用内页面名称
page页面基础信息表,用于补齐页面名称
page_path页面目录路径表,用于补充页面路径信息

三、准备元数据库数据集

在数据集中选择可访问元数据库的数据账户,新建 4 个原始数据集。注意:这一层只抽源表,不在 SQL 中写业务逻辑。

数据集名称示例源表 SQL
元数据_custom_app_帮助中心demoselect * from custom_app
元数据_web_portal_帮助中心demoselect * from web_portal
元数据_page_帮助中心demoselect * from page
元数据_page_path_帮助中心demoselect * from page_path

这样处理有两个好处:

  • 源表数据集可被其他元数据分析场景复用。
  • 后续字段清洗、过滤、关联规则集中在 ETL 中,逻辑更清晰。

四、通过 ETL 加工应用页面关系宽表

新建 ETL,并将 ETL 放入指定目录。示例中使用的 ETL 为:

查询轻应用和桌面应用页面_ETL_多源算子版_帮助中心demo

输出数据集为:

应用页面关系宽表_多源ETL版_帮助中心demo

1. 输入节点

在 ETL 中添加 4 个输入数据集节点,分别选择上一步创建的原始数据集:

输入节点数据来源
元数据_custom_app_帮助中心demo轻应用源表
元数据_web_portal_帮助中心demo桌面应用源表
元数据_page_帮助中心demo页面基础信息源表
元数据_page_path_帮助中心demo页面路径源表

2. 过滤有效数据

对 4 个输入节点分别增加过滤行节点:

过滤节点处理逻辑
过滤有效轻应用保留 is_del = 0page_list 非空的轻应用记录
过滤有效桌面应用保留 is_del = 0structure 非空的桌面应用记录
过滤有效页面保留 is_del = 0 的页面记录
过滤有效页面路径保留 is_del = 0 的页面路径记录

这一步建议使用 ETL 的“过滤行”算子完成,不要把过滤条件写在源数据集 SQL 中。

3. 拆分轻应用页面列表

轻应用的页面关系存放在 custom_app.page_list 中,字段内容是逗号分隔的页面 ID 列表。普通筛选、关联算子无法直接把逗号分隔内容展开成多行,因此这里使用 SQL 脚本节点做拆分。

节点名称:

拆分轻应用页面列表

SQL 示例:

select
  '轻应用' as app_type,
  app_id,
  coalesce(nullif(name, ''), app_id) as app_name,
  dom_id,
  trim(page_id_raw) as page_id,
  cast(null as string) as app_page_name,
  cast(1 as bigint) as page_level,
  utime as app_utime
from input1
lateral view explode(split(page_list, ',')) ex as page_id_raw
where trim(page_id_raw) <> ''

该节点输出一行一条“轻应用 - 页面”关系。

4. 解析桌面应用页面结构

桌面应用的页面关系存放在 web_portal.structure 中,字段内容是 JSON 数组。每个数组元素中包含页面 ID 和应用内页面名称。普通 ETL 算子无法直接展开 JSON 数组,因此这里也使用 SQL 脚本节点。

节点名称:

解析桌面应用页面结构

SQL 示例:

select
  '桌面应用' as app_type,
  app_id,
  coalesce(nullif(name, ''), app_id) as app_name,
  dom_id,
  item.pgId as page_id,
  item.name as app_page_name,
  cast(1 as bigint) as page_level,
  utime as app_utime
from input1
lateral view explode(from_json(structure, 'array<struct<pgId:string,name:string>>')) ex as item
where item.pgId is not null
  and trim(item.pgId) <> ''

该节点输出一行一条“桌面应用 - 页面”关系。

5. 合并两类应用关系

使用“追加行”算子,将轻应用关系和桌面应用关系合并为统一结构。

节点名称:

合并轻应用和桌面应用页面关系

处理效果:

来源输出字段
轻应用拆分结果app_typeapp_idapp_namepage_id
桌面应用解析结果app_typeapp_idapp_namepage_idapp_page_name

合并后,后续节点可以统一处理两类应用。

6. 关联页面名称

使用“关联数据”算子,将合并后的应用页面关系左关联到页面基础表。

节点名称:

关联页面名称

关联方式:

左表字段右表字段关联类型
page_idpg_id左关联

关联后可获得页面基础表中的页面名称,用于兜底或替代应用配置里的页面名称。

7. 关联页面路径

继续使用“关联数据”算子,将上一步结果左关联到页面路径表。

节点名称:

关联页面路径

关联方式:

左表字段右表字段关联类型
page_idpg_id左关联

如果环境中页面路径表记录不完整,路径字段可能为空,这不影响应用与页面关系查询。

8. 应用页面关系去重

使用“删除重复行”算子,按以下字段去重:

去重字段
app_type
app_id
page_id

去重应放在计算“应用内页面数”之前,确保页面数统计基于唯一的应用页面关系。

9. 整理输出字段并计算页面数

最后使用 SQL 脚本节点做字段命名、字段兜底和窗口统计。

节点名称:

整理输出字段并计算应用内页面数

SQL 示例:

select
  app_type as `应用类型`,
  app_name as `应用名称`,
  app_id as `应用ID`,
  coalesce(page_name, app_page_name, page_id) as `页面名称`,
  page_id as `页面ID`,
  concat(app_name, ' > ', coalesce(page_name, app_page_name, page_id)) as `应用内页面路径`,
  page_path_id_chain as `页面路径ID链路`,
  concat('/page/', page_id) as `页面访问路径`,
  dom_id as `域名`,
  cast(page_level as bigint) as `页面层级`,
  app_utime as `应用更新时间`,
  count(1) over (partition by app_type, app_id) as `应用内页面数`
from input1
where page_id is not null
  and trim(page_id) <> ''

该节点的主要作用如下:

处理说明
字段中文化将 ETL 中的英文中间字段整理成看板可读字段
页面名称兜底优先使用页面基础表名称,其次使用应用内页面名称,最后使用页面 ID
页面访问路径拼接/page/页面ID 输出页面访问路径
应用内页面数统计按应用类型和应用 ID 统计当前应用包含的页面数量

10. 输出数据集

添加输出数据集节点,输出为应用页面关系宽表。

建议输出字段如下:

字段说明
应用类型轻应用或桌面应用
应用名称应用显示名称,名称为空时使用应用 ID 兜底
应用ID应用唯一标识
页面名称页面显示名称
页面ID页面唯一标识
应用内页面路径拼接后的“应用 > 页面”展示字段
页面路径ID链路页面路径表中的路径链路
页面访问路径/page/页面ID 拼接
域名应用所属域名
页面层级示例按一级页面输出
应用更新时间应用配置更新时间
应用内页面数当前应用包含的页面数量

五、制作查询看板

使用 ETL 输出的宽表制作看板。

1. 应用类型筛选器

新建筛选器卡片,数据集选择“应用页面关系宽表”,字段选择:

应用类型

筛选器可设置为搜索列表,并联动到明细表:

应用类型 -> 应用类型

2. 应用名称筛选器

新建筛选器卡片,数据集选择“应用页面关系宽表”,字段选择:

应用名称

筛选器可设置为搜索列表,并联动到明细表:

应用名称 -> 应用名称

3. 应用页面明细表

新建明细表卡片,数据集选择“应用页面关系宽表”。建议放入以下字段:

  • 应用类型
  • 应用名称
  • 应用ID
  • 页面名称
  • 页面ID
  • 应用内页面路径
  • 页面路径ID链路
  • 页面访问路径
  • 域名
  • 应用更新时间
  • 应用内页面数

保存并发布看板后,用户即可按应用类型和应用名称查询每个应用中包含的页面。

六、示例验证结果

七、注意事项

  1. 元数据库源表只建议做原样抽取,业务逻辑集中放在 ETL 中处理。
  2. custom_app.page_list 是逗号分隔字段,需要在 ETL 中拆分成多行。
  3. web_portal.structure 是 JSON 数组,需要在 ETL 中解析并展开。
  4. 建议过滤 is_del = 0,避免统计已删除应用或页面。
  5. 页面名称建议做兜底处理,优先使用页面基础表名称,再使用应用内页面名称,最后使用页面 ID。
  6. 页面路径表在部分环境中可能不完整,路径为空不代表应用页面关系无效。
  7. 如果需要进一步分析“一个页面被哪些应用引用”,可以在明细表中按页面 ID 搜索,也可以新增以页面 ID 为维度的统计卡片。

路过

雷人

握手

鲜花

鸡蛋

评论

您需要登录后才可以发表言论 登录立即注册
微信服务号
联系我们
电话:400-880-0750
邮箱:hello@guandata.com
Copyright © 2001-2026 观远社区 版权所有 All Rights Reserved. 浙 ICP 备15006424号-3
去评论 去发文 返回顶部
返回顶部