如何在KQL中获取指定时间范围内每周起始日的销售数据?
解决方案
需求回顾
需要统计过去30天内每个每周起始日(周日)当天的销售数据:
- 总销售计数(
Sales) - 待处理销售计数(
PendingSales)
当前查询仅能返回30天前那周起始日的统计,需扩展到指定时间范围内的所有周日。
错误示例查询(供参考)
SalesData | where DateStamp >= startofweek(ago(30d)) | project DateStamp, Sales | summarize Sales=count(), PendingSales=countif(Sales == "Pending") by Week=startofweek(ago(30d))
正确KQL查询
// 生成过去30天内的所有周日列表 let target_weeks = range Week from startofweek(ago(30d)) to now() step 7d; // 筛选并聚合目标周日当天的销售数据 SalesData | where DateStamp between (startofweek(ago(30d)) .. now()) | extend Week = startofweek(DateStamp) // 仅保留DateStamp为周日当天的数据(Week等于DateStamp则当天是周日) | where Week == DateStamp | summarize Sales = count(), PendingSales = countif(Sales == "Pending") by Week // 右连接确保所有目标周日都出现在结果中,无数据时填充0 | join kind=rightouter target_weeks on Week | project Week, Sales = coalesce(Sales, 0), PendingSales = coalesce(PendingSales, 0) | sort by Week asc
关键说明
- 生成目标周日列表:用
range函数生成过去30天内的所有周日,确保不遗漏任何需要统计的日期 - 筛选周日当天数据:通过
Week == DateStamp判断数据是否属于周日当天,避免整周聚合 - 补全空数据:使用
rightouter join配合coalesce,保证即使某个周日没有销售记录,也会显示对应的行并填充0值 - 排序输出:按日期升序排列,符合时间顺序
期望输出示例
| Week | Sales | PendingSales |
|---|---|---|
| 2024-06-30 00:00:00.0000000 | 45 | 23 |
| 2024-07-07 00:00:00.0000000 | 32 | 15 |
| 2024-07-14 00:00:00.0000000 | 0 | 0 |
| 2024-07-21 00:00:00.0000000 | 58 | 29 |
| 2024-07-28 00:00:00.0000000 | 41 | 18 |
| 2024-08-04 00:00:00.0000000 | 27 | 11 |
内容的提问来源于stack exchange,提问作者user5349170
相关产品推荐
相关产品推荐

