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

KQL中调用函数传入日期时间范围报错,求解决方案

问题原因

错误提示argument #1 must be a scalar expression的核心原因是类型不匹配:

  • MyFunction定义的参数x是标量datetime类型(单个日期值)
  • 调用时传入的range timestamp from startDate to endDate step 1生成的是包含多行timestamp的表类型,不符合函数参数要求。

另外原调用中的step 1会生成每秒的日期数据,显然不符合按天统计的业务逻辑,后续方案中将调整为step 1d(按天遍历)。

解决方案

提供两种可行方案,可根据需求选择:

方案1:修改函数接收起止日期,内部处理遍历

直接让MyFunction接收起始、结束日期两个标量参数,内部生成每日日期序列并调用MyMetrics:

// 重新定义接收起止日期的MyFunction
let MyFunction = (startDate:datetime, endDate:datetime) {
    // 生成从startDate到endDate的每日日期列表
    range day from startDate to endDate step 1d
    // 对每个日期,调用MyMetrics(前一天, 当前日期)
    | invoke MyMetrics(day - 1d, day)
};
// 定义目标日期范围
let startDate = datetime(2023-07-15);
let endDate = datetime(2023-07-17);
// 调用函数
MyFunction(startDate, endDate)

方案2:保留原单参数函数,用mv-apply遍历表

如果不想修改MyFunction的参数定义,可通过mv-apply将range生成的表逐行传入函数:

// 保留原MyFunction定义
let MyFunction = (x:datetime) {
  MyMetrics(x - 1d, x)
};
// 定义目标日期范围
let startDate = datetime(2023-07-15);
let endDate = datetime(2023-07-17);
// 生成每日日期表,逐行调用MyFunction
range timestamp from startDate to endDate step 1d
| mv-apply timestamp on (MyFunction(timestamp))
补充说明
  • 原MyMetrics函数中,last1daydata的summarize包含bin(timestamp, 1d),但后续join仅关联CarType和operation,该字段不影响join结果,若不需要可直接移除。
  • 需确保Events表存在且包含totalCount、operation、CarType、timestamp字段,否则会触发字段不存在的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:21:21