End-to-end analytics stack to analyze marketing performance for the Maven Fuzzy Factory e-commerce dataset. The project ingests CSVs with DLT, transforms with dbt, orchestrates with Dagster, and surfaces KPIs consumable in Metabase.
- Trends in sessions and orders
- Session-to-order conversion rate
- Performance by acquisition channel (utm_source)
- Revenue, gross margin, and refunds
- Revenue per order and per session
CSV (data/)
→ DLT ingestion → Snowflake (raw)
→ dbt (staging → intermediate → marts)
→ KPIs + tests + Elementary report
→ Metabase dashboard
- Ingestion:
dlt+polars - Transformation:
dbt-core+dbt-snowflake - Orchestration:
dagster+dagster-dbt - Data Quality:
dbt tests+elementary-data - BI:
Metabase - Warehouse:
Snowflake
data/– raw CSVs + data dictionary (maven_fuzzy_factory_data_dictionary.csv)ingestion/– DLT pipeline (CSV → Snowflakeraw)dbt_marketing_perf/– dbt project (staging, intermediate, marts, tests, exposures)infra/– Dagster orchestration + ops scriptsdashboard/– Metabase dashboard export (PDF)docs/– user guide, runbook, optimization notes
- Staging: source normalization (
stg_*) - Intermediate: business joins (
int_*) - Marts:
- Core:
fct_sessions,fct_orders,fct_order_items,fct_refunds,dim_products,dim_users - KPIs:
kpi_daily_overview,kpi_daily_marketing_channels
- Core:
KPI marts are incremental with a rolling 3‑day recompute window to keep data fresh.
- Python 3.10+
- Snowflake access (account, warehouse, database)
dbtanddagsterinstalled viarequirements.txt
Snowflake environment variables used by dbt (see dbt_marketing_perf/profiles.yml):
SNOWFLAKE_ACCOUNTSNOWFLAKE_USERSNOWFLAKE_PASSWORDSNOWFLAKE_ROLESNOWFLAKE_DATABASESNOWFLAKE_WAREHOUSE
Notes:
- DLT reads its configuration from
ingestion/.dlt/(orinfra/.dlt/when orchestrated). ingestion/filesystem_pipeline.pyuses an absolute path todata/. UpdateDATA_PATHif the repo moves.
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# DLT ingestion
python ingestion/filesystem_pipeline.py
# dbt build + tests
cd dbt_marketing_perf
DBT_PROFILES_DIR=. dbt deps
DBT_PROFILES_DIR=. dbt build
# dbt docs
DBT_PROFILES_DIR=. dbt docs generate
DBT_PROFILES_DIR=. dbt docs serve
# Elementary report (HTML)
./infra/elementary/run_report.sh- Ingestion job:
dlt_pipeline_job - Transformation job:
dbt_build_job(auto-triggered after successful DLT run) - Schedule: daily at 06:00 UTC
Start the Dagster UI:
cd infra
DAGSTER_HOME=$(pwd)/.dagster dagster dev -w dagster_project/workspace.yaml- PDF export:
dashboard/Metabase - MARKETING PERFORMANCE DASHBOARD.pdf - dbt exposure:
marketing_kpis_dashboard(default local URL indbt_marketing_perf/models/exposures.yml)
- Constraints and relationship tests in
schema.yml - Freshness/anomaly monitoring via Elementary
- Dagster sensors to trigger dbt and alert on failures
docs/user_guide.md– daily workflowdocs/ops_optimization.md– Snowflake optimization recommendationsdocs/kt_checklist.md– handover checklist
- DLT ingestion
dbt build+ tests- Generate the Elementary report
- Review the Metabase dashboard
