Daily Driver Transformations for Decision-Ready Panels

Introduction: Turning “Correct Data” into “Decision-Ready Data”

At this point in the course, you already know how to get Grafana-ready time series, how to enrich them with joins, and how to keep dashboards reusable with clean field organization.

This unit is about the last mile: shaping results into something a human can scan in five seconds and confidently act on. In practice, that usually means taking a dataset that’s technically correct and making it smaller, clearer, and ranked.

The transformations you’ll use constantly for that are:

  • Filter data by values
  • Group by
  • Reduce
  • Rename by regex

And one honorable mention that shows up everywhere operational dashboards exist:

  • Sort by

Grafana transformations run sequentially (top to bottom). Each transformation modifies the dataset that the next transformation receives, so the order is part of the logic. For example, Reduce → Sort by creates a meaningful “Top offenders” ranking, while Sort by → Reduce usually just rearranges raw datapoints before collapsing them.

Part 1: Filter Data by Values (Make the Panel Stop Yelling)

Filter data by values is a noise-reduction transformation that lets you hide data that isn’t actionable, without changing the underlying query. This keeps your SQL reusable and shifts “what matters right now” decisions into the panel itself. It’s especially useful for dashboards where normal behavior should fade into the background and only problematic states should draw attention.

Imagine a table of API request metrics with fields like endpoint, latency_ms, and error_rate. Most endpoints respond quickly and have no errors, but occasionally one endpoint becomes slow or unstable. Rather than showing everything, you can filter the data so the panel only displays rows where latency_ms is high or the error rate crosses a threshold. The result is a quieter dashboard that highlights issues instead of normal traffic.

To do this, it helps to understand the key controls:

  • Filter type (Include / Exclude): Include keeps rows that match your condition (for example, keep requests with latency ≥ 500 ms), while Exclude removes matching rows (for example, hide rows where status is 200).
  • Match all / Match any: determines how multiple conditions work together. Match all means every condition must be true (latency ≥ 500 and error_rate ≥ 1%), while Match any means a row is kept if at least one condition is true.
  • Field: the column you are filtering on, such as latency_ms or error_rate. Transformations work on table fields, not on the visual series names in the chart.
  • Match condition: defines how the comparison is done, such as greater than, equal to, or is null.

This panel filters out normal API traffic and only shows latency values above 500 ms, making performance issues immediately visible without changing the underlying query.

Used together, these options let you shape attention rather than data: the query defines what exists, and Filter data by values defines what deserves to be seen.

Sign up

Join the 1M+ learners on CodeSignal

Be a part of our community of 1M+ users who develop and demonstrate their skills on CodeSignal