-- PostgreSQL Relational Schema & Pre-Aggregated View
CREATE TABLE dim_customers (
customer_id VARCHAR(50) PRIMARY KEY,
customer_name VARCHAR(150),
region VARCHAR(100),
signup_date DATE
);
CREATE TABLE fact_orders (
order_id VARCHAR(50) PRIMARY KEY,
customer_id VARCHAR(50) REFERENCES dim_customers(customer_id),
order_date DATE,
order_status VARCHAR(50),
order_amount NUMERIC(12, 2)
);
-- Executive Pre-Aggregated View for Power BI Direct Connection
CREATE OR REPLACE VIEW v_customer_lifetime_kpis AS
SELECT
c.customer_id,
c.customer_name,
c.region,
COUNT(o.order_id) AS total_orders,
SUM(o.order_amount) AS total_spend,
ROUND(AVG(o.order_amount), 2) AS avg_basket_size,
MIN(o.order_date) AS first_order_date,
MAX(o.order_date) AS last_order_date
FROM dim_customers c
JOIN fact_orders o ON c.customer_id = o.customer_id
WHERE o.order_status = 'DELIVERED'
GROUP BY c.customer_id, c.customer_name, c.region;