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

发布时间:2026/9/25 3:51:50
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),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询