首页 > 解决方案 > Kusto:如何将表值转换为标量并从用户定义的函数返回

问题描述

我有以下用户定义的函数,目的是使用条件条件来输出 0 或 1 的表,说明帐户是否处于活动状态。

case 需要标量值作为它的参数,即 pro_account_active(account) 和 basic_account_active(account) 需要是标量值。

我正在努力解决 toscalar 的限制:

用户定义的函数不能传递到取决于调用函数的行上下文的 toscalar() 调用信息。

我想如果有一个函数可以代替“??????” 这会将 active 转换为标量并从它可以工作的函数中返回它。

非常感谢任何帮助

let basic_account_active=(account:string) {
    basic_check_1(account) // returns 0 or 1 row only
    | union basic_check_2(account)
    | summarize result_count = count()
    | extend active = iff(result_count == 2, 1, 0)
    | ??????
};
let pro_account_active=(account:string) {
    pro_check_1(account) // returns 0 or 1 row only
    | union pro_check_2(account)
    | summarize result_count = count()
    | extend active = iff(result_count == 2, 1, 0)
    | ??????
};
let is_active=(account_type:string, account:string) {
    case(
        account_type == 'pro', pro_account_active(account),
        account_type == 'basic', basic_account_active(account),
        -1
    )
};
datatable(account_type:string, account:string)
[
 'pro', '89e5678a92',
 'basic', '9d8263da45',
 'pro', '0b975f2454a',
 'basic', '112a3f4753',
]
| extend result = is_active(account_type, account)

标签: azure-data-explorerkql

解决方案


您可以使用该toscalar()函数将查询的输出转换为标量,即

let basic_account_active=(account:string) {
toscalar(basic_check_1(account) // returns 0 or 1 row only
| union basic_check_2(account)
| summarize result_count = count()
| extend active = iff(result_count == 2, 1, 0))};

推荐阅读