I was helping someone elsewhere and thought I should share this here.
SELECT [Metrics].ValueToMonitor.ApiPoller.Node.DisplayName AS [Node Name] , [Metrics].ValueToMonitor.ApiPoller.Node.DetailsUrl AS [Node Name_Link] , [Metrics].ValueToMonitor.ApiPoller.DisplayName AS [Poller Name] , [Metrics].ValueToMonitor.ApiPoller.DetailsUrl AS [Poller Name_Link] , [Metrics].ValueToMonitor.DisplayName AS [Metric Name] , [Metrics].ValueToMonitor.DetailsUrl AS [Metric Name_Link] , AVG([Metrics].AvgMetric * 1.0) AS [Average (Last 24 Hours)] , MIN([Metrics].MinMetric * 1.0) AS [Minimum (Last 24 Hours)] , MAX([Metrics].MaxMetric * 1.0) AS [Maximum (Last 24 Hours)] , [Metrics].Status AS [Current Status] FROM Orion.APIPoller.ValueToMonitor.Metrics AS [Metrics] -- The above is just too big, so only give me the last 1 day WHERE [Metrics].ObservationTimestamp >= GETUTCDATE() - 1 -- "right-now" minum 1 (day) -- Filter for a specific API Poller by name -- AND [Metrics].ValueToMonitor.ApiPoller.DisplayName = 'Pi-Hole Status' -- Filter for a specific API Poller Metric by name match -- AND [Metrics].ValueToMonitor.DisplayName LIKE 'Query%' GROUP BY [Metrics].ValueToMonitor.ApiPoller.Node.DisplayName , [Metrics].ValueToMonitor.ApiPoller.Node.DetailsUrl , [Metrics].ValueToMonitor.ApiPoller.DisplayName , [Metrics].ValueToMonitor.ApiPoller.DetailsUrl , [Metrics].ValueToMonitor.DisplayName , [Metrics].ValueToMonitor.DetailsUrl , [Metrics].Status ORDER BY [Metrics].ValueToMonitor.ApiPoller.Node.DisplayName , [Metrics].ValueToMonitor.ApiPoller.DisplayName , [Metrics].ValueToMonitor.DisplayName
This query connects the metric to the API poller, and then back to the assigned node. I used this example to build a very simple modern dashboard.
In my environment, I only have the one poller setup, so that's all it returns. I left a bunch of comments in the above to provide some other ways to filter it. I'm happy to answer questions.