Northwind Outdoors
Metabase v0.55.8 · generated 2026-09-16 · 138 active questions · 11 dashboards · 28 tables
58 of 138 questions are stale or unused (42%). Archive questions not accessed in 90+ days. Start with collections nobody owns.
12 duplicate groups found. Consolidate duplicate queries, keep one canonical version per metric.
4 organizational issues detected. Add descriptions to top-used questions. Move orphan queries into collections.
2 of 11 dashboards have broken cards, 4 are mostly stale. Fix or remove broken cards from active dashboards. That is what stakeholders see.
Do this first
5- 1
Fix 4 questions pointing at missing tables
highThese questions read tables that no longer exist in the warehouse (legacy_subscriptions, fct_revenue, orders_2022, ...). They fail for everyone who opens them.
349361378409 - 2
Archive 11 exact duplicate queries
high7 groups of structurally identical queries. Keep one from each group and archive the rest.
368374406366399+6 - 3
Review 57 stale queries (90+ days unused)
mediumNobody has opened these in 90+ days. Archive the ones that are no longer needed.
370319310327324+45 - 4
Add descriptions to 83 questions
medium83 of 138 active questions have no description. Start with the most-viewed ones.
372360356398429+15 - 5
Review 5 groups of questions with the same name
lowSame name, different query. They may be old versions, or the same metric measured two ways.
415311323438312+7
Duplicates
12 groups, 11 to archiveStructurally identical queries first, then questions that only share a name. Keep one, archive or reconcile the rest.
These 4 queries are structurally identical. Keep New subscribers by plan (weekly), archive the other 3.
These 3 queries are structurally identical. Keep Net revenue by day, last 90 days, archive the other 2.
These 3 queries are structurally identical. Keep Top products by units sold, last 90 days, archive the other 2.
These 2 queries are structurally identical. Keep Refund rate by product category, trailing 30d, archive the other 1.
These 2 queries are structurally identical. Keep Support tickets per 1k orders, archive the other 1.
These 2 queries are structurally identical. Keep Ad spend vs new customers by channel, archive the other 1.
These 2 queries are structurally identical. Keep Session to order conversion by device, archive the other 1.
3 questions share the name "Weekly Revenue". Review whether all of them are still needed, or consolidate into one.
3 questions share the name "MRR". Review whether all of them are still needed, or consolidate into one.
2 questions share the name "Orders by channel" but read from different source tables (orders, fct_orders). They may be the same metric from different angles.
2 questions share the name "Churn Rate". Review whether all of them are still needed, or consolidate into one.
2 questions share the name "Active Subscribers". Review whether all of them are still needed, or consolidate into one.
Broken questions
4These read tables that no longer exist. They fail for everyone who opens them.
| Question | Reason | Collection |
|---|---|---|
| Subscriptions imported from the old billing system 349 | References missing table: legacy_subscriptions | Data Team / Scratch |
| Daily net revenue (mart) 361 | References missing table: fct_revenue | Board |
| Revenue by month (2022 close) 378 | References missing table: orders_2022 | Finance / Archive |
| Support tickets by customer tier 409 | References missing table: customer_ltv_mart | Support |
Stale questions
57Not opened in 90 days or more. 27 of them have not been opened in 180 days.
| Question | Last used | Days | Views | Owner | Collection |
|---|---|---|---|---|---|
| Refund rate by category (2025 version) 370 | 2024-11-29 | 655 | 12 | Nadia Ferraro | Finance / Archive |
| Cohort retention by signup month 319 | 2025-02-08 | 585 | 8 | Priya Natarajan | Data Team / Scratch |
| Email capture rate by device 310 | 2025-03-05 | 560 | 9 | Ellis Barbour | Growth / Experiments |
| CAC payback by cohort month 327 | 2025-03-27 | 537 | 11 | Ellis Barbour | Growth |
| Repeat purchase rate within 60 days 324 | 2025-05-09 | 494 | 16 | Priya Natarajan | Growth |
| Customers without an order 380 | 2025-05-14 | 490 | 15 | Marcus Oyelaran | Growth |
| Campaign list with budgets 309 | 2025-05-25 | 478 | 3 | Ellis Barbour | Growth / Experiments |
| MRR movement (new, expansion, churn) 333 | 2025-07-04 | 438 | 7 | Marcus Oyelaran | Growth |
| Churned MRR by plan, last 6 months 394 | 2025-07-08 | 434 | 4 | Marcus Oyelaran | Growth |
| Top SKUs for merchandising 369 | 2025-07-24 | 419 | 10 | Nadia Ferraro | No collection |
| Orders per customer distribution 314 | 2025-08-29 | 382 | 4 | Priya Natarajan | Data Team / Scratch |
| Weekly Revenue 311 | 2025-08-30 | 381 | 6 | Ellis Barbour | Growth / Experiments |
Dashboards
11What stakeholders actually open, and what greets them when they do.
| Dashboard | Status | Questions | Stale | Broken | Views | Last viewed | Owner |
|---|---|---|---|---|---|---|---|
| Board KPIs 4401 | healthy | 8 | 0 | 0 | 2,100 | 2026-09-15 | Dana Whitfield |
| Weekly Revenue 4402 | healthy | 6 | 2 | 0 | 640 | 2026-09-13 | Rosa Villalobos |
| Ops Daily 4405 | healthy | 6 | 1 | 0 | 480 | 2026-09-15 | Henrik Solberg |
| Subscription Health 4403 | warning | 6 | 5 | 0 | 310 | 2026-06-12 | Marcus Oyelaran |
| Marketing Attribution 4404 | warning | 5 | 4 | 0 | 220 | 2026-04-27 | Ellis Barbour |
| Support Overview 4406 | broken | 5 | 2 | 1 | 190 | 2026-09-14 | Jamie Okonkwo |
| Inventory 4410 | healthy | 4 | 0 | 0 | 150 | 2026-09-12 | Henrik Solberg |
| Executive Summary (legacy) 4411 | broken | 6 | 4 | 1 | 130 | 2026-07-01 | Grant Ishikawa |
| Cohorts 2023 4407 | warning | 4 | 4 | 0 | 95 | 2025-12-02 | Priya Natarajan |
| Q3 Planning (old) 4408 | warning | 3 | 3 | 0 | 60 | 2025-10-20 | Nadia Ferraro |
| Priya scratch 4409 | unknown | 0 | 0 | 0 | 12 | 2026-08-13 | Priya Natarajan |
Ownership
11Who to talk to before anything gets archived.
| Owner | Questions | Active | Stale |
|---|---|---|---|
| Marcus Oyelaran | 26 | 13 | 13 |
| Henrik Solberg | 24 | 19 | 5 |
| Rosa Villalobos | 20 | 15 | 5 |
| Priya Natarajan | 16 | 5 | 11 |
| Ellis Barbour | 13 | 0 | 13 |
| Jamie Okonkwo | 12 | 9 | 3 |
| Nadia Ferraro | 10 | 6 | 4 |
| Dana Whitfield | 9 | 9 | 0 |
| API key user 41 | 4 | 4 | 0 |
| Grant Ishikawa | 3 | 0 | 3 |
| API key user 57 | 1 | 1 | 0 |
Core data model
22 of 28 tables in useOrdered by how many saved questions read each table. Top 15 shown.
| Table | Questions | Rows | Columns | Referenced by |
|---|---|---|---|---|
| public.orders | 35 | 1,284,000 | 18 | fct_orders, order_items, payments, refunds, shipments, support_tickets |
| public.subscriptions | 18 | 96,500 | 11 | fct_subscription_mrr, int_subscription_periods, subscription_events |
| public.customers | 13 | 412,000 | 12 | dim_customers, events, fct_orders, fct_subscription_mrr, nps_responses, orders, orders_backup_2023, payments, sessions, subscription_events, subscriptions, support_tickets, tmp_cohort_export |
| public.support_tickets | 12 | 158,000 | 12 | none |
| dbt_marts.fct_orders | 10 | 1,284,000 | 11 | none |
| public.order_items | 9 | 3,942,000 | 8 | none |
| public.products | 9 | 4,300 | 11 | dim_products, inventory, order_items |
| public.sessions | 9 | 12,400,000 | 11 | events |
| public.inventory | 8 | 68,400 | 7 | none |
| dbt_marts.dim_customers | 7 | 412,000 | 9 | none |
| dbt_marts.fct_revenue_daily | 7 | 14,600 | 7 | none |
| public.subscription_events | 7 | 1,118,000 | 8 | none |
| public.ad_spend | 6 | 214,000 | 9 | none |
| public.shipments | 6 | 1,190,000 | 10 | none |
| dbt_marts.fct_subscription_mrr | 5 | 1,158,000 | 7 | none |
- public.orders Partition by placed_at (range partitioning on placed_at)
- public.orders Add composite index on (customer_id, status, channel)
- public.orders Large table (1.3M rows), ensure proper indexing
- public.subscriptions Add composite index on (customer_id, plan_code, status)
- public.customers Partition by created_at (range partitioning on created_at)
- public.customers Add composite index on (signup_source, marketing_opt_in)
- public.support_tickets Partition by opened_at (range partitioning on opened_at)
- public.support_tickets Add composite index on (customer_id, order_id, category)
- dbt_marts.fct_orders Partition by order_date (range partitioning on order_date)
- dbt_marts.fct_orders Add composite index on (order_id, customer_id, channel)
Anomalies
4- medium6 tables have zero query references (customers_old, dim_dates, events_legacy, orders_backup_2023, tmp_cohort_export)
- low27 queries haven't been accessed in 180+ days (Sessions from paid campaigns, Sessions by landing path, Search to purchase rate, Campaign list with budgets, Email capture rate by device)
- medium83 of 138 active questions have no description (60% undocumented)
- low12 questions are not organized in any collection (Orders per day with empty days filled in, Weekly digest numbers, Trials expiring in the next seven days, Top SKUs for merchandising, Sessions by device type)
How to act on this
Preview the cleanup. This changes nothing and sends no request to Metabase.
Carry it out. An undo file is written into .metalens/ before the first change.
Put everything back, in one command.
If the findings are clear but the decisions are not, who owns what and which definition is right, that part is people rather than a script. See how the Sprint works.