使用KQL创建工作簿磁贴,其中使用了参数-在本例中为VirtualMachines。
如果我在参数中只选择了1个虚拟机的情况下运行以下操作,将显示结果。如果我选择了2个或更多VM,则会出现错误,说明无法解析结果,错误输出显示VM 1、VM 2。
为参数配置的分隔符为,
如何更正以下查询以使用多个VirtualMachine参数选择?
InsightsMetrics
| where Origin == "vm.azm.ms"
| where Namespace == "LogicalDisk" and Name == "FreeSpacePercentage"
| extend Disk=tostring(todynamic(Tags)["vm.azm.ms/mountId"])
| extend vmName = tostring(toupper(Computer))
| extend VM_Name = tostring(split(vmName,'.')[0])
| summarize AggregatedValue = avg(Val) by VM_Name, Disk, _ResourceId
| where VM_Name in '{VirtualMachines:label}'
| top 30 by AggregatedValue asc
字符串
谢啦,谢啦
3条答案
按热度按时间rn0zuynd1#
如果我在参数中只选择了1个虚拟机的情况下运行以下操作,将显示结果。如果我选择了2个或更多VM,则会出现错误,说明无法解析结果,错误输出显示VM1、VM2。
感谢
Craig
提出同样的建议。应将
["VM1", "VM2"]
替换为包含所选VMs
的实际参数名称。方法:1
字符串
输出:
的数据
方法二:
要使查询能够使用多个
VirtualMachine
参数选择,您应该使用in
运算符沿着dynamic
函数来构造适当的动态表达式,而不是使用in
运算符。型
通过使用
in (selectedVMs)
表达式,查询将根据selectedVMs
数组中的VM names
筛选结果。输出:
的
mcdcgff02#
谢谢大家的帮助。我通过使用以下代码实现了这一点:
字符串
voj3qocg3#
仅供参考:对于工作簿中的单值参数,参数的值只是文本,因此需要在查询文本中用引号将其括起来
因此,如果
VirtualMachines
是一个单值参数,您可以在查询中这样使用它:字符串
然后就变成了
型
在查询时间。
但是,当使用 * 多值下拉参数 * 时,参数设置有用于引号(默认为
'
)和分隔符(默认为,
)的选项,因此您必须像这样使用它:型
在查询时被解析为
型
对于多值参数,特别是可选的,最好的方法是使用let:
型
因为这样你就可以像
型
这在语法上是有效的,即使没有选择任何计算机(因此,如果没有选择任何计算机,您可以像
|where array_length(machines)==0 or machine in (machines)
一样允许所有计算机