我得到了以下数据集:
let data = datatable(Timestamp:datetime, Name:string, Value:int)
[
datetime(2022-02-18 10:00:00 AM), "AX_100A_A00", 100,
datetime(2022-02-18 10:01:00 AM), "BX_101B_B00", 200,
datetime(2022-02-18 10:02:00 AM), "CX_102C_C00", 300,
datetime(2022-02-18 10:03:00 AM), "DX_103D_D00", 400,
datetime(2022-02-18 10:04:00 AM), "EX_104E_E00", 500,
];
let mydict = dynamic(
{
"100A":"New York"
,"101B":"Geneva"
,"102C":"France"
,"103D":"US"
,"104E":"Canada"
}
);
data
| summarize result = max(Value) by Floor_Name = tostring(mydict[substring(Name, 3, 4)])
为了说明我在这里想要实现的目标。两个下划线之间有一个代表特定位置的代码。
我的问题是,如何添加一个条件来检查两个下划线之间的单词是否不作为字典中的键存在,然后只显示两个下划线之间的值。但是,如果它确实存在于字典中,则显示其友好名称。让我们假设添加了一个新名称 FX_105F_F00。在这种情况下,由于在字典中找不到它,因此不应显示友好名称。它将按原样显示。应该在代码中的楼层名称中添加 iff 条件,但语法应该如何?
最佳答案
这里有几点需要注意:
- 对 JSON 文档中不存在的键进行寻址是有效的。
在这种情况下返回的结果将为 null。 - The string data type doesn't support null values .
使用tostring() null 值将返回空字符串。 - coalesce()确实适用于空字符串,与适用于其他数据类型的空值的方式相同。
所以,对于 105F
, mydict["105F"]
为 null 并且 tostring( mydict["105F"]
) 是一个空字符串,因此合并继续到第二个值 (Floor_Code)。
let data = datatable(Timestamp:datetime, Name:string, Value:int)
[
datetime(2022-02-18 10:00:00 AM), "AX_100A_A00", 100,
datetime(2022-02-18 10:01:00 AM), "BX_101B_B00", 200,
datetime(2022-02-18 10:02:00 AM), "CX_102C_C00", 300,
datetime(2022-02-18 10:03:00 AM), "DX_103D_D00", 400,
datetime(2022-02-18 10:04:00 AM), "EX_104E_E00", 500,
datetime(2022-02-18 10:05:00 AM), "FX_105F_F00", 600
];
let mydict = dynamic(
{
"100A":"New York"
,"101B":"Geneva"
,"102C":"France"
,"103D":"US"
,"104E":"Canada"
}
);
data
| extend Floor_Code = substring(Name, 3, 4)
| summarize result = max(Value) by Floor_Name = coalesce(tostring(mydict[Floor_Code]), Floor_Code)
关于azure-data-explorer - 检查 Kusto 的特定列中是否存在字典的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72618246/