Fix benefit-card timeouts: scalar subquery instead of CROSS JOIN totals (MFB-867)#101
Conversation
…uery (MFB-867) The qualified_benefits / immediate_needs cards timed out on the dashboard even after the join (#99) and RLS-function-inlining (#100) fixes. Root cause: the `CROSS JOIN totals t` (where `totals` is a count over filtered mart_screener_data) confused the planner's row estimation for the multi-column COALESCE join, so it estimated the join at rows=1 and chose a Nested Loop — which exploded over the ~19k actual joined rows. EXPLAIN looked cheap; real execution timed out. Fix: drop `totals`/`CROSS JOIN totals t` and compute the denominator as an inline scalar subquery in the `% of Screeners` expression. Same result, but the planner now picks a Hash Join. Verified through the real Metabase RLS path (date filter applied): qualified_benefits returns fast; raw EXPLAIN ANALYZE = 96ms (Hash Join, not Nested Loop), down from timeout. Applied to all three benefit/needs cards for consistency. current_benefits already worked (indexed screen_id join, #98) but carried the same CROSS JOIN pattern, so it gets the same treatment to remove the latent risk. Audited the other dashboard cards: the remaining CROSS JOIN totals usages are either single-table (no join) or join on an indexed single screener_id key with a tiny aggregated cross join — not the at-risk shape. No change needed there. Card SQL only — no mart/model change, no dbt run. Deploys via Terraform on merge. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Caution Review failedPull request was closed or merged during review Note
|
| Layer / File(s) | Summary |
|---|---|
Replace totals CTE with inline subqueries across all three queries dashboards/sql/current_benefits.sql, dashboards/sql/immediate_needs.sql, dashboards/sql/qualified_benefits.sql |
The totals CTE is removed from the WITH clause in all three files. Percentage-of-screeners calculations are updated to use inline count(*) subqueries with the same dynamic filters. CROSS JOIN clauses referencing totals are removed. Division by zero is guarded with nullif(..., 0). |
Estimated code review effort
🎯 2 (Simple) | ⏱️ ~12 minutes
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
| Check name | Status | Explanation |
|---|---|---|
| Title check | ✅ Passed | The title clearly and specifically describes the main change: replacing CROSS JOIN totals with scalar subqueries to fix dashboard timeouts, with the issue reference. |
| Description check | ✅ Passed | The description comprehensively covers the problem, root cause analysis, the fix applied, verification steps including EXPLAIN ANALYZE results, and deployment scope. |
| Docstring Coverage | ✅ Passed | No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. |
| Linked Issues check | ✅ Passed | Check skipped because no linked issues were found for this pull request. |
| Out of Scope Changes check | ✅ Passed | Check skipped because no linked issues were found for this pull request. |
✏️ Tip: You can configure your own custom pre-merge checks in the settings.
✨ Finishing Touches
🧪 Generate unit tests (beta)
- Create PR with unit tests
- Commit unit tests in branch
caton/mfb-867-fix-card-nested-loop
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
Comment @coderabbitai help to get the list of available commands and usage tips.
Terraform Plan 📖Show Plandata.external.metabase_ids: Reading...
metabase_database.postgres: Refreshing state... [name=MFB PostgreSQL Analytics]
metabase_permissions_group.global: Refreshing state... [name=Global Viewers]
metabase_permissions_group.tenant["nc"]: Refreshing state... [name=North Carolina Viewers]
metabase_permissions_group.tenant["co"]: Refreshing state... [name=Colorado Viewers]
metabase_database.bigquery[0]: Refreshing state... [name=MFB BigQuery Analytics]
metabase_permissions_group.tenant["ma"]: Refreshing state... [name=Massachusetts Viewers]
metabase_permissions_group.tenant["wa"]: Refreshing state... [name=Washington Viewers]
metabase_permissions_group.tenant["cesn"]: Refreshing state... [name=CESN Viewers]
metabase_permissions_group.tenant["il"]: Refreshing state... [name=Illinois Viewers]
metabase_permissions_group.tenant["tx"]: Refreshing state... [name=Texas Viewers]
metabase_permissions_group.tenant["co_tax_calculator"]: Refreshing state... [name=CO Tax Calculator Viewers]
metabase_permissions_group.tenant_editor["ma"]: Refreshing state... [name=Massachusetts Editors]
metabase_permissions_group.tenant_editor["co"]: Refreshing state... [name=Colorado Editors]
metabase_permissions_group.tenant_editor["nc"]: Refreshing state... [name=North Carolina Editors]
metabase_permissions_group.tenant_editor["tx"]: Refreshing state... [name=Texas Editors]
metabase_permissions_group.tenant_editor["co_tax_calculator"]: Refreshing state... [name=CO Tax Calculator Editors]
metabase_permissions_group.tenant_editor["cesn"]: Refreshing state... [name=CESN Editors]
metabase_permissions_group.tenant_editor["il"]: Refreshing state... [name=Illinois Editors]
metabase_permissions_group.tenant_editor["wa"]: Refreshing state... [name=Washington Editors]
metabase_database.tenant_postgres["ma"]: Refreshing state... [name=MFB PostgreSQL Massachusetts]
metabase_database.tenant_postgres["il"]: Refreshing state... [name=MFB PostgreSQL Illinois]
metabase_database.tenant_postgres["co"]: Refreshing state... [name=MFB PostgreSQL Colorado]
metabase_database.tenant_postgres["nc"]: Refreshing state... [name=MFB PostgreSQL North Carolina]
metabase_database.tenant_postgres["cesn"]: Refreshing state... [name=MFB PostgreSQL CESN]
metabase_database.tenant_postgres["wa"]: Refreshing state... [name=MFB PostgreSQL Washington]
metabase_database.tenant_postgres["tx"]: Refreshing state... [name=MFB PostgreSQL Texas]
metabase_database.tenant_postgres["co_tax_calculator"]: Refreshing state... [name=MFB PostgreSQL CO Tax Calculator]
time_sleep.wait_for_database_sync: Refreshing state... [id=2026-03-20T21:10:50Z]
data.metabase_table.tenant_screen_summary_tables["wa"]: Reading...
data.external.filter_field_ids: Reading...
data.metabase_table.tenant_screen_summary_tables["cesn"]: Reading...
data.metabase_table.screen_summary_table: Reading...
data.metabase_table.tenant_screen_summary_tables["co"]: Reading...
data.metabase_table.tenant_screen_summary_tables["il"]: Reading...
data.metabase_table.tenant_screen_summary_tables["co_tax_calculator"]: Reading...
metabase_collection.global: Refreshing state... [id=5]
data.metabase_table.tenant_screen_summary_tables["tx"]: Reading...
data.metabase_table.tenant_screen_summary_tables["ma"]: Reading...
data.external.metabase_ids: Read complete after 0s [id=-]
data.metabase_table.tenant_screen_summary_tables["nc"]: Reading...
data.metabase_table.tenant_screen_summary_tables["il"]: Read complete after 1s [name=mart_screener_data]
data.metabase_table.tenant_screen_summary_tables["cesn"]: Read complete after 1s [name=mart_screener_data]
metabase_collection.tenant_collection_nc: Refreshing state... [id=6]
metabase_card.global_household_assets_distribution: Refreshing state...
data.metabase_table.tenant_screen_summary_tables["wa"]: Read complete after 1s [name=mart_screener_data]
metabase_card.global_income_streams: Refreshing state...
data.metabase_table.tenant_screen_summary_tables["co_tax_calculator"]: Read complete after 1s [name=mart_screener_data]
metabase_card.global_completed_screeners: Refreshing state...
data.metabase_table.tenant_screen_summary_tables["tx"]: Read complete after 1s [name=mart_screener_data]
metabase_card.global_top_counties: Refreshing state...
data.metabase_table.tenant_screen_summary_tables["co"]: Read complete after 1s [name=mart_screener_data]
metabase_card.global_median_monthly_benefits: Refreshing state...
metabase_card.global_median_annual_benefits: Refreshing state...
data.metabase_table.tenant_screen_summary_tables["ma"]: Read complete after 1s [name=mart_screener_data]
metabase_card.global_median_household_size: Refreshing state...
data.metabase_table.screen_summary_table: Read complete after 1s [name=mart_screener_data]
metabase_card.global_head_of_household_ages: Refreshing state...
metabase_card.global_immediate_needs_table: Refreshing state...
metabase_card.global_current_benefits_table: Refreshing state...
metabase_card.global_median_monthly_income: Refreshing state...
metabase_card.global_household_income_distribution: Refreshing state...
metabase_card.global_daily_screeners_7d: Refreshing state...
metabase_card.global_median_household_assets: Refreshing state...
metabase_card.global_common_expenses: Refreshing state...
metabase_card.global_median_monthly_expenses: Refreshing state...
metabase_card.global_household_member_ages: Refreshing state...
metabase_card.global_household_languages: Refreshing state...
metabase_card.global_household_sizes: Refreshing state...
metabase_card.global_median_annual_tax_credits: Refreshing state...
data.metabase_table.tenant_screen_summary_tables["nc"]: Read complete after 1s [name=mart_screener_data]
metabase_card.global_qualified_benefits_table: Refreshing state...
metabase_card.global_top_partners: Refreshing state...
metabase_card.global_qualified_for_benefits_pct: Refreshing state...
metabase_card.global_already_had_benefits_pct: Refreshing state...
metabase_card.global_qualified_for_tax_creds_pct: Refreshing state...
metabase_card.global_median_annual_income: Refreshing state...
metabase_collection.tenant_collection_co: Refreshing state... [id=7]
metabase_card.screen_count: Refreshing state...
metabase_collection.tenant_collection_tx: Refreshing state... [id=8]
metabase_dashboard.analytics: Refreshing state... [name=MFB Analytics Dashboard]
metabase_collection.tenant_collection_wa: Refreshing state... [id=273]
metabase_permissions_graph.graph: Refreshing state...
metabase_collection.tenant_collection_il: Refreshing state... [id=9]
metabase_collection.tenant_collection_ma: Refreshing state... [id=10]
metabase_collection.tenant_collection_cesn: Refreshing state... [id=11]
metabase_collection.tenant_collection_co_tax_calculator: Refreshing state... [id=12]
metabase_card.tenant_partner_values["ma"]: Refreshing state...
metabase_card.tenant_partner_values["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_partner_values["co"]: Refreshing state...
metabase_card.tenant_partner_values["nc"]: Refreshing state...
metabase_card.tenant_partner_values["wa"]: Refreshing state...
metabase_card.tenant_partner_values["cesn"]: Refreshing state...
metabase_card.tenant_partner_values["il"]: Refreshing state...
metabase_collection_graph.graph: Refreshing state...
metabase_card.tenant_partner_values["tx"]: Refreshing state...
metabase_card.tenant_county_values["nc"]: Refreshing state...
metabase_card.tenant_county_values["tx"]: Refreshing state...
metabase_card.tenant_county_values["wa"]: Refreshing state...
metabase_card.tenant_county_values["co_tax_calculator"]: Refreshing state...
metabase_card.ga_conversion_funnel["tx"]: Refreshing state...
metabase_card.ga_conversion_funnel["wa"]: Refreshing state...
metabase_card.tenant_county_values["ma"]: Refreshing state...
metabase_card.ga_conversion_funnel["cesn"]: Refreshing state...
metabase_card.ga_conversion_funnel["co"]: Refreshing state...
metabase_card.ga_conversion_funnel["il"]: Refreshing state...
metabase_card.ga_conversion_funnel["ma"]: Refreshing state...
metabase_card.ga_conversion_funnel["nc"]: Refreshing state...
metabase_card.tenant_county_values["cesn"]: Refreshing state...
metabase_card.tenant_county_values["co"]: Refreshing state...
metabase_card.tenant_county_values["il"]: Refreshing state...
metabase_card.tenant_screen_count["cesn"]: Refreshing state...
metabase_card.ga_completed_to_click_rate["nc"]: Refreshing state...
metabase_card.tenant_screen_count["ma"]: Refreshing state...
metabase_card.tenant_screen_count["co"]: Refreshing state...
metabase_card.tenant_screen_count["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_screen_count["il"]: Refreshing state...
metabase_card.ga_completed_to_click_rate["wa"]: Refreshing state...
metabase_card.ga_completed_to_click_rate["cesn"]: Refreshing state...
metabase_card.tenant_screen_count["nc"]: Refreshing state...
metabase_card.ga_completed_to_click_rate["co"]: Refreshing state...
metabase_card.tenant_screen_count["tx"]: Refreshing state...
metabase_card.ga_completed_to_click_rate["il"]: Refreshing state...
metabase_card.ga_completed_to_click_rate["tx"]: Refreshing state...
metabase_card.ga_completed_to_click_rate["ma"]: Refreshing state...
metabase_card.ga_clicked_links_bar["wa"]: Refreshing state...
metabase_card.ga_clicked_links_bar["tx"]: Refreshing state...
metabase_card.ga_clicked_links_bar["nc"]: Refreshing state...
metabase_card.ga_clicked_links_bar["cesn"]: Refreshing state...
metabase_card.ga_clicked_links_bar["co"]: Refreshing state...
metabase_card.ga_clicked_links_bar["il"]: Refreshing state...
metabase_card.ga_median_completion_time["wa"]: Refreshing state...
metabase_card.ga_clicked_links_bar["ma"]: Refreshing state...
metabase_card.ga_median_completion_time["co"]: Refreshing state...
metabase_card.ga_median_completion_time["cesn"]: Refreshing state...
metabase_card.ga_median_completion_time["ma"]: Refreshing state...
metabase_card.ga_median_completion_time["il"]: Refreshing state...
metabase_card.ga_median_completion_time["nc"]: Refreshing state...
metabase_card.ga_median_completion_time["tx"]: Refreshing state...
metabase_card.ga_conversion_funnel_table["ma"]: Refreshing state...
metabase_card.tenant_utm_campaign_values["nc"]: Refreshing state...
metabase_card.ga_conversion_funnel_table["nc"]: Refreshing state...
metabase_card.ga_conversion_funnel_table["tx"]: Refreshing state...
metabase_card.ga_conversion_funnel_table["wa"]: Refreshing state...
metabase_card.ga_conversion_funnel_table["cesn"]: Refreshing state...
metabase_card.ga_conversion_funnel_table["co"]: Refreshing state...
metabase_card.ga_conversion_funnel_table["il"]: Refreshing state...
metabase_card.ga_traffic_mediums_table["wa"]: Refreshing state...
metabase_card.ga_traffic_mediums_table["cesn"]: Refreshing state...
metabase_card.ga_traffic_mediums_table["co"]: Refreshing state...
metabase_card.ga_traffic_mediums_table["il"]: Refreshing state...
metabase_card.ga_traffic_mediums_table["ma"]: Refreshing state...
metabase_card.ga_traffic_mediums_table["nc"]: Refreshing state...
metabase_card.ga_traffic_mediums_table["tx"]: Refreshing state...
metabase_card.ga_total_visitors["nc"]: Refreshing state...
metabase_card.ga_total_visitors["wa"]: Refreshing state...
metabase_card.ga_total_visitors["tx"]: Refreshing state...
metabase_card.ga_total_visitors["co"]: Refreshing state...
metabase_card.ga_total_visitors["cesn"]: Refreshing state...
metabase_card.ga_total_visitors["il"]: Refreshing state...
metabase_card.ga_total_visitors["ma"]: Refreshing state...
metabase_card.ga_clicked_links_table["ma"]: Refreshing state...
metabase_card.ga_clicked_links_table["wa"]: Refreshing state...
metabase_card.ga_clicked_links_table["nc"]: Refreshing state...
metabase_card.ga_clicked_links_table["tx"]: Refreshing state...
metabase_card.ga_clicked_links_table["cesn"]: Refreshing state...
metabase_card.ga_clicked_links_table["co"]: Refreshing state...
metabase_card.ga_clicked_links_table["il"]: Refreshing state...
metabase_card.ga_traffic_mediums_bar["cesn"]: Refreshing state...
metabase_card.ga_traffic_mediums_bar["ma"]: Refreshing state...
metabase_card.ga_traffic_mediums_bar["nc"]: Refreshing state...
metabase_card.ga_traffic_mediums_bar["tx"]: Refreshing state...
metabase_card.ga_traffic_mediums_bar["wa"]: Refreshing state...
metabase_card.ga_traffic_mediums_bar["co"]: Refreshing state...
metabase_card.ga_traffic_mediums_bar["il"]: Refreshing state...
metabase_card.ga_started_screener_pct["nc"]: Refreshing state...
metabase_card.ga_started_screener_pct["tx"]: Refreshing state...
metabase_card.ga_started_screener_pct["wa"]: Refreshing state...
metabase_card.ga_started_screener_pct["co"]: Refreshing state...
metabase_card.ga_started_screener_pct["cesn"]: Refreshing state...
metabase_card.ga_started_screener_pct["il"]: Refreshing state...
metabase_card.ga_started_screener_pct["ma"]: Refreshing state...
metabase_card.ga_users_in_week["ma"]: Refreshing state...
metabase_card.ga_users_in_week["nc"]: Refreshing state...
metabase_card.ga_users_in_week["co"]: Refreshing state...
metabase_card.ga_users_in_week["il"]: Refreshing state...
metabase_card.ga_users_in_week["tx"]: Refreshing state...
metabase_card.ga_users_in_week["wa"]: Refreshing state...
metabase_card.ga_users_in_week["cesn"]: Refreshing state...
metabase_card.tenant_utm_medium_values["nc"]: Refreshing state...
metabase_card.tenant_monthly_active_users["nc"]: Refreshing state...
metabase_card.tenant_utm_source_values["nc"]: Refreshing state...
metabase_card.tenant_monthly_active_users["wa"]: Refreshing state...
metabase_card.tenant_monthly_active_users["co"]: Refreshing state...
metabase_card.tenant_monthly_active_users["cesn"]: Refreshing state...
metabase_card.tenant_monthly_active_users["tx"]: Refreshing state...
data.external.filter_field_ids: Read complete after 3s [id=-]
metabase_card.tenant_monthly_active_users["il"]: Refreshing state...
metabase_card.tenant_monthly_active_users["ma"]: Refreshing state...
metabase_card.tenant_head_of_household_ages["tx"]: Refreshing state...
metabase_card.tenant_head_of_household_ages["co"]: Refreshing state...
metabase_card.tenant_head_of_household_ages["nc"]: Refreshing state...
metabase_card.tenant_head_of_household_ages["cesn"]: Refreshing state...
metabase_card.tenant_head_of_household_ages["il"]: Refreshing state...
metabase_card.tenant_head_of_household_ages["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_head_of_household_ages["ma"]: Refreshing state...
metabase_card.cesn_homeowners_daily_screeners["co_tax_calculator"]: Refreshing state...
metabase_card.cesn_homeowners_daily_screeners["il"]: Refreshing state...
metabase_card.cesn_homeowners_daily_screeners["co"]: Refreshing state...
metabase_card.cesn_homeowners_daily_screeners["ma"]: Refreshing state...
metabase_card.cesn_homeowners_daily_screeners["cesn"]: Refreshing state...
metabase_card.cesn_homeowners_daily_screeners["nc"]: Refreshing state...
metabase_card.cesn_homeowners_daily_screeners["tx"]: Refreshing state...
metabase_card.tenant_household_assets_distribution["ma"]: Refreshing state...
metabase_card.tenant_household_assets_distribution["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_household_assets_distribution["tx"]: Refreshing state...
metabase_card.tenant_household_assets_distribution["cesn"]: Refreshing state...
metabase_card.tenant_household_assets_distribution["co"]: Refreshing state...
metabase_card.tenant_household_assets_distribution["il"]: Refreshing state...
metabase_card.tenant_household_assets_distribution["nc"]: Refreshing state...
metabase_card.tenant_immediate_needs_table["co"]: Refreshing state...
metabase_card.tenant_immediate_needs_table["nc"]: Refreshing state...
metabase_card.tenant_immediate_needs_table["il"]: Refreshing state...
metabase_card.tenant_immediate_needs_table["tx"]: Refreshing state...
metabase_card.tenant_immediate_needs_table["cesn"]: Refreshing state...
metabase_card.tenant_immediate_needs_table["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_immediate_needs_table["ma"]: Refreshing state...
metabase_card.cesn_needs_water_heater["tx"]: Refreshing state...
metabase_card.cesn_needs_water_heater["cesn"]: Refreshing state...
metabase_card.cesn_needs_water_heater["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_median_household_size["cesn"]: Refreshing state...
metabase_card.cesn_needs_water_heater["ma"]: Refreshing state...
metabase_card.cesn_needs_water_heater["nc"]: Refreshing state...
metabase_card.cesn_needs_water_heater["co"]: Refreshing state...
metabase_card.cesn_needs_water_heater["il"]: Refreshing state...
metabase_card.tenant_median_household_size["co"]: Refreshing state...
metabase_card.tenant_median_household_size["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_median_household_size["il"]: Refreshing state...
metabase_card.tenant_median_household_size["nc"]: Refreshing state...
metabase_card.tenant_median_household_size["tx"]: Refreshing state...
metabase_card.tenant_median_household_size["ma"]: Refreshing state...
metabase_card.tenant_median_annual_income["ma"]: Refreshing state...
metabase_card.tenant_median_monthly_income["co"]: Refreshing state...
metabase_card.cesn_renters_daily_screeners["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_household_sizes["tx"]: Refreshing state...
metabase_card.cesn_renters_completed["co"]: Refreshing state...
metabase_card.cesn_renters_daily_screeners["il"]: Refreshing state...
metabase_card.cesn_renters_daily_screeners["nc"]: Refreshing state...
metabase_card.cesn_renters_daily_screeners["cesn"]: Refreshing state...
metabase_card.cesn_renters_daily_screeners["tx"]: Refreshing state...
metabase_card.cesn_renters_daily_screeners["co"]: Refreshing state...
metabase_card.cesn_renters_daily_screeners["ma"]: Refreshing state...
metabase_card.cesn_needs_stove["il"]: Refreshing state...
metabase_card.cesn_needs_stove["ma"]: Refreshing state...
metabase_card.cesn_needs_stove["cesn"]: Refreshing state...
metabase_card.cesn_needs_stove["tx"]: Refreshing state...
metabase_card.cesn_needs_stove["co"]: Refreshing state...
metabase_card.cesn_needs_stove["nc"]: Refreshing state...
metabase_card.cesn_needs_stove["co_tax_calculator"]: Refreshing state...
metabase_card.cesn_homeowners_completed["nc"]: Refreshing state...
metabase_card.tenant_household_sizes["il"]: Refreshing state...
metabase_card.tenant_household_sizes["cesn"]: Refreshing state...
metabase_card.tenant_household_sizes["co"]: Refreshing state...
metabase_card.tenant_household_sizes["ma"]: Refreshing state...
metabase_card.tenant_household_sizes["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_median_annual_income["co"]: Refreshing state...
metabase_card.tenant_median_annual_income["cesn"]: Refreshing state...
metabase_card.tenant_median_annual_income["il"]: Refreshing state...
metabase_card.tenant_median_annual_income["nc"]: Refreshing state...
metabase_card.tenant_median_annual_income["tx"]: Refreshing state...
metabase_card.tenant_median_annual_income["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_median_monthly_income["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_median_monthly_income["il"]: Refreshing state...
metabase_card.tenant_median_monthly_income["tx"]: Refreshing state...
metabase_card.tenant_median_monthly_income["cesn"]: Refreshing state...
metabase_card.cesn_renters_completed["ma"]: Refreshing state...
metabase_card.tenant_household_sizes["nc"]: Refreshing state...
metabase_card.cesn_renters_completed["co_tax_calculator"]: Refreshing state...
metabase_card.cesn_renters_completed["cesn"]: Refreshing state...
metabase_card.cesn_renters_completed["tx"]: Refreshing state...
metabase_card.cesn_renters_completed["il"]: Refreshing state...
metabase_card.cesn_homeowners_completed["tx"]: Refreshing state...
metabase_card.cesn_renters_completed["nc"]: Refreshing state...
metabase_card.cesn_homeowners_completed["ma"]: Refreshing state...
metabase_card.tenant_median_monthly_income["nc"]: Refreshing state...
metabase_card.tenant_median_monthly_income["ma"]: Refreshing state...
metabase_card.cesn_homeowners_completed["cesn"]: Refreshing state...
metabase_card.cesn_homeowners_completed["co"]: Refreshing state...
metabase_card.cesn_homeowners_completed["il"]: Refreshing state...
metabase_card.cesn_homeowners_completed["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_top_partners["co"]: Refreshing state...
metabase_card.tenant_top_partners["cesn"]: Refreshing state...
metabase_card.tenant_top_partners["nc"]: Refreshing state...
metabase_card.tenant_top_partners["ma"]: Refreshing state...
metabase_card.tenant_top_partners["il"]: Refreshing state...
metabase_card.tenant_top_partners["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_top_partners["tx"]: Refreshing state...
metabase_card.cesn_homeowners_old_car["il"]: Refreshing state...
metabase_card.cesn_homeowners_old_car["cesn"]: Refreshing state...
metabase_card.cesn_homeowners_old_car["co"]: Refreshing state...
metabase_card.cesn_homeowners_old_car["tx"]: Refreshing state...
metabase_card.cesn_homeowners_old_car["ma"]: Refreshing state...
metabase_card.tenant_median_household_assets["cesn"]: Refreshing state...
metabase_card.cesn_homeowners_old_car["co_tax_calculator"]: Refreshing state...
metabase_card.cesn_homeowners_old_car["nc"]: Refreshing state...
metabase_card.tenant_median_household_assets["il"]: Refreshing state...
metabase_card.tenant_median_household_assets["co"]: Refreshing state...
metabase_card.tenant_median_household_assets["nc"]: Refreshing state...
metabase_card.tenant_median_household_assets["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_median_household_assets["ma"]: Refreshing state...
metabase_card.tenant_median_household_assets["tx"]: Refreshing state...
metabase_card.cesn_renters_disconnected["co_tax_calculator"]: Refreshing state...
metabase_card.cesn_renters_disconnected["co"]: Refreshing state...
metabase_card.cesn_renters_disconnected["nc"]: Refreshing state...
metabase_card.cesn_renters_disconnected["il"]: Refreshing state...
metabase_card.cesn_renters_disconnected["ma"]: Refreshing state...
metabase_card.cesn_renters_disconnected["tx"]: Refreshing state...
metabase_card.cesn_renters_disconnected["cesn"]: Refreshing state...
metabase_card.tenant_total_tax_benefits["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_total_tax_benefits["il"]: Refreshing state...
metabase_card.tenant_total_tax_benefits["ma"]: Refreshing state...
metabase_card.tenant_total_tax_benefits["co"]: Refreshing state...
metabase_card.tenant_total_tax_benefits["nc"]: Refreshing state...
metabase_card.tenant_total_tax_benefits["tx"]: Refreshing state...
metabase_card.tenant_total_tax_benefits["cesn"]: Refreshing state...
metabase_card.tenant_income_streams["co"]: Refreshing state...
metabase_card.tenant_income_streams["tx"]: Refreshing state...
metabase_card.tenant_income_streams["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_income_streams["il"]: Refreshing state...
metabase_card.cesn_renters_past_due["nc"]: Refreshing state...
metabase_card.cesn_renters_past_due["co"]: Refreshing state...
metabase_card.tenant_income_streams["ma"]: Refreshing state...
metabase_card.cesn_renters_past_due["tx"]: Refreshing state...
metabase_card.cesn_renters_past_due["ma"]: Refreshing state...
metabase_card.tenant_income_streams["nc"]: Refreshing state...
metabase_card.tenant_income_streams["cesn"]: Refreshing state...
metabase_card.cesn_renters_past_due["co_tax_calculator"]: Refreshing state...
metabase_card.cesn_renters_past_due["cesn"]: Refreshing state...
metabase_card.cesn_renters_past_due["il"]: Refreshing state...
metabase_card.tenant_total_benefits["cesn"]: Refreshing state...
metabase_card.tenant_total_benefits["nc"]: Refreshing state...
metabase_card.tenant_total_benefits["il"]: Refreshing state...
metabase_card.tenant_total_benefits["ma"]: Refreshing state...
metabase_card.tenant_total_benefits["tx"]: Refreshing state...
metabase_card.tenant_total_benefits["co"]: Refreshing state...
metabase_card.tenant_total_benefits["co_tax_calculator"]: Refreshing state...
metabase_card.cesn_homeowners_gas_provider["co_tax_calculator"]: Refreshing state...
metabase_card.cesn_homeowners_gas_provider["nc"]: Refreshing state...
metabase_card.cesn_homeowners_gas_provider["cesn"]: Refreshing state...
metabase_card.cesn_homeowners_gas_provider["tx"]: Refreshing state...
metabase_card.cesn_homeowners_gas_provider["il"]: Refreshing state...
metabase_card.cesn_homeowners_gas_provider["ma"]: Refreshing state...
metabase_card.cesn_homeowners_gas_provider["co"]: Refreshing state...
metabase_card.cesn_renters_electric_provider["co"]: Refreshing state...
metabase_card.cesn_renters_electric_provider["cesn"]: Refreshing state...
metabase_card.cesn_renters_electric_provider["il"]: Refreshing state...
metabase_card.cesn_renters_electric_provider["tx"]: Refreshing state...
metabase_card.cesn_renters_electric_provider["co_tax_calculator"]: Refreshing state...
metabase_card.cesn_renters_electric_provider["ma"]: Refreshing state...
metabase_card.tenant_total_non_tax_benefits["co"]: Refreshing state...
metabase_card.cesn_renters_electric_provider["nc"]: Refreshing state...
metabase_card.tenant_total_non_tax_benefits["tx"]: Refreshing state...
metabase_card.cesn_homeowners_electric_provider["tx"]: Refreshing state...
metabase_card.tenant_total_non_tax_benefits["il"]: Refreshing state...
metabase_card.tenant_total_non_tax_benefits["ma"]: Refreshing state...
metabase_card.tenant_total_non_tax_benefits["cesn"]: Refreshing state...
metabase_card.tenant_total_non_tax_benefits["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_total_non_tax_benefits["nc"]: Refreshing state...
metabase_card.tenant_median_monthly_expenses["nc"]: Refreshing state...
metabase_card.cesn_homeowners_electric_provider["cesn"]: Refreshing state...
metabase_card.cesn_homeowners_electric_provider["co"]: Refreshing state...
metabase_card.cesn_homeowners_electric_provider["ma"]: Refreshing state...
metabase_card.cesn_homeowners_electric_provider["nc"]: Refreshing state...
metabase_card.cesn_homeowners_electric_provider["co_tax_calculator"]: Refreshing state...
metabase_card.cesn_homeowners_electric_provider["il"]: Refreshing state...
metabase_card.tenant_median_monthly_expenses["cesn"]: Refreshing state...
metabase_card.tenant_median_monthly_expenses["ma"]: Refreshing state...
metabase_card.tenant_median_monthly_expenses["il"]: Refreshing state...
metabase_card.tenant_median_monthly_expenses["tx"]: Refreshing state...
metabase_card.tenant_median_monthly_expenses["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_median_monthly_expenses["co"]: Refreshing state...
metabase_card.tenant_household_languages["co"]: Refreshing state...
metabase_card.tenant_household_languages["cesn"]: Refreshing state...
metabase_card.tenant_completed_screeners["nc"]: Refreshing state...
metabase_card.tenant_household_languages["nc"]: Refreshing state...
metabase_card.tenant_household_languages["ma"]: Refreshing state...
metabase_card.tenant_completed_screeners["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_completed_screeners["tx"]: Refreshing state...
metabase_card.tenant_completed_screeners["il"]: Refreshing state...
metabase_card.tenant_household_languages["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_household_languages["il"]: Refreshing state...
metabase_card.tenant_completed_screeners["ma"]: Refreshing state...
metabase_card.tenant_completed_screeners["cesn"]: Refreshing state...
metabase_card.tenant_household_languages["tx"]: Refreshing state...
metabase_card.tenant_completed_screeners["co"]: Refreshing state...
metabase_card.tenant_daily_screeners_7d["ma"]: Refreshing state...
metabase_card.tenant_daily_screeners_7d["co"]: Refreshing state...
metabase_card.tenant_daily_screeners_7d["nc"]: Refreshing state...
metabase_card.tenant_daily_screeners_7d["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_daily_screeners_7d["tx"]: Refreshing state...
metabase_card.tenant_daily_screeners_7d["cesn"]: Refreshing state...
metabase_card.tenant_daily_screeners_7d["il"]: Refreshing state...
metabase_card.tenant_household_member_ages["tx"]: Refreshing state...
metabase_card.tenant_household_member_ages["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_household_member_ages["co"]: Refreshing state...
metabase_card.tenant_household_member_ages["ma"]: Refreshing state...
metabase_card.tenant_household_member_ages["il"]: Refreshing state...
metabase_card.tenant_household_member_ages["nc"]: Refreshing state...
metabase_card.tenant_household_member_ages["cesn"]: Refreshing state...
metabase_card.tenant_common_expenses["nc"]: Refreshing state...
metabase_card.tenant_common_expenses["co"]: Refreshing state...
metabase_card.tenant_common_expenses["tx"]: Refreshing state...
metabase_card.tenant_common_expenses["cesn"]: Refreshing state...
metabase_card.tenant_common_expenses["il"]: Refreshing state...
metabase_card.tenant_common_expenses["ma"]: Refreshing state...
metabase_card.tenant_common_expenses["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_median_annual_tax_credits["co"]: Refreshing state...
metabase_card.tenant_median_annual_tax_credits["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_median_annual_tax_credits["nc"]: Refreshing state...
metabase_card.tenant_median_annual_tax_credits["cesn"]: Refreshing state...
metabase_card.tenant_median_annual_tax_credits["tx"]: Refreshing state...
metabase_card.tenant_median_annual_tax_credits["ma"]: Refreshing state...
metabase_card.tenant_median_annual_tax_credits["il"]: Refreshing state...
metabase_card.cesn_needs_hvac["co_tax_calculator"]: Refreshing state...
metabase_card.cesn_needs_hvac["ma"]: Refreshing state...
metabase_card.cesn_needs_hvac["cesn"]: Refreshing state...
metabase_card.cesn_needs_hvac["nc"]: Refreshing state...
metabase_card.cesn_needs_hvac["tx"]: Refreshing state...
metabase_card.cesn_needs_hvac["il"]: Refreshing state...
metabase_card.cesn_needs_hvac["co"]: Refreshing state...
metabase_card.tenant_median_annual_benefits["ma"]: Refreshing state...
metabase_card.tenant_median_annual_benefits["tx"]: Refreshing state...
metabase_card.tenant_median_annual_benefits["nc"]: Refreshing state...
metabase_card.tenant_median_annual_benefits["cesn"]: Refreshing state...
metabase_card.tenant_median_annual_benefits["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_median_annual_benefits["co"]: Refreshing state...
metabase_card.tenant_median_annual_benefits["il"]: Refreshing state...
metabase_card.tenant_median_monthly_benefits["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_median_monthly_benefits["il"]: Refreshing state...
metabase_card.tenant_median_monthly_benefits["tx"]: Refreshing state...
metabase_card.tenant_median_monthly_benefits["nc"]: Refreshing state...
metabase_card.tenant_median_monthly_benefits["cesn"]: Refreshing state...
metabase_card.tenant_median_monthly_benefits["co"]: Refreshing state...
metabase_card.tenant_median_monthly_benefits["ma"]: Refreshing state...
metabase_card.cesn_renters_gas_provider["co_tax_calculator"]: Refreshing state...
metabase_card.cesn_renters_gas_provider["nc"]: Refreshing state...
metabase_card.cesn_renters_gas_provider["tx"]: Refreshing state...
metabase_card.cesn_renters_gas_provider["ma"]: Refreshing state...
metabase_card.cesn_renters_gas_provider["co"]: Refreshing state...
metabase_card.cesn_renters_gas_provider["il"]: Refreshing state...
metabase_card.cesn_renters_gas_provider["cesn"]: Refreshing state...
metabase_card.tenant_already_had_benefits_pct["cesn"]: Refreshing state...
metabase_card.tenant_already_had_benefits_pct["tx"]: Refreshing state...
metabase_card.tenant_already_had_benefits_pct["co"]: Refreshing state...
metabase_card.tenant_already_had_benefits_pct["ma"]: Refreshing state...
metabase_card.tenant_already_had_benefits_pct["nc"]: Refreshing state...
metabase_card.tenant_already_had_benefits_pct["il"]: Refreshing state...
metabase_card.tenant_already_had_benefits_pct["co_tax_calculator"]: Refreshing state...
metabase_card.cesn_homeowners_qualified_pct["co"]: Refreshing state...
metabase_card.cesn_homeowners_qualified_pct["il"]: Refreshing state...
metabase_card.cesn_homeowners_qualified_pct["nc"]: Refreshing state...
metabase_card.cesn_homeowners_qualified_pct["tx"]: Refreshing state...
metabase_card.cesn_homeowners_qualified_pct["ma"]: Refreshing state...
metabase_card.cesn_homeowners_qualified_pct["cesn"]: Refreshing state...
metabase_card.cesn_homeowners_qualified_pct["co_tax_calculator"]: Refreshing state...
metabase_card.cesn_homeowners_past_due["nc"]: Refreshing state...
metabase_card.cesn_homeowners_past_due["tx"]: Refreshing state...
metabase_card.cesn_homeowners_past_due["il"]: Refreshing state...
metabase_card.cesn_homeowners_past_due["cesn"]: Refreshing state...
metabase_card.cesn_homeowners_past_due["co_tax_calculator"]: Refreshing state...
metabase_card.cesn_homeowners_past_due["co"]: Refreshing state...
metabase_card.cesn_homeowners_past_due["ma"]: Refreshing state...
metabase_card.tenant_qualified_benefits_table["co"]: Refreshing state...
metabase_card.tenant_qualified_benefits_table["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_qualified_benefits_table["nc"]: Refreshing state...
metabase_card.tenant_qualified_benefits_table["tx"]: Refreshing state...
metabase_card.tenant_qualified_benefits_table["ma"]: Refreshing state...
metabase_card.tenant_qualified_benefits_table["cesn"]: Refreshing state...
metabase_card.tenant_qualified_benefits_table["il"]: Refreshing state...
metabase_card.cesn_renters_qualified_pct["co_tax_calculator"]: Refreshing state...
metabase_card.cesn_renters_qualified_pct["tx"]: Refreshing state...
metabase_card.cesn_renters_qualified_pct["co"]: Refreshing state...
metabase_card.cesn_renters_qualified_pct["il"]: Refreshing state...
metabase_card.cesn_renters_qualified_pct["nc"]: Refreshing state...
metabase_card.cesn_renters_qualified_pct["ma"]: Refreshing state...
metabase_card.cesn_renters_qualified_pct["cesn"]: Refreshing state...
metabase_card.tenant_top_counties["cesn"]: Refreshing state...
metabase_card.tenant_top_counties["tx"]: Refreshing state...
metabase_card.tenant_top_counties["co"]: Refreshing state...
metabase_card.tenant_top_counties["il"]: Refreshing state...
metabase_card.tenant_top_counties["ma"]: Refreshing state...
metabase_card.tenant_top_counties["nc"]: Refreshing state...
metabase_card.tenant_top_counties["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_qualified_for_benefits_pct["co"]: Refreshing state...
metabase_card.tenant_qualified_for_benefits_pct["ma"]: Refreshing state...
metabase_card.tenant_qualified_for_benefits_pct["nc"]: Refreshing state...
metabase_card.tenant_qualified_for_benefits_pct["tx"]: Refreshing state...
metabase_card.tenant_qualified_for_benefits_pct["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_qualified_for_benefits_pct["il"]: Refreshing state...
metabase_card.tenant_qualified_for_benefits_pct["cesn"]: Refreshing state...
metabase_card.tenant_current_benefits_table["il"]: Refreshing state...
metabase_card.tenant_current_benefits_table["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_current_benefits_table["nc"]: Refreshing state...
metabase_card.tenant_current_benefits_table["ma"]: Refreshing state...
metabase_card.tenant_current_benefits_table["cesn"]: Refreshing state...
metabase_card.tenant_current_benefits_table["tx"]: Refreshing state...
metabase_card.tenant_current_benefits_table["co"]: Refreshing state...
metabase_card.tenant_qualified_for_tax_creds_pct["ma"]: Refreshing state...
metabase_card.tenant_qualified_for_tax_creds_pct["tx"]: Refreshing state...
metabase_card.tenant_qualified_for_tax_creds_pct["co"]: Refreshing state...
metabase_card.tenant_qualified_for_tax_creds_pct["cesn"]: Refreshing state...
metabase_card.tenant_qualified_for_tax_creds_pct["nc"]: Refreshing state...
metabase_card.tenant_qualified_for_tax_creds_pct["il"]: Refreshing state...
metabase_card.tenant_qualified_for_tax_creds_pct["co_tax_calculator"]: Refreshing state...
metabase_card.cesn_homeowners_disconnected["co"]: Refreshing state...
metabase_card.cesn_homeowners_disconnected["ma"]: Refreshing state...
metabase_card.cesn_homeowners_disconnected["cesn"]: Refreshing state...
metabase_card.cesn_homeowners_disconnected["il"]: Refreshing state...
metabase_card.cesn_homeowners_disconnected["nc"]: Refreshing state...
metabase_card.cesn_homeowners_disconnected["tx"]: Refreshing state...
metabase_card.cesn_homeowners_disconnected["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_total_individuals["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_total_individuals["il"]: Refreshing state...
metabase_card.tenant_total_individuals["nc"]: Refreshing state...
metabase_card.tenant_total_individuals["co"]: Refreshing state...
metabase_card.tenant_total_individuals["cesn"]: Refreshing state...
metabase_card.tenant_total_individuals["tx"]: Refreshing state...
metabase_card.tenant_total_individuals["ma"]: Refreshing state...
metabase_card.cesn_renters_old_car["il"]: Refreshing state...
metabase_card.cesn_renters_old_car["cesn"]: Refreshing state...
metabase_card.cesn_renters_old_car["ma"]: Refreshing state...
metabase_card.cesn_renters_old_car["tx"]: Refreshing state...
metabase_card.cesn_renters_old_car["co"]: Refreshing state...
metabase_card.cesn_renters_old_car["co_tax_calculator"]: Refreshing state...
metabase_card.cesn_renters_old_car["nc"]: Refreshing state...
metabase_card.tenant_household_income_distribution["tx"]: Refreshing state...
metabase_card.tenant_household_income_distribution["co"]: Refreshing state...
metabase_card.tenant_household_income_distribution["ma"]: Refreshing state...
metabase_card.tenant_household_income_distribution["cesn"]: Refreshing state...
metabase_card.tenant_household_income_distribution["co_tax_calculator"]: Refreshing state...
metabase_card.tenant_household_income_distribution["il"]: Refreshing state...
metabase_card.tenant_household_income_distribution["nc"]: Refreshing state...
metabase_dashboard.tenant_analytics["ma"]: Refreshing state... [name=Massachusetts Dashboard]
metabase_dashboard.tenant_analytics["tx"]: Refreshing state... [name=Texas Dashboard]
metabase_dashboard.tenant_analytics["co"]: Refreshing state... [name=Colorado Dashboard]
metabase_dashboard.tenant_analytics["cesn"]: Refreshing state... [name=CESN Dashboard]
metabase_dashboard.tenant_analytics["co_tax_calculator"]: Refreshing state... [name=CO Tax Calculator Dashboard]
metabase_dashboard.tenant_analytics["il"]: Refreshing state... [name=Illinois Dashboard]
metabase_dashboard.tenant_analytics["nc"]: Refreshing state... [name=North Carolina Dashboard]
Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+ create
~ update in-place
Terraform planned the following actions, but then encountered a problem:
# metabase_card.cesn_homeowners_completed["wa"] will be created
+ resource "metabase_card" "cesn_homeowners_completed" {
+ id = (known after apply)
+ json = jsonencode(
{
+ cache_ttl = null
+ collection_id = 273
+ collection_position = null
+ dataset_query = {
+ database = 34
+ native = {
+ query = "SELECT count(*) AS count FROM analytics.mart_screener_data WHERE is_home_owner = true [[AND {{submission_date}}]] [[AND {{partner}}]] [[AND {{county}}]]"
+ template-tags = {
+ county = {
+ dimension = [
+ "field",
+ 57992,
+ null,
]
+ display-name = "County"
+ id = "county_filter"
+ name = "county"
+ type = "dimension"
+ widget-type = "string/="
}
+ partner = {
+ dimension = [
+ "field",
+ 58029,
+ null,
]
+ display-name = "Partner"
+ id = "partner_filter"
+ name = "partner"
+ type = "dimension"
+ widget-type = "string/="
}
+ submission_date = {
+ dimension = [
+ "field",
+ 58032,
+ null,
]
+ display-name = "Submission Date"
+ id = "date_range_filter"
+ name = "submission_date"
+ type = "dimension"
+ widget-type = "date/all-options"
}
+ utm_campaign = {
+ dimension = [
+ "field",
+ 58050,
+ null,
]
+ display-name = "UTM Campaign"
+ id = "utm_campaign_filter"
+ name = "utm_campaign"
+ type = "dimension"
+ widget-type = "string/="
}
+ utm_medium = {
+ dimension = [
+ "field",
+ 58053,
+ null,
]
+ display-name = "UTM Medium"
+ id = "utm_medium_filter"
+ name = "utm_medium"
+ type = "dimension"
+ widget-type = "string/="
}
+ utm_source = {
+ dimension = [
+ "field",
+ 57963,
+ null,
]
+ display-name = "UTM Source"
+ id = "utm_source_filter"
+ name = "utm_source"
+ type = "dimension"
+ widget-type = "string/="
}
}
}
+ type = "native"
}
+ description = null
+ display = "scalar"
+ name = "Homeowners – Completed Screeners"
+ parameter_mappings = []
+ parameters = []
+ query_type = "native"
+ visualization_settings = {
+ "scalar.field" = "count"
}
}
)
}
# metabase_card.cesn_homeowners_daily_screeners["wa"] will be created
+ resource "metabase_card" "cesn_homeowners_daily_screeners" {
+ id = (known after apply)
+ json = jsonencode(
{
+ cache_ttl = null
+ collection_id = 273
+ collection_position = null
+ dataset_query = {
+ database = 34
+ native = {
+ query = <<-EOT
SELECT submission_date, count(*) AS "Screeners"
FROM analytics.mart_screener_data
WHERE is_home_owner = true
[[AND {{submission_date}}]]
[[AND {{partner}}]]
[[AND {{county}}]]
GROUP BY submission_date ORDER BY submission_date
EOT
+ template-tags = {
+ county = {
+ dimension = [
+ "field",
+ 57992,
+ null,
]
+ display-name = "County"
+ id = "county_filter"
+ name = "county"
+ type = "dimension"
+ widget-type = "string/="
}
+ partner = {
+ dimension = [
+ "field",
+ 58029,
+ null,
]
+ display-name = "Partner"
+ id = "partner_filter"
+ name = "partner"
+ type = "dimension"
+ widget-type = "string/="
}
+ submission_date = {
+ default = "past7days"
+ dimension = [
+ "field",
+ 58032,
+ null,
]
+ display-name = "Submission Date"
+ id = "date_range_filter"
+ name = "submission_date"
+ type = "dimension"
+ widget-type = "date/all-options"
}
+ utm_campaign = {
+ dimension = [
+ "field",
+ 58050,
+ null,
]
+ display-name = "UTM Campaign"
+ id = "utm_campaign_filter"
+ name = "utm_campaign"
+ type = "dimension"
+ widget-type = "string/="
}
+ utm_medium = {
+ dimension = [
+ "field",
+ 58053,
+ null,
]
+ display-name = "UTM Medium"
+ id = "utm_medium_filter"
+ name = "utm_medium"
+ type = "dimension"
+ widget-type = "string/="
}
+ utm_source = {
+ dimension = [
+ "field",
+ 57963,
+ null,
]
+ display-name = "UTM Source"
+ id = "utm_source_filter"
+ name = "utm_source"
+ type = "dimension"
+ widget-type = "string/="
}
}
}
+ type = "native"
}
+ description = null
+ display = "bar"
+ name = "Homeowners – Daily Screeners"
+ parameter_mappings = []
+ parameters = []
+ query_type = "native"
+ visualization_settings = {
+ "graph.dimensions" = [
+ "SUBMISSION_DATE",
]
+ "graph.metrics" = [
+ "Screeners",
]
+ "graph.show_values" = true
+ "graph.x_axis.title_text" = "Date"
+ "graph.y_axis.title_text" = "Screeners Completed"
}
}
)
}
# metabase_card.cesn_homeowners_disconnected["wa"] will be created
+ resource "metabase_card" "cesn_homeowners_disconnected" {
+ id = (known after apply)
+ json = jsonencode(
{
+ cache_ttl = null
+ collection_id = 273
+ collection_position = null
+ dataset_query = {
+ database = 34
+ native = {
+ query = <<-EOT
SELECT
CASE WHEN electricity_is_disconnected THEN 'Yes' ELSE 'No' END AS "Answer",
count(*) AS "# of Screeners"
FROM analytics.mart_screener_data
WHERE is_home_owner = true
AND electricity_is_disconnected IS NOT NULL
[[AND {{submission_date}}]]
[[AND {{partner}}]]
[[AND {{county}}]]
GROUP BY 1
ORDER BY 1
EOT
+ template-tags = {
+ county = {
+ dimension = [
+ "field",
+ 57992,
+ null,
]
+ display-name = "County"
+ id = "county_filter"
+ name = "county"
+ type = "dimension"
+ widget-type = "string/="
}
+ partner = {
+ dimension = [
+ "field",
+ 58029,
+ null,
]
+ display-name = "Partner"
+ id = "partner_filter"
+ name = "partner"
+ type = "dimension"
+ widget-type = "string/="
}
+ submission_date = {
+ dimension = [
+ "field",
+ 58032,
+ null,
]
+ display-name = "Submission Date"
+ id = "date_range_filter"
+ name = "submission_date"
+ type = "dimension"
+ widget-type = "date/all-options"
}
+ utm_campaign = {
+ dimension = [
+ "field",
+ 58050,
+ null,
]
+ display-name = "UTM Campaign"
+ id = "utm_campaign_filter"
+ name = "utm_campaign"
+ type = "dimension"
+ widget-type = "string/="
}
+ utm_medium = {
+ dimension = [
+ "field",
+ 58053,
+ null,
]
+ display-name = "UTM Medium"
+ id = "utm_medium_filter"
+ name = "utm_medium"
+ type = "dimension"
+ widget-type = "string/="
}
+ utm_source = {
+ dimension = [
+ "field",
+ 57963,
+ null,
]
+ display-name = "UTM Source"
+ id = "utm_source_filter"
+ name = "utm_source"
+ type = "dimension"
+ widget-type = "string/="
}
}
}
+ type = "native"
}
+ description = null
+ display = "bar"
+ name = "Homeowners – Utility Currently Disconnected?"
+ parameter_mappings = []
+ parameters = []
+ query_type = "native"
+ visualization_settings = {
+ "graph.dimensions" = [
+ "Answer",
]
+ "graph.metrics" = [
+ "# of Screeners",
]
+ "graph.show_values" = true
+ series_settings = {
+ "# of Screeners" = {
+ color = "#509EE3"
}
}
}
}
)
}
# metabase_card.cesn_homeowners_electric_provider["wa"] will be created
+ resource "metabase_card" "cesn_homeowners_electric_provider" {
+ id = (known after apply)
+ json = jsonencode(
{
+ cache_ttl = null
+ collection_id = 273
+ collection_position = null
+ dataset_query = {
+ database = 34
+ native = {
+ query = <<-EOT
SELECT
COALESCE(electric_provider_name, electric_provider, '(Unknown)') AS "Provider",
count(*) AS "# of Screeners"
FROM analytics.mart_screener_data
WHERE is_home_owner = true
AND electric_provider IS NOT NULL
[[AND {{submission_date}}]]
[[AND {{partner}}]]
[[AND {{county}}]]
GROUP BY 1
ORDER BY 2 DESC
LIMIT 20
EOT
+ template-tags = {
+ county = {
+ dimension = [
+ "field",
+ 57992,
+ null,
]
+ display-name = "County"
+ id = "county_filter"
+ name = "county"
+ type = "dimension"
+ widget-type = "string/="
}
+ partner = {
+ dimension = [
+ "field",
+ 58029,
+ null,
]
+ display-name = "Partner"
+ id = "partner_filter"
+ name = "partner"
+ type = "dimension"
+ widget-type = "string/="
}
+ submission_date = {
+ dimension = [
+ "field",
+ 58032,
+ null,
]
+ display-name = "Submission Date"
+ id = "date_range_filter"
+ name = "submission_date"
+ type = "dimension"
+ widget-type = "date/all-options"
}
+ utm_campaign = {
+ dimension = [
+ "field",
+ 58050,
+ null,
]
+ display-name = "UTM Campaign"
+ id = "utm_campaign_filter"
+ name = "utm_campaign"
+ type = "dimension"
+ widget-type = "string/="
}
+ utm_medium = {
+ dimension = [
+ "field",
+ 58053,
+ null,
]
+ display-name = "UTM Medium"
+ id = "utm_medium_filter"
+ name = "utm_medium"
+ type = "dimension"
+ widget-type = "string/="
}
+ utm_source = {
+ dimension = [
+ "field",
+ 57963,
+ null,
]
+ display-name = "UTM Source"
+ id = "utm_source_filter"
+ name = "utm_source"
+ type = "dimension"
... (truncated — full plan is 411732 bytes)Pusher: @catonph, Action: |
The WA (Washington) tenant Terraform config was merged to main before the tenant was deploy-ready, causing terraform-apply on main to fail while provisioning ~51 WA resources. Because Terraform applies all-or-nothing per run, this blocked ALL main deploys to Metabase — including the benefit-card perf fix (#101), which is correct but stuck behind the failing apply. Reverting the WA config restores main to a cleanly-applyable state so #101 and future changes deploy. WA dashboard work should land via its own branch once the WA tenant (Metabase DB, permission groups, secrets) is fully set up and the apply is verified. Also removes stray .DS_Store files committed with that change. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…marshal terraform-apply on main started failing today at metabase_permissions_graph.graph: Error: Unexpected error while calling the Metabase API for 'get permissions graph'. json: cannot unmarshal object into Go struct field PermissionsGraphDatabasePermissions.groups.create-queries Provider 0.14.1 only modeled `create-queries` as a scalar string, but Metabase returns it as an OBJECT once a group is granted granular (per-schema/per-table) create-query permissions via the Admin Permissions UI. So a UI permissions change (not a repo change) made the provider fail on state refresh, blocking ALL prod deploys — including the already-merged benefit-card perf fix (#101). Provider 0.14.2 fixes exactly this (changelog: "Handle create_queries as either a simple string or a serialized JSON object"). The `~> 0.14` constraint already allowed it; the lockfile was pinned to 0.14.1. Bumped constraint to `>= 0.14.2, ~> 0.14` and refreshed the lock for linux_amd64 (CI) + darwin_arm64. Unblocks deploys; no permissions.tf change needed (the granular UI perms are now parsed correctly rather than reverted). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…block deploys) (#104) * Revert "wa progress" (46663bd) to unblock prod deploys The WA (Washington) tenant Terraform config was merged to main before the tenant was deploy-ready, causing terraform-apply on main to fail while provisioning ~51 WA resources. Because Terraform applies all-or-nothing per run, this blocked ALL main deploys to Metabase — including the benefit-card perf fix (#101), which is correct but stuck behind the failing apply. Reverting the WA config restores main to a cleanly-applyable state so #101 and future changes deploy. WA dashboard work should land via its own branch once the WA tenant (Metabase DB, permission groups, secrets) is fully set up and the apply is verified. Also removes stray .DS_Store files committed with that change. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Bump flovouin/metabase provider to 0.14.2 to fix permissions_graph unmarshal terraform-apply on main started failing today at metabase_permissions_graph.graph: Error: Unexpected error while calling the Metabase API for 'get permissions graph'. json: cannot unmarshal object into Go struct field PermissionsGraphDatabasePermissions.groups.create-queries Provider 0.14.1 only modeled `create-queries` as a scalar string, but Metabase returns it as an OBJECT once a group is granted granular (per-schema/per-table) create-query permissions via the Admin Permissions UI. So a UI permissions change (not a repo change) made the provider fail on state refresh, blocking ALL prod deploys — including the already-merged benefit-card perf fix (#101). Provider 0.14.2 fixes exactly this (changelog: "Handle create_queries as either a simple string or a serialized JSON object"). The `~> 0.14` constraint already allowed it; the lockfile was pinned to 0.14.1. Bumped constraint to `>= 0.14.2, ~> 0.14` and refreshed the lock for linux_amd64 (CI) + darwin_arm64. Unblocks deploys; no permissions.tf change needed (the granular UI perms are now parsed correctly rather than reverted). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Problem
The 'qualified_benefits' and 'immediate_needs' dashboard cards timed out (minutes / never loaded) even after the COALESCE join fix (#99) and the RLS-function-inlining fix (#100).
Root cause
The 'CROSS JOIN totals t' (where 'totals' counts filtered 'mart_screener_data') confused the planner's row estimation for the multi-column COALESCE join. It estimated the join at rows=1 and chose a Nested Loop — which exploded over the ~19k actual joined rows. 'EXPLAIN' showed a cheap plan; real execution timed out. (This is why every isolated test looked fine but the card died.)
Fix
Drop 'totals' / 'CROSS JOIN totals t'; compute the denominator as an inline scalar subquery in the '% of Screeners' expression. Identical result, but the planner now picks a Hash Join.
Verification
Scope
Applied to all 3 benefit/needs cards. 'current_benefits' already worked (#98 indexed 'screen_id' join) but carried the same 'CROSS JOIN' pattern → same treatment to remove latent risk.
Audited all other cards: remaining 'CROSS JOIN totals' usages are single-table (no join) or join on an indexed single 'screener_id' key with a tiny aggregated cross join — not the at-risk shape. No change needed.
Card SQL only — no mart/model change, no dbt run. Deploys via Terraform on merge.
Concludes the MFB-867 dashboard perf saga (#96 → #97 → #98 → #99 → #100 → this).
🤖 Generated with Claude Code
Summary by CodeRabbit