新闻详情

新闻详情

首页 / 资讯中心 / 详情

highlight.io 用户分析实战:基于事件数据源与 CountDistinct 构建独立用户点击统计图

发布时间:2026/9/26 21:17:57来源:尧图网络
highlight.io 用户分析实战:基于事件数据源与 CountDistinct 构建独立用户点击统计图
可观测性后端【免费下载链接】highlighthighlight.io: The open source, full-stack monitoring platform. Error monitoring, session replay, logging, distributed tracing, and more.项目地址https://gitcode.com/gh_mirrors/hi/highlight点击查看免费下载这篇指南以 highlight.io 的 Dashboards仪表盘产品为核心讲解如何利用事件events数据源与CountDistinct 聚合函数从零搭建一张统计点击了页头链接header links的独立用户数的柱状图。你将掌握事件源选型、过滤器编写、函数与分组配置、以及从独立用户unique users切换为独立会话unique sessions的完整方法并理解 CountDistinct 在底层 ClickHouse 查询中是如何被生成与执行的。教程目标与核心概念用户分析User Analytics的核心问题通常是有多少不同的用户在使用我的应用的某个功能。本教程的目标是追踪点击了页头header中链接的独立用户数借此理解用户与应用的交互行为与趋势。实现这一目标依赖 highlight.io 的三层能力事件数据源会话中产生的点击Click、导航Navigate以及自定义事件都可以作为指标查询的数据来源用户标识通过H.identify()上报的identifier属性用于区分不同用户CountDistinct 聚合对标识字段去重计数从而得到独立用户数而非事件总数。在动手前建议先阅读 Dashboards 总览 与 图表编辑Graphing文档 了解编辑器全貌。准备工作确保事件与用户标识被正确上报在仪表盘中做用户分析之前需要确认应用侧已经正确上报了事件与用户标识否则图表将无数据可查。上报用户标识调用H.identify()为会话绑定用户级标识如邮箱、ID该调用会自动为会话建立索引使其可以被这些属性过滤H.identify(elizacorp.com, { id: ajdf837dj, phone: 867-5309 })其中第一个参数即identifier属性如elizacorp.com是本教程 CountDistinct 去重的依据。还可以通过 metadata 中的highlightDisplayName、email、avatar覆盖会话查看器中的显示名与用户头像。上报自定义事件本教程过滤目标为自定义事件header-link-*其中*表示被点击链接的后缀例如点击首页链接会触发header-link-home。这类事件需要在你的应用中手动上报上报后即可在事件搜索与仪表盘中按事件名过滤。分步搭建图表独立用户点击统计下面按官方教程的完整步骤在 highlight.io Dashboards 的图表编辑器中配置这张柱状图。第 1 步选择数据源Source在图表编辑器中将Source数据源设置为events事件。事件数据源包含会话中的点击、导航动作以及自定义事件能提供用户与应用交互的细粒度信息。这与 logs、traces、sessions、errors 等数据源并列是 highlight.io 六类可查询资源之一。第 2 步选择图表类型View Type将View type设置为Bar chart / histogram柱状图/直方图。柱状图擅长比较不同类别之间的数值非常适合按事件名分组后对比各类事件的独立用户量。也可以按需切换到 Line chart折线图或 Table表格。第 3 步应用过滤器Filters在Filters输入框中写入事件搜索查询聚焦到目标事件。本例中过滤到自定义事件header-link-*eventheader-link-*事件搜索的默认键是event如果只输入header-link-*也会被解析为event*header-link-*。关于键值语法、正则[regex]、exists等操作符的完整说明可参考 搜索语法文档。第 4 步应用函数Function——CountDistinct 独立用户数此时查询返回的是事件总数而非用户数。要得到去重后的独立用户数将Function函数更新为CountDistinct字段选择identifier属性。identifier是每个用户的唯一标识如邮箱或 ID对它的值去重计数即可得到独立用户数。关于标识的更多说明显示名、头像、未识别会话的行为等见 识别用户Identifying Users文档。第 5 步分组数据Group by开启Group by按event name事件名对结果分组。这样被过滤出的header-link-*事件会被拆分为具体发生的事件如header-link-pricing、header-link-docs每一类独立显示一根柱。第 6 步分析结果最终的图表展示的是所有被过滤会话中每个事件的去重邮箱数即独立用户数。借助这张图你可以找出被点击最多的事件即页头中最受欢迎链接观察用户参与度随时间的变化趋势判断应用中哪些区域被最频繁访问。第 7 步细化指标——切换到独立会话如果希望统计独立会话unique sessions而非独立用户只需将CountDistinct的字段从用户标识改为secure_session_id事件发生的会话 ID。这在需要区分用户量与访问量、计算 DAU日活跃用户等场景下非常有用。关于事件的更多搜索与属性用法见 事件搜索文档。第 8 步解读数据并采取行动利用图表洞察应用的整体使用情况识别页面上被使用最多的部分发现参与度下降的趋势并调查潜在原因识别驱动更高参与度的成功功能或内容基于用户参与模式规划有针对性的改进或营销活动。建议定期监控并复查这些指标随着应用与用户群体的演进持续调整。底层实现CountDistinct 如何变成 SQL理解 CountDistinct 的底层执行有助于判断查询开销与结果语义。在 backend/private-graph/graph/schema.graphqls 中MetricAggregator枚举定义了可用的聚合函数包括Count、CountDistinct与CountDistinctKeyCountDistinctKey专用于对某个键去重计数enum MetricAggregator { Count CountDistinct CountDistinctKey # ... Min / Avg / P50 / P90 / P95 / P99 / Max / Sum 等 }前端图表配置的聚合函数会映射到后端 Go 代码最终翻译为 ClickHouse SQL。在 backend/clickhouse/query.go 的getFnStr函数中可以看到具体的翻译规则case modelInputs.MetricAggregatorCountDistinctKey, modelInputs.MetricAggregatorCountDistinct: if useState { return fmt.Sprintf(uniqState(toString(%s)), column) } return fmt.Sprintf(round(count(distinct %s) * 1.0), column)也就是说CountDistinctidentifier最终生成为count(distinct identifier)即 ClickHouse 对identifier去重后计数在增量聚合State 模式用于指标预聚合下则使用uniqState(toString(identifier))把去重计数的中间状态持久化下来避免重复全表扫描getLimitFnStrquery.go在限制分组数量如 Limit 10 by Count时使用同样的去重逻辑。这正是图表上的一个下拉选项背后是一整套 ClickHouse 去重计数执行链路的体现。进阶事件搜索、自动注入属性与漏斗分析事件的自动注入属性事件在写入时会被注入一批默认属性均可作为过滤与分组依据。与本教程直接相关的有属性说明示例event发生的事件名SessionsPageLoadedidentifier传入H.init/H.identify的用户标识1secure_session_id事件所在会话的 IDe1845285cb360410aee05c61dd0cc57f85afe6daidentified会话是否成功识别了用户falsefirst_session是否为该用户的首个会话falsebrowser_name/os_name/country/city/state浏览器、系统与地理位置信息Chrome/Mac OS X/Greece完整的自动注入属性表见 事件搜索文档 的 Searchable Attributes 小节。特殊事件Click 与 Navigatehighlight.io SDK 默认记录两类事件Click 事件由鼠标按下动作触发即使点击的是非可交互元素如页头空白处主要属性包括clickTextContent被点击内容的文本、clickTarget被点击的 HTML 元素、clickSelector被点击元素的完整 HTML 路径Navigate 事件由 URL 变化触发含刷新主要属性包括url、landing_page、exit_page、reload。本教程以自定义事件header-link-*为例但同样可以直接对默认 Click 事件做用户分析例如统计点击了页头导航区域的独立用户数。用漏斗Funnel串联多个事件事件分析不仅限于单张图。在事件搜索中选择Funnel Chart视图类型可以查看一个会话中按步骤依次发生多个事件的比例——例如点击页头链接 → 访问定价页 → 触发注册的转化漏斗与上述独立用户统计互为补充。常见问题与最佳实践Q1CountDistinct 与 Count 有什么区别Count 统计事件发生次数同一用户点击多次会重复计入CountDistinct 对指定字段去重同一用户多次点击只计一次。做独立用户数时必须用 CountDistinct identifier。Q2什么时候用secure_session_id而不是identifier统计有多少次独立访问时用secure_session_id每次会话计一次统计有多少个独立的人时用identifier每人计一次。指标含义访问量 vs 用户量完全不同。Q3图表的其他字段怎么配Bucket by默认按Timestamp聚合为时间序列也可以改为其他数值字段做直方图分布如duration禁用后则在整个时间范围内做聚合适合表格形式的汇总指标Group by 的 Limit可以限制展示的分组数量例如按 Count 只展示 Top 10 事件让图表更聚焦Graph title为每张图设置清晰的标题便于在仪表盘中识别。最佳实践先确认事件与H.identify()已正确上报再搭建图表同时用事件总数与独立用户数两张图对比可以快速判断某个页头链接是少数人频繁点击还是多数人少量点击最后定期复查指标定义随着产品功能与用户规模演进及时调整分组维度与过滤条件。至此你已经掌握了在 highlight.io 中用事件数据源 CountDistinct 做用户分析的完整流程可以将其推广到任意自定义事件、默认 Click/Navigate 事件以及漏斗分析等更复杂的场景中。赞分享可观测性后端【免费下载链接】highlighthighlight.io: The open source, full-stack monitoring platform. Error monitoring, session replay, logging, distributed tracing, and more.项目地址https://gitcode.com/gh_mirrors/hi/highlight点击查看免费下载相关推荐PostHog 深度指南基于 $autocapture 事件探索用户点击行为与构建 ActionPostHog 深度指南基于 $autocapture 事件探索用户点击行为与构建 Action 本文围绕 PostHog 仓库中 exploring aut数据分析后端前端数据可视化大数据Flet Map 的 MapTapEvent地图点击事件的数据结构与实战用法Flet Map 的 MapTapEvent地图点击事件的数据结构与实战用法 本篇技术指南聚焦于 Flet 开源仓库中 flet_map 包 Python前端跨平台桌面应用移动开发Popcorn Time用户行为分析事件跟踪与数据统计Popcorn Time用户行为分析事件跟踪与数据统计 你是否曾好奇自己在Popcorn Time上的观影习惯为何某些节日会看到特殊界面本文将带你深入了解音视频上一篇终极编程语言宝典1000 Hello World示例全解析下一篇如何快速实现iOS网络监控Reachability.swift完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Obsidian dataview 完全指南:从元数据查询到知识库管理 2026/9/26 21:17:45

