如何在Azure Application Insights中实现去重并按月统计唯一活跃用户?
提取每月唯一活跃用户列表的解决方案
嘿,我来帮你搞定这个需求!根据你的描述,我们的目标是从用户互动数据里,提取出每个月至少有一次点击行为的唯一用户列表——不管用户当月参与了多少活动、有多少天的记录,只要当月出现过就算活跃用户,且每个用户每月只保留一条记录。
先看你提供的现有查询,它目前是按天、用户、活动ID统计点击数,没有实现按月度的用户去重。我来帮你调整成符合需求的版本,一步步解释:
优化后的KQL查询
customEvents // 基础数据转换:统一时间格式、用户名大小写,提取必要字段 | extend rTimeStamp = todatetime(customDimensions.timeStamp) | extend username = tolower(tostring(customDimensions.username)) | extend item_uid = tostring(customDimensions.itemId) // 只保留点击事件 | where name == 'click' // 将日期转换为「年-月」格式,用于按月分组统计 | extend month = format_datetime(rTimeStamp, "yyyy-MM") // 按月份+用户名去重,得到每个月的唯一活跃用户 | summarize by month, username // 可选:如果需要查看用户当月参与的不同活动数量,可替换上面的summarize为下面这行 // | summarize distinct_campaigns = dcount(item_uid) by month, username // 按月份和用户名排序,方便查看 | order by month asc, username asc
关键逻辑说明
- 数据标准化:先把时间戳转成datetime格式,用户名统一转小写,避免因为大小写差异导致的用户重复统计。
- 月份维度聚合:用
format_datetime把具体日期转成yyyy-MM的月份字符串,这样就能按自然月来分组。 - 用户去重:
summarize by month, username会自动对每个月的用户去重,确保同一用户在同一个月里只出现一次,完全符合你要的「每月唯一活跃用户」需求。 - 可选扩展:如果还想知道每个用户当月参与了多少不同的活动,可以用
dcount(item_uid)来统计该用户当月的唯一活动ID数量,注释里已经给出了扩展写法。
这个查询完美适配你提到的唯一性规则(同一用户单日同一campaign_id仅记录一次),因为我们只关心用户是否在当月有过互动,不管具体的活动和日期次数~
内容的提问来源于stack exchange,提问作者Itay Holtzman
相关产品推荐
相关产品推荐

