You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Kusto Query自动识别应用正式发布日期并筛选正式数据

自动识别正式发布日期的Kusto解决方案

嘿,这个需求我帮你梳理清楚了!核心就是通过分析日期的连续性,自动区分零散的测试数据块和从发布日至今的连续正式数据。下面是完整的Kusto查询方案,一步步来:

完整查询代码

// 替换成你的应用数据表名
let raw_app_data = your_application_data_table;

// 第一步:提取所有有数据的日期,按天去重并排序
let daily_dates = raw_app_data
| extend Date = startofday(Timestamp) // 将时间戳转换为当天的起始时间(便于按天聚合)
| distinct Date // 去重,得到所有存在数据的日期
| sort by Date asc; // 按日期升序排列,方便后续计算连续性

// 第二步:计算日期间隙,给连续日期分组
let date_groups = daily_dates
| extend prev_date = prev(Date) // 获取上一个有数据的日期
| extend days_between = datetime_diff('day', Date, prev_date) // 计算当前日期与前一个日期的天数差
| extend is_continuous = days_between == 1 // 差值为1则表示连续,否则是间隙
| extend group_id = row_cumsum(iff(is_continuous, 0, 1)); // 为每个间隙点创建新分组,连续日期会归属同一组

// 第三步:找出最长的连续日期区间(即正式版本的发布区间)
let formal_release_interval = date_groups
| summarize
    release_start_date = min(Date),
    latest_date = max(Date),
    total_days = datetime_diff('day', latest_date, release_start_date) + 1 // 计算持续天数(包含首尾)
by group_id
| sort by total_days desc, latest_date desc // 优先取持续时间最长的,若有相同长度则取最近的
| take 1; // 仅保留正式版本对应的区间

// 第四步:过滤出正式版本的数据
raw_app_data
| where startofday(Timestamp) >= toscalar(formal_release_interval.release_start_date)

关键步骤解释

  • 第一步:先把所有时间戳归一到当天的起始点,去重后得到所有有数据的日期,确保我们只关注“某一天是否有数据”这个核心判断点。
  • 第二步:用prev()函数对比相邻日期的间隔,通过row_cumsum给不连续的日期段分配不同的分组ID——这样连续的日期会被分到同一个组里,零散的测试数据块会成为独立小组。
  • 第三步:统计每个分组的起始、结束日期和持续天数,排序后取最长的那个分组。因为测试数据是1-2天的零散块,正式版本的连续区间肯定是最长的,而且会持续到最近的日期。
  • 第四步:用自动识别出的正式发布起始日期过滤原始数据,就得到了纯正式版本的分析结果。

边缘情况处理

  • 如果你的数据从一开始就是连续的(比如还没做过测试),查询会自动把整个时间段当作正式区间。
  • 如果存在多个较长的连续区间,查询会优先选择结束日期最近的那个,符合正式版本持续到当前的逻辑。

内容的提问来源于stack exchange,提问作者Maverick1st

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 14:22:52