Obsidian dataview 完全指南:从元数据查询到知识库管理

简介:Obsidian Dataview插件是一份帮助用户深度掌握Obsidian增强插件的资源包,面向使用Obsidian进行个人知识管理的学生、研究人员、职场人士,解决信息整理低效、难以动态汇总的问题。压缩包共4个文件、460KB,内部结构清晰&#x…

阅读更多 →
从散装AI Coding到体系化AI Engineering:16万行代码的可控交付复盘 2026/9/26 21:17:38

从散装AI Coding到体系化AI Engineering:16万行代码的可控交付复盘

16 万行代码,4 个月,3 个人。这三个数字放在一起,很多人第一时间会问是不是在吹牛。说句实在话,如果一年前有人这么跟我讲,我也不信。但这次项目确实做完了,而且不是靠“散装 AI Coding”碰运气堆出来的——…

阅读更多 →
DITA结构化写作实战:内容复用与多平台发布的关键路径 2026/9/26 21:17:31

DITA结构化写作实战:内容复用与多平台发布的关键路径

做技术文档的人,多少都听过DITA这个名字。全称Darwin Information Typing Architecture,常被称为达尔文信息分类体系架构,业内更习惯直接叫dita。第一次把它彻底弄明白,是在一个要同时给三款产品线出安装手册的项目里。Word模式下…

