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

如何在KQL中无需指定日期筛选完整的上一周数据?

在KQL中筛选完整上一周数据(无需指定具体日期)

要筛选完整的上一周数据(不管当前是周几,都能拿到上一整周的所有记录),不用硬编码具体日期,最直接高效的方式是通过KQL的startofweek()函数计算出上一周的时间范围,而非先用ago()再二次筛选。

核心思路

  1. 定义一周的起始日(默认是周日,可改为周一);
  2. 计算上一周的起始时间和当前周的起始时间;
  3. 直接在where子句中过滤出时间落在上一周范围内的数据。

代码示例(以周一为一周起始)

// 定义一周起始为周一(参数1代表周一,若要周日起始改为0即可)
let last_week_start = startofweek(now(), 1) - 7d;
let current_week_start = startofweek(now(), 1);

AzureActivity
// 筛选上一周的完整数据:上周一零点到本周一零点(不含本周一零点)
| where TimeGenerated >= last_week_start and TimeGenerated < current_week_start
// 按日期分组统计,同时输出对应的星期几
| summarize count() by bin(TimeGenerated, 1d), dow=dayofweek(bin(TimeGenerated, 1d))
// 按日期排序,结果更直观
| sort by bin_TimeGenerated asc

对原思路的补充

如果坚持用你最初的“先查前13天再二次筛选”的思路,也可以通过dayofweek()结合当前星期几来计算过滤条件,但这种方式代码可读性差、性能也不如直接过滤时间范围:

AzureActivity
| where TimeGenerated > ago(13d)
| summarize count() by bin(TimeGenerated, 1d), dow=dayofweek(bin(TimeGenerated, 1d))
// 计算当前星期几,筛选出上一周的所有日期
| let current_dow = dayofweek(now());
| where bin_TimeGenerated between (now() - (current_dow + 7)d .. now() - (current_dow + 1)d)

说明

  • KQL中dayofweek()返回值:0=周日,1=周一,...,6=周六;
  • 优先推荐第一种直接计算时间范围的方法,既能保证逻辑准确,又能减少不必要的数据处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:01:23