如何在Azure Workbook中使用KQL动态删除不符合Locale的空列?
解决方案
方法一:根据Locale直接删除目标列(推荐)
既然你明确知道当前Locale的值(无论是硬编码还是从Azure Workbook参数传入),无需动态检查列是否为空,直接通过project-away配合case语句删除对应Locale不需要的列即可,逻辑简单且高效:
// 定义Locale变量,可替换为实际参数值(比如工作簿中的参数) let current_locale = "fr-CA"; // 你的原始数据处理逻辑... | project ItemName = iff(current_locale == "en-CA", strcat(ItemName_s, iff(Required_s=="False"," (R)", " (M)")), ""), ["Nom de l article"] = iff(current_locale == "fr-CA", strcat(ItemName_s, iff(Required_s=="False"," (R)", " (M)")), "") // 根据Locale删除对应空列 | project-away (case(current_locale == "en-CA", "Nom de l article", "ItemName"))
方法二:动态检查并删除全空列(适用于Locale不确定的场景)
如果需要通用处理所有可能的空列(比如Locale有更多取值),可以通过聚合统计列的非空行数,再动态生成要删除的列名列表:
// 先执行原始查询生成目标列 let raw_data = ( // 你的原始数据处理逻辑... | project ItemName = iff("fr-CA" == "en-CA", strcat(ItemName_s, iff(Required_s=="False"," (R)", " (M)")), ""), ["Nom de l article"] = iff("fr-CA" == "fr-CA", strcat(ItemName_s, iff(Required_s=="False"," (R)", " (M)")), "") ); // 统计每列非空行数,筛选出全空的列 let empty_cols = raw_data | summarize has_itemname = countif(ItemName != ""), has_french_name = countif(["Nom de l article"] != "") | extend cols_to_remove = dynamic([ iff(has_itemname == 0, "ItemName", ""), iff(has_french_name == 0, "Nom de l article", "") ]) | mv-expand cols_to_remove to typeof(string) | where cols_to_remove != "" | summarize make_set(cols_to_remove); // 从原始数据中删除全空列 raw_data | project-away (empty_cols)
更优写法:直接生成对应Locale的列(避免生成空列)
可以跳过生成两列再删除的步骤,直接根据Locale动态生成目标列,从根源上避免空列:
let current_locale = "fr-CA"; // 你的原始数据处理逻辑... | extend column_value = strcat(ItemName_s, iff(Required_s=="False"," (R)", " (M)")) | project (case( current_locale == "en-CA", "ItemName", current_locale == "fr-CA", "Nom de l article", "" )): column_value
内容的提问来源于stack exchange,提问作者Ali Alvi
相关产品推荐
相关产品推荐

