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

Kusto中带条件使用percentile()计算用户状态分位数问题咨询

完整Kusto查询实现

// 构造示例测试数据,实际使用时替换为你自己的表名即可
let SampleData = datatable(OnStatus:bool, OffStatus:bool, WebId:int, UserId:string)
[
    true, false, 1, "A123",
    true, false, 2, "A123",
    true, false, 3, "A123",
    false, true, 4, "A123",
    false, true, 1, "B123",
    false, true, 2, "B123",
    false, true, 3, "B123",
    false, true, 4, "B123"
];

步骤1:按用户维度输出分位数状态值

SampleData
// 按用户聚合计算状态为true的记录数和总记录数
| summarize 
    TotalRecords = count(),
    OnTrueCount = countif(OnStatus == true),
    OffTrueCount = countif(OffStatus == true)
by UserId
// 按占比判断分位数状态,完全匹配你给出的示例输出逻辑
| extend 
    P50_StatusOn = (OnTrueCount * 1.0 / TotalRecords) >= 0.5,
    P95_StatusOn = (OnTrueCount * 1.0 / TotalRecords) >= 0.95,
    P50_StatusOff = (OffTrueCount * 1.0 / TotalRecords) >= 0.5,
    P95_StatusOff = (OffTrueCount * 1.0 / TotalRecords) >= 0.95
// 输出指定字段
| project UserId, P50_StatusOn, P95_StatusOn, P50_StatusOff, P95_StatusOff

步骤2:统计各分位数状态的总计数

SampleData
| summarize 
    TotalRecords = count(),
    OnTrueCount = countif(OnStatus == true),
    OffTrueCount = countif(OffStatus == true)
by UserId
| extend 
    P50_StatusOn = (OnTrueCount * 1.0 / TotalRecords) >= 0.5,
    P95_StatusOn = (OnTrueCount * 1.0 / TotalRecords) >= 0.95,
    P50_StatusOff = (OffTrueCount * 1.0 / TotalRecords) >= 0.5,
    P95_StatusOff = (OffTrueCount * 1.0 / TotalRecords) >= 0.95
// 聚合统计各状态为true的总数量
| summarize
    P50_StatusOnCnt = countif(P50_StatusOn == true),
    P95_StatusOnCnt = countif(P95_StatusOn == true),
    P50_StatusOffCnt = countif(P50_StatusOff == true),
    P95_StatusOffCnt = countif(P95_StatusOff == true)

调用原生percentile()函数的写法

因Kusto原生percentile()采用最近秩算法,计算4条记录的95分位时会取排序后的第4个值,和示例输出的P95逻辑略有差异,若需强制使用原生函数可参考以下写法:

// 步骤1 原生percentile实现
SampleData
| extend OnStatusInt = iif(OnStatus, 1, 0), OffStatusInt = iif(OffStatus, 1, 0)
| summarize 
    P50_On = percentile(OnStatusInt, 50),
    P95_On = percentile(OnStatusInt, 95),
    P50_Off = percentile(OffStatusInt, 50),
    P95_Off = percentile(OffStatusInt, 95)
by UserId
| extend 
    P50_StatusOn = P50_On == 1,
    P95_StatusOn = P95_On == 1,
    P50_StatusOff = P50_Off == 1,
    P95_StatusOff = P95_Off == 1
| project UserId, P50_StatusOn, P95_StatusOn, P50_StatusOff, P95_StatusOff

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:39:03