Prometheus query for table in grafana

After some experimentations in Grafana 9.1.1, I have obtained a way to construct a table like you have described with prometheus metric like that. Here are Grafana transform functions you will need:

  1. Labels to fields
    This function separate the labels in the metric to columns.
  • Set Mode to Columns
  • Set Labels to be only the columns that are relevant so in this case it's my_col and my_row
  • Set Value field name to my_col
  1. Reduce
    This function reduce all values in separate times into one row.
  • Set Mode to Reduce fields
  • Set Calculations to Last*. You may change this part according to your needs.
  • Set include time to false
  1. Merge
    This function will merge all datasets into one with corresponding columns.
  2. Organize fields
    Finally, this function will help you reorganize the table into something that's more proper. For presenting the data in bar chart, ensure that my_row column is the most left one.

There is some documentation in the Grafana docs about Table Panels here: https://grafana.com/docs/features/panels/table_panel/#table-panel

The particular transform you showed in the example doesn't appear to be supported in the above documentation unfortunately.

If possible, a change to the structure of the prometheus data to something like the below should make this easier:

my_metric{instance="lh",job="job",col_1="6",col_2="8",my_row="A"}
my_metric{instance="lh",job="job",col_1="10",col_2="17",my_row="B"}

It is possible with Grafana 7.0.3. I think it was possible with earlier versions as well, but the approach has changed since 7.0.0 with the introduction of transformations.

Add two queries:

my_metric{instance="lh",job="job",my_col="1"}
my_metric{instance="lh",job="job",my_col="2"}

Make them instant queries and format them as tables. Create the transformation Outer join and join by my_col. You should get the two values as Value #A and Value #B. You can use the transformation Organize fields to rename them and drop all the other fields.