库斯托添加列以显示总数的百分比

我已经看到了其他几个与此类似的问题,但每个问题都略有不同,并且没有一个提供我能够适应我的情况的答案。我有一张这样的表:

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 Totalsummarize 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/toscalarfunction
  • as运营商: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)


以上是库斯托添加列以显示总数的百分比的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>