库斯托 |添加列以显示总数的百分比
Kusto | add column to show percentages of total
我已经看到了其他几个与此类似的问题,但每个问题都略有不同,none 其中提供了一个我能够适应我的情况的答案。我有一个 table 这样的:
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/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)
我已经看到了其他几个与此类似的问题,但每个问题都略有不同,none 其中提供了一个我能够适应我的情况的答案。我有一个 table 这样的:
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)