阅读更多 →
开源AI编程工具选型与实操指南:从补全到智能体 2026/9/26 21:17:18

开源AI编程工具选型与实操指南:从补全到智能体

1. 为什么我现在很少提“推荐某个 AI 编程工具”先说结论:工具的取舍根本不应该是你首先要关心的事。这两年“AI 编程助手大比拼:Cursor、Windsurf、VS Code Copilot 和 Trae,谁才是你的神队友”这类文章几乎天天能看到,评论区也是…

阅读更多 →
Burpsuite安装实战:从JDK环境到HTTPS证书全流程排查 2026/9/26 21:17:12

Burpsuite安装实战:从JDK环境到HTTPS证书全流程排查

简介:这是一款Burpsuite工具安装包,面向Web安全测试人员与渗透测试入门者,整合主程序、运行依赖与启动环境,解决下载后因组件缺失而无法运行的常见问题。压缩包共415个文件,体积约173.94MB,其中dll链接库用…

阅读更多 →
Obsidian dataview 实战:用元数据与DQL把笔记库变成数据库 2026/9/26 21:17:12

Obsidian dataview 实战:用元数据与DQL把笔记库变成数据库

简介:Obsidian Dataview 插件资源包主要面向 Obsidian 用户,用于扩展笔记软件在数据查询、任务管理和时间规划方面的能力。压缩包内共有四个文件,包含两个 JSON 配置文件、一个 JavaScript 核心脚本和一个 CSS 样式表,整体大小约四…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