Dashboard & Workbook Architecture
Core Principle: Analytics Data Mart for Reporting
IMPORTANT ARCHITECTURAL DECISION: All dashboards and workbooks MUST use theanalytics_dm star schema (dimensional model), NOT transactional schemas.
Why analytics_dm?
Theanalytics_dm schema is a data mart specifically designed for reporting, business intelligence, and analytics:
✅ Benefits:
- Optimized denormalized structure - Pre-joined data for fast dashboard queries
- Pre-aggregated metrics - Daily/monthly aggregations computed in advance
- Type 2 Slowly Changing Dimensions (SCDs) - Track historical changes for trend analysis
- Query performance - Star schema design optimized for analytical queries
- Data consistency - Single source of truth for reporting metrics
❌ Don’t Use Transactional Schemas:
investment.*- OLTP normalized structure, frequent writes, locking issuesvalidation.*- Operational validation data, not optimized for reportingperformance.*- Raw calculation tables, not aggregatedrisk.*- Point-in-time risk data, not historical trends
Schema Structure
Fact Tables (Metrics & Measurements):
analytics_dm.fact_portfolio_valuation- Daily NAV and valuationsanalytics_dm.fact_portfolio_valuation_monthly- Monthly aggregationsanalytics_dm.fact_holdings- Position-level holdingsanalytics_dm.fact_transactions- Trade activityanalytics_dm.fact_validation_results- Validation check resultsanalytics_dm.fact_performance- Performance metrics (returns, Sharpe, etc.)analytics_dm.fact_fees- Fee breakdowns and TER
Dimension Tables (Descriptive Attributes):
analytics_dm.dim_date- Calendar dimension (business days, fiscal periods)analytics_dm.dim_organization- Organization master (Type 2 SCD)analytics_dm.dim_portfolio- Portfolio hierarchy (Type 2 SCD)analytics_dm.dim_security- Security master (Type 2 SCD)analytics_dm.dim_share_class- Share class attributes (Type 2 SCD)analytics_dm.dim_validation_rule- Validation rule definitions
Dashboard Widget Configuration
Example Widget Config (Correct ✅):
Example Widget Config (Wrong ❌):
Exceptions
Operational Workflows: Theworkflow.* schema is allowed for operational workflow tracking since it represents current state, not historical analytics:
workflow.workflow_instances- Current workflow execution stateworkflow.workflow_steps- Active workflow steps
Data Flow
Implementation
Migration 045:
- Defines all dashboard widgets with
analytics_dm.*dataSources - Documents this architectural decision
- Populates 7 production dashboards
DashboardRenderer Component:
- Located:
components/dashboard/DashboardRenderer.tsx - Fetches data from
widget.config.dataSource(analytics_dm schema) - Uses Supabase client:
supabase.from(tableName).select('*')
Supabase API Configuration:
- Exposed schemas:
analytics_dm,workflow, and transactional schemas - Extra search path includes
analytics_dmfor default resolution - All schemas accessible via
schema.tablenotation
Best Practices
- Always query analytics_dm - Use fact and dimension tables for dashboards
- Use appropriate fact tables - Choose the right grain (daily, monthly, transaction-level)
- Join dimensions as needed - Leverage Type 2 SCDs for historical context
- Filter on date dimensions - Use
dim_datefor calendar-based filtering - Pre-aggregate when possible - Use monthly fact tables for year-over-year trends
ETL & Data Pipeline
Theanalytics_dm schema is populated by ETL processes (not shown in this codebase):
- Incremental daily loads from transactional schemas
- Type 2 SCD updates for dimension changes
- Pre-aggregation of monthly metrics
- Data quality validation
analytics_dm should only occur via ETL pipelines, not application code.
Last Updated: October 4, 2025 Migration: 045_populate_dashboard_widgets.sql Related Files:
supabase/migrations/031_analytics_star_schema.sqlcomponents/dashboard/DashboardRenderer.tsx