A fully interactive sales analytics dashboard built using Streamlit, Snowflake Snowpark, Pandas, and Altair. This dashboard allows users to explore and visualize retail sales data with dynamic filters and KPIs, all hosted directly inside Snowflake (no external server needed).
- π Date Range Filtering β Explore data across custom time ranges.
- π Region Filter β View sales performance across different regions.
- π· Category Filter β Analyze category-wise product performance.
- π° Dynamic KPIs β See real-time totals for:
- Total Sales
- Total Orders
- Average Order Value
- π Sales Over Time β Interactive time-series chart.
- π¦ Category-Wise Sales β Bar chart for product categories.
- π Region-Wise Sales β Regional performance comparison.
- π§Ύ Raw Data Viewer β Toggle to inspect underlying data.
| Tool | Purpose |
|---|---|
| Streamlit | Interactive frontend UI and app logic |
| Snowflake | Cloud data warehouse and compute |
| Snowpark | Python API for querying Snowflake |
| Pandas | Data manipulation |
| Altair | Declarative data visualization |
π retail-sales-dashboard/ β βββ π streamlit_app.py # Main Streamlit app script βββ π README.md # Project overview (this file) βββ π requirements.txt # Python dependencies (optional) βββ π Snowflake objects: βββ DATABASE: retail_analytics_db βββ SCHEMA: sales_data βββ TABLES: β βββ FACT_ORDERS β βββ DIM_PRODUCT β βββ DIM_REGION
- Create Database & Tables:
CREATE DATABASE retail_analytics_db;
CREATE SCHEMA sales_data;
CREATE OR REPLACE TABLE retail_sales_data (
order_id STRING,
product_id STRING,
product_name STRING,
category STRING,
region STRING,
quantity INTEGER,
price FLOAT,
order_date DATE
);
Load CSV data into retail_sales_data using Snowflake's COPY INTO.
Create Dimension and Fact Tables:
USE DATABASE retail_analytics_db;
USE SCHEMA sales_data;
CREATE OR REPLACE TABLE FACT_ORDERS AS
SELECT
ORDER_ID,
PRODUCT_ID,
REGION,
QUANTITY,
PRICE,
QUANTITY * PRICE AS TOTAL_AMOUNT,
ORDER_DATE
FROM RETAIL_SALES_DATA;
CREATE OR REPLACE TABLE DIM_PRODUCT AS
SELECT DISTINCT
PRODUCT_ID,
PRODUCT_NAME,
CATEGORY
FROM RETAIL_SALES_DATA;
CREATE OR REPLACE TABLE DIM_REGION AS
SELECT DISTINCT REGION FROM RETAIL_SALES_DATA;
βΆοΈ Running the App
If running inside Snowflake Native App (hosted Streamlit):
No setup needed β simply open the Streamlit app in your Snowflake worksheet.
If running locally (optional):
bash
Copy
Edit
pip install -r requirements.txt
streamlit run streamlit_app.py
You'll need a valid Snowflake connection locally, which is not required inside Snowflake Native Streamlit.
