Data product scorecard
One row per data product with its health, coverage, alerts, time to fixed and credits, worst first.
Private previewComposable dashboards and the metrics API are in private preview: available to invited accounts, and features may change. See Integration and feature lifecycles for what this means, and reach out to your account representative to request access.
Overview
Every data product side by side: can its tables be trusted this week, how much of it is monitored, how many alerts it had and how fast they were fixed, and what its monitors cost. Use it to see which data product needs attention, then open it in Monte Carlo.
For: data product owners, data team leads. Metrics: Data quality, Coverage, Consumption.
An example built from the prompt below, with sample names and values.
Prompt
Copy this prompt into an AI tool connected to the Monte Carlo MCP server. With the dashboard skills from the Monte Carlo agent toolkit installed (in coding agents such as Claude Code, Cursor, Codex and GitHub Copilot), your agent reads this page, builds the layout and runs the queries below; without them, it works from the metrics alone.
Build a data product scorecard with one row per data product: asset health over 7 days, coverage and key tables without a monitor, alerts, open alerts and median time to fixed over 30 days, alerts per week as a sparkline, and credits over 30 days.What it covers
- One row per data product: its data quality score this week and how many tables pass.
- Its coverage and the key tables without a monitor.
- Its alerts, open alerts and median time to fixed in the last 30 days, and alerts per week as a trend.
- The credits its monitors used in the last 30 days.
Filters and groupings
- One data product or several; every data product by default.
- The same scorecard per domain or asset tag with the
domain_andasset_tag_metrics. - Windows: data quality over 7 days, alerts and credits over 30 days, the trend over 13 weeks.
How it's built
The layout, queries and definitions your agent follows; use them to check its numbers or to build the dashboard by hand.
Layout
- Filter: none; every data product is a row.
- The answer: how many data products there are, and how many have a table that alerted in the last 7 days.
- Scorecard: one row per data product, lowest health first, the ones with no result last: health with "x of y tables passing", coverage rate with "x of y tables", key tables without a monitor, alerts, open alerts and median time to fixed in the last 30 days, alerts per week over 13 weeks as a sparkline, and credits in the last 30 days.
Queries
Health is over the 7 days up to the last data refresh and coverage is the current state; the other blocks take the window on their filter.
The answer
- Metrics:
data_product_count - Filter:
data_product__is_data_product_deletedisfalse
Request (JSON)
{
"metrics": ["data_product_count"],
"filters": [
{
"field": "data_product__is_data_product_deleted",
"op": "in",
"values": [false]
}
]
}The data products with a table that alerted are the scorecard rows whose health is below 100%.
Health and coverage
- Metrics:
data_product_asset_health_score_7d,data_product_coverage_rate,data_product_population_assets,data_product_covered_assets,data_product_uncovered_key_assets - Grouped by:
data_product,data_product__data_product_name - Filter:
data_product__is_data_product_deletedisfalse
Request (JSON)
{
"metrics": [
"data_product_asset_health_score_7d",
"data_product_coverage_rate",
"data_product_population_assets",
"data_product_covered_assets",
"data_product_uncovered_key_assets"
],
"group_by": [
"data_product",
"data_product__data_product_name"
],
"filters": [
{
"field": "data_product__is_data_product_deleted",
"op": "in",
"values": [false]
}
]
}Parts of health
- Metrics:
data_product_population_assets - Grouped by:
data_product,data_product__data_product_name,asset__is_asset_with_result_7d,asset__is_asset_alerting_7d - Filter:
data_product__is_data_product_deletedisfalse
Request (JSON)
{
"metrics": ["data_product_population_assets"],
"group_by": [
"data_product",
"data_product__data_product_name",
"asset__is_asset_with_result_7d",
"asset__is_asset_alerting_7d"
],
"filters": [
{
"field": "data_product__is_data_product_deleted",
"op": "in",
"values": [false]
}
]
}Alerts and time to fixed
- Metrics:
data_product_incident_count,data_product_incident_open_count,data_product_incident_median_ttr_hours - Grouped by:
data_product,data_product__data_product_name - Filter:
metric_time__dayon or after 30 days ago;data_product__is_data_product_deletedisfalse
Request (JSON)
{
"metrics": [
"data_product_incident_count",
"data_product_incident_open_count",
"data_product_incident_median_ttr_hours"
],
"group_by": [
"data_product",
"data_product__data_product_name"
],
"filters": [
{
"field": "metric_time__day",
"op": "gte",
"values": ["<30 days ago>"]
},
{
"field": "data_product__is_data_product_deleted",
"op": "in",
"values": [false]
}
]
}Fixed alerts behind the median
- Metrics:
data_product_incident_count - Grouped by:
data_product,data_product__data_product_name - Filter:
metric_time__dayon or after 30 days ago;incident__incident_ttr_hoursat least0;data_product__is_data_product_deletedisfalse
Request (JSON)
{
"metrics": ["data_product_incident_count"],
"group_by": [
"data_product",
"data_product__data_product_name"
],
"filters": [
{
"field": "metric_time__day",
"op": "gte",
"values": ["<30 days ago>"]
},
{
"field": "incident__incident_ttr_hours",
"op": "gte",
"values": ["0"]
},
{
"field": "data_product__is_data_product_deleted",
"op": "in",
"values": [false]
}
]
}Only fixed alerts have a time to fixed, so this counts them. One fixed alert in several data products gives them all the same median.
Alerts per week
- Metrics:
data_product_incident_count - Grouped by:
data_product,data_product__data_product_name,metric_time__week - Filter:
metric_time__dayon or after the start of the week 13 weeks ago;data_product__is_data_product_deletedisfalse
Request (JSON)
{
"metrics": ["data_product_incident_count"],
"group_by": [
"data_product",
"data_product__data_product_name",
"metric_time__week"
],
"filters": [
{
"field": "metric_time__day",
"op": "gte",
"values": ["<start of the week 13 weeks ago>"]
},
{
"field": "data_product__is_data_product_deleted",
"op": "in",
"values": [false]
}
]
}Credits
- Metrics:
data_product_consumed_credits - Grouped by:
data_product,data_product__data_product_name - Filter:
metric_time__dayon or after 30 days ago;account__is_account_on_credit_pricingistrue;data_product__is_data_product_deletedisfalse
Request (JSON)
{
"metrics": ["data_product_consumed_credits"],
"group_by": [
"data_product",
"data_product__data_product_name"
],
"filters": [
{
"field": "metric_time__day",
"op": "gte",
"values": ["<30 days ago>"]
},
{
"field": "account__is_account_on_credit_pricing",
"op": "in",
"values": [true]
},
{
"field": "data_product__is_data_product_deleted",
"op": "in",
"values": [false]
}
]
}Each data product links to its page, its alerts and its Data quality dashboard in Monte Carlo.
Definitions
- Health is not the product's Data quality dashboard score, which counts monitors.
- Time to fixed: a data product with no fixed alert shows "no fixed alerts".
- Credits are not split: a monitor that covers tables of several data products counts its full credits in each, so a data product with one table can show the credits of a monitor on hundreds of tables. Say so under the credits column.
- Health counts live monitors: a table counts as alerted only for alerts of monitors that are still active and on the table; an alert from a monitor paused since does not count.
- Data products overlap: a table, alert, monitor or its credits in two data products counts in both, so the rows do not add up to the account's numbers; see Totals across members on the Dimensions page.
Updated 1 day ago
