【问题标题】:Kusto Query - using case() and range() to group resultsKusto Query - 使用 case() 和 range() 对结果进行分组
【发布时间】:2021-10-15 20:33:14
【问题描述】:

我需要将现有的错误代码分组(例如:101到118的代码属于一个服务,201到213的代码属于另一个)并按类别统计错误代码的数量。

我使用了 case 函数,并在其中使用了错误代码范围,它运行良好,但由于某种原因,它显示错误代码 004 作为“其他”案例的一部分。为什么会这样?

| extend codeRange = case(Code in (range(001, 004, 1)), "GeneralMessages",
                      Code in (range(101, 118, 1)), "TransactionProcessing",
                      Code in (range(201, 213, 1)), "RulesExecution",
                      Code in (range(301, 335, 1)), "MerchantRefData",
                      Code in (range(401, 403, 1)), "BinProcessing",
                      Code in (range(501, 505, 1)), "ExchangeRateProcessing",
                      Code in (range(601, 603, 1)), "DecisionRouting",
                      Code in (range(701, 709, 1)), "TransactionRegistry",
                      Code in (range(801, 805, 1)), "ClientScore",
                      Code in (range(901, 903, 1)), "PayEngineConfig",
                      Code in (range(1001, 1003, 1)), "SecureService",
                      Code in (range(1101, 1108, 1)), "ProxyAPI", 
                      "Other")
| project ErrorFrom, Message, Code, operation_Id, codeRange

Screenshot of the result

预期结果是 Code 004 的 codeRange 将设置为 GeneralMessages,而不是 Other。

【问题讨论】:

    标签: syntax azure-data-explorer kql


    【解决方案1】:

    您是否将其与字符串“004”进行比较? range 函数将创建一个数字数组,其值从 1 到 4(包括 4),因此如果与字符串“004”进行比较,它将找不到它。

    尝试将错误代码转换为int:

    print range(001, 004, 1)
    | mv-expand print_0
    | where print_0 == toint("004")
    

    【讨论】:

    • 谢谢,我用过类似的东西,用trim_start()把字符串中的“00”剪掉了,效果很好。
    • 转换为 int 可能会更快
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    相关资源
    最近更新 更多