如何在ADX中通过单个Kusto查询生成多聚合图表无需单独添加磁贴
ADX单条KQL生成多份聚合图表的实现方案
目前原生Azure Data Explorer仪表盘暂不支持单条查询输出多份独立结果集后自动拆分为多个独立图表,你可以通过以下两种方案间接实现需求,不需要重复编写核心查询逻辑,也能避免多次查询的资源消耗:
方案1:使用fork算子一次计算所有聚合,多磁贴复用同一查询结果
fork算子可以在一次查询运行中并行计算多个聚合分支,输出多份独立结果集,你只需要将同一份查询作为多个磁贴的数据源,分别选择对应结果集渲染即可:
// 示例表名为VMStatistics,可替换为你实际的表名 VMStatistics | fork // 分支1:按操作系统+运行状态统计数量 ( summarize VMCount = count() by OS, RuntimeStatus ), // 分支2:按虚拟机规格统计成本数据 ( summarize AvgCost = avg(Cost), TotalCost = sum(Cost) by VMSize )
配置步骤:
- 第一个磁贴使用上述查询作为数据源,选择第一个输出结果集,按需求渲染为柱状图/饼图即可展示不同操作系统的虚拟机状态分布
- 第二个磁贴复用同一查询作为数据源,选择第二个输出结果集,渲染为散点图/柱状图即可展示虚拟机规格与成本的关联关系
该方案仅会执行一次查询计算,两个磁贴共享计算结果,性能优于编写两条独立查询。
方案2:结果集打标记,磁贴通过过滤拆分数据
如果你希望完全复用同一份查询结果,不需要选择不同输出分支,可以将多个聚合结果合并到同一结果集,通过标记字段区分不同图表的数据源:
// 计算操作系统状态统计结果,添加图表类型标记 let OSStateData = VMStatistics | summarize Count = count() by Dim1 = OS, Dim2 = RuntimeStatus | extend ChartType = "OS状态统计"; // 计算规格成本统计结果,统一字段结构,添加标记 let SizeCostData = VMStatistics | summarize Value = sum(Cost) by Dim1 = VMSize, Dim2 = "总成本" | extend ChartType = "规格成本统计"; // 合并两份结果 union OSStateData, SizeCostData
配置步骤:
- 两个磁贴均使用上述查询作为数据源
- 第一个磁贴添加过滤条件
ChartType == "OS状态统计",选择对应维度渲染图表 - 第二个磁贴添加过滤条件
ChartType == "规格成本统计",选择对应维度渲染图表
内容的提问来源于stack exchange,提问作者Milo_Dev
相关产品推荐
相关产品推荐

