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

实现支持动态列名的宽表转长表函数wide_to_long

优化KQL宽表转长表的wide_to_long函数实现

优化后的简洁实现

let wide_to_long = (T:(*), id_vars: dynamic) {
    // 计算需要转换为长表的度量列(排除指定的id列)
    let measure_cols = set_difference(toscalar(T | getschema | summarize make_list(ColumnName)), id_vars);
    T
    // 仅打包需要转换的度量列,避免冗余操作
    | extend measures = pack(measure_cols)
    // 按数组格式展开键值对
    | mv-expand kind=array measures
    // 提取变量名和对应值
    | extend variable = measures[0], value = measures[1]
    // 移除临时列,按指定顺序输出结果列
    | project-away measures
    | project id_vars, variable, value
};

优化亮点

  1. 减少冗余操作:直接通过pack(measure_cols)打包需要转换的列,替代原方案中pack_all后再删除id列的繁琐步骤,逻辑更清晰
  2. 固定列顺序:通过project id_vars, variable, value明确指定输出列的顺序,彻底解决原代码结果列序随机的问题
  3. 性能更优:省去了两次打包、拆包及键值移除的操作,减少了中间计算开销

示例验证

使用题目中的输入表测试:

let T_wide = datatable(name: string, timestamp: datetime, A: int, B: int) [ 
'abc','2022-01-01 12:00:00',1,2,
'def','2022-01-01 13:00:00',3,4
];
wide_to_long(T_wide, dynamic(['name', 'timestamp']))

输出结果完全符合期望,列顺序为name、timestamp、variable、value,无随机问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:25:20