库斯托添加列以显示总数的百分比
我已经看到了其他几个与此类似的问题,但每个问题都略有不同,并且没有一个提供我能够适应我的情况的答案。我有一张这样的表:
let T =
datatable(Val1:string, Val2:string, Val3:bool)
[
'', 'false', 'false',
'Yes', 'false', 'true',
'No', 'false', 'false',
'Yes', 'false', 'false'
]
;
我只想得到 Val3 为假的结果,按 Val1 和 Val2 汇总计数,然后扩展一列以显示每一行的整体百分比。我试过这样做:
T
| where Val3 == "false"
| summarize Count = count() by Val1, Val2
| let Total = sum(Count)
| extend Percentage = round(100.0 * Count/Total, 0)
这会引发错误"A recognition error occurred. Token: let"而且我尝试了许多变体,例如:
T
| where Val3 == "false"
| summarize Count = count() by Val1, Val2
| extend Total = sum(Count)
| extend Percentage = round(100.0 * Count/Total, 0)
这会引发错误"Function 'sum' cannot be invoked in current context"。如果我改变extend Total到summarize Total那么该行的作品,但它抛出关于下一行不承认计数错误。如果我在汇总行上添加 Count ,如下所示:
| summarize Total = sum(Count), Count
然后我得到一个错误"Non valid aggregation function is used after summarize"。这是我要的输出:
这似乎比它应该的要困难得多。我错过了什么?
回答
您可以使用子查询计算百分比以获取传递到toscalar(). 在下面的示例中,我还使用了as运算符。
toscalar():https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/toscalarfunctionas运营商:https : //docs.microsoft.com/en-us/azure/data-explorer/kusto/query/asoperator
datatable(Val1:string, Val2:string, Val3:bool)
[
'', 'false', 'false',
'Yes', 'false', 'true',
'No', 'false', 'false',
'Yes', 'false', 'false'
]
| where Val3 == "false"
| as T
| summarize Count = count() by Val1, Val2
| extend Percentage = round(100.0 * Count / toscalar(T | count), 2)
或者,遵循相同的概念 - 这是一个替代方案:
datatable(Val1:string, Val2:string, Val3:bool)
[
'', 'false', 'false',
'Yes', 'false', 'true',
'No', 'false', 'false',
'Yes', 'false', 'false'
]
| where Val3 == "false"
| summarize Count = count() by Val1, Val2
| as T
| extend Percentage = round(100.0 * Count / toscalar(T | summarize sum(Count)), 2)