如何在Kusto KQL中对make_set生成的集合按字母排序?
问题根源
make_set()函数仅负责对字段值去重,返回的集合是无序的——无论你之前执行过多少次sort by,它都不会保留排序后的顺序,所以你之前的排序操作对最终生成的集合没有影响。
解决办法
有两种实用方法可以生成按字母顺序排序的集合:
方法1:先排序去重,再用make_list保留顺序
make_list()会严格保留输入的顺序,因此可以先对数据去重、排序,再生成列表:
datatable (CaseNumber:string, AmendmentNumber:string, AmendmentNumberRaw:string, AmendmentType:string) [ '5-5-00a000b113z', 'T155', 'T155', 'Non-CTM' , '5-5-00a000b113z', 'A156', 'A156', 'Non-CTM' , '5-5-00a000b113z', 'M157', 'M157', 'Non-CTM' ] | distinct CaseNumber, AmendmentNumber | sort by CaseNumber, AmendmentNumber asc | summarize make_list(AmendmentNumber) by CaseNumber
方法2:生成集合后用array_sort_asc排序
先生成去重集合,再调用array_sort_asc()函数对集合进行字母序排序:
datatable (CaseNumber:string, AmendmentNumber:string, AmendmentNumberRaw:string, AmendmentType:string) [ '5-5-00a000b113z', 'T155', 'T155', 'Non-CTM' , '5-5-00a000b113z', 'A156', 'A156', 'Non-CTM' , '5-5-00a000b113z', 'M157', 'M157', 'Non-CTM' ] | summarize AmendmentSet = make_set(AmendmentNumber) by CaseNumber | extend SortedAmendmentSet = array_sort_asc(AmendmentSet) | project CaseNumber, SortedAmendmentSet
两种方法都能得到你期望的结果:5-5-00a000b113z ["A156","M157","T155"]
内容的提问来源于stack exchange,提问作者PorgtheEaten
相关产品推荐
相关产品推荐

