检查字典的键是否存在于Kusto的特定列中?



我得到了以下数据集:

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条件。但是语法应该是怎样的呢?

有几点需要注意:

  1. 在JSON文档中寻址不存在的键是有效的。
    在这种情况下返回的结果将为null。
  2. 字符串数据类型不支持空值。
    对空值使用tostring()将返回空字符串。
  3. 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)
tbody> <<tr>日内瓦法国我们加拿大道明><</td>
Floor_Nameresult
纽约100
200
300
400
500
105 f600

相关内容

最新更新