Interactive business intelligence dashboard analyzing Google Merchandise Store performance (Aug 2016 - Aug 2017)
Self-service analytics platform built with BigQuery SQL and Google Sheets Connected Sheets, enabling stakeholders to explore 903,653 sessions and $1.54M in e-commerce revenue through interactive filtering and multi-dimensional analysis.
Live Dashboard: View Dashboard (View-only access)
| Metric | Value |
|---|---|
| Total Revenue | $1,540,071 |
| Total Sessions | 903,653 |
| Conversion Rate | 1.34% |
| Average Order Value | $127.12 |
Desktop users generate 95.6% of revenue ($1,472,575) while mobile traffic represents 23% of sessions but only 3.2% of revenue ($49,770). This significant conversion gap presents a clear optimization opportunity - improving mobile experience could unlock substantial additional revenue.
- Referral traffic drives 42% of revenue ($651,430) with highest engagement
- Direct traffic contributes 28% of revenue ($434,841)
- Organic Search delivers 21% of revenue ($326,381)
- Combined top 3 channels account for 91% of total revenue
- United States dominates with 93.8% of revenue ($1,444,139)
- International markets represent growth opportunity with only 6.2% revenue share
- United Kingdom and India show early traction as secondary markets
Dataset: ga_analytics (7 SQL views)
Built on Google's public bigquery-public-data.google_analytics_sample dataset containing anonymized Google Analytics 360 data from the Google Merchandise Store.
Key Views:
daily_summary- Daily performance metrics with bounce rate and conversion rate calculationschannel_performance- Marketing channel ROI analysis with revenue per visitdevice_analysis- Device category performance comparisonmonthly_trends- Time series aggregations for trend analysisgeographic_performance- Country-level revenue and engagement metricsproduct_performance- Product-level revenue using UNNEST operationssummary_totals- Pre-aggregated KPIs optimized for Google Sheets formulas
SQL Techniques Used:
UNNESToperations for nested product arrays- Window functions for running totals and rankings
PARSE_DATEfor date transformations- Complex aggregations across multiple dimensions
- Calculated fields for conversion rates and revenue metrics
Components:
- 4 interactive pivot tables
- 6 dynamic slicers (month, revenue, visits, channel, country, device)
- Combo chart (revenue bars + visits line)
- Pie chart (revenue distribution by channel)
- 4 KPI cards with real-time metrics
Integration:
- Connected Sheets for live BigQuery connection
- Automated refresh capability
- No-code interface for business users
6 slicers enable real-time exploration:
- Time filters: Month, revenue range, visit range
- Dimension filters: Marketing channel, device type, country
All visualizations update simultaneously when filters are applied.
Cross-reference performance across:
- Marketing channels (Referral, Direct, Organic Search, Display, Paid Search, Social, Affiliates)
- Device categories (Desktop, Mobile, Tablet)
- Geographic markets (United States, United Kingdom, India, and more)
- Time periods (13 months from Aug 2016 to Aug 2017)
Business users can:
- Explore data without SQL knowledge
- Apply filters to answer specific questions
- Export filtered data for presentations
- Refresh data on-demand from BigQuery
Problem: Google Sheets doesn't support complex formulas (TEXT(), COUNTA(), nested calculations) on Connected Sheets data sources.
Solution: Created summary_totals view in BigQuery with pre-calculated metrics:
-- Pre-calculate conversion rate in BigQuery instead of Google Sheets formula
ROUND(SUM(totals.transactions) * 100.0 / NULLIF(SUM(totals.visits), 0), 2) as conversion_rate_pctThen extracted the single-row result to regular Google Sheets for formula compatibility.
Impact: Enabled accurate KPI calculations while maintaining data integrity.
Problem: master_data contains 903K rows, but Google Sheets extracts are limited to 250K rows, causing incomplete KPIs.
Solution:
- Used Connected Sheets (not extracts) for pivot tables - handles full 903K dataset
- Extracted only the 1-row
summary_totalsfor KPI formulas - Pivot tables aggregate in BigQuery, not Sheets
Impact: Full dataset analysis without row limitations.
Problem: Slicers need to filter all pivot tables simultaneously, but each table uses different aggregation levels (daily, monthly, channel, device).
Solution: Built all pivot tables from single master_data source with session-level granularity:
SELECT
PARSE_DATE('%Y%m%d', date) as date,
channelGrouping as channel,
device.deviceCategory as device,
geoNetwork.country as country,
totals.visits,
totals.transactions,
totals.transactionRevenue / 1000000 as revenue,
FORMAT_DATE('%Y-%m', PARSE_DATE('%Y%m%d', date)) as month
FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE _TABLE_SUFFIX BETWEEN '20160801' AND '20170801'Impact: Consistent filtering across all visualizations with single slicer click.
google-analytics-dashboard/
├── README.md # Project documentation
├── INSIGHTS.md # Business insights and recommendations
├── sql/
│ ├── daily_summary.sql # Daily metrics with bounce/conversion rates
│ ├── channel_performance.sql # Marketing channel ROI analysis
│ ├── device_analysis.sql # Device category comparison
│ ├── monthly_trends.sql # Time series aggregations
│ ├── geographic_performance.sql # Country-level performance
│ ├── product_performance.sql # Product revenue with UNNEST
│ └── summary_totals.sql # Pre-aggregated KPIs
├── screenshots/
│ ├── dashboard-overview.png # Full dashboard view
│ ├── interactive-filtering.png # Slicers demonstration
│ └── mobile-insight.png # Key finding visualization
└── LICENSE # MIT License
- SQL: BigQuery Standard SQL with advanced analytics functions
- Data Warehouse: Google BigQuery
- Visualization: Google Sheets (Pivot Tables, Charts, Slicers)
- Data Integration: Connected Sheets (live BigQuery connection)
- Google Cloud Platform account
- Access to BigQuery
- Google Sheets
-- Create dataset in your GCP project
CREATE SCHEMA `your-project-id.ga_analytics`;Run each SQL file in the sql/ folder to create the 7 views:
-- Example: Create daily_summary view
-- Copy content from sql/daily_summary.sql and run in BigQuery console- Create new Google Sheet
- Data → Data connectors → Connect to BigQuery
- Select your project:
your-project-id - Select dataset:
ga_analytics - Connect each view as a separate sheet
Create Pivot Tables:
- Insert → Pivot table
- Data range:
master_data(entire sheet) - Configure rows, values, and sort orders
- Repeat for all 4 pivot tables
Add Slicers:
- Click inside pivot table
- Data → Slicer
- Select column (channel, device, country, month, revenue, visits)
- Connect slicer to all pivot tables
Create Visualizations:
- Insert → Chart
- Configure combo chart (revenue + visits)
- Configure pie chart (revenue by channel)
Extract Summary Totals:
- Go to
summary_totalssheet - Click "Extract" button
- Create
summary_extractsheet - Use for KPI formulas
- Add colored borders to KPI cards
- Format numbers (currency, percentages)
- Add section headers
- Position slicers on right side
- Align all components
Full setup guide: See SETUP.md for detailed step-by-step instructions.
This dashboard enables stakeholders to answer:
Marketing Questions:
- Which channels deliver the best ROI?
- Where should we allocate marketing budget?
- How do paid vs organic channels compare?
Product Questions:
- How does mobile experience impact conversions?
- What's the revenue difference between device types?
- Should we prioritize mobile optimization?
Growth Questions:
- Which countries show the most potential?
- What are our seasonal revenue patterns?
- Where are untapped market opportunities?
- Pre-aggregate calculations in SQL when Google Sheets formulas have limitations
- Use UNNEST for nested/repeated fields in Google Analytics schema
- Create session-level master table for flexible pivot table filtering
- Optimize for Connected Sheets constraints (row limits, formula restrictions)
- Build all pivots from single data source for consistent filtering
- Extract only small aggregated tables for formula use
- Use slicers instead of dropdown filters for better UX
- Pre-calculate metrics in database layer when visualization tool has limitations
- Mobile optimization represents largest opportunity (96% desktop revenue concentration)
- Channel diversification could reduce referral dependency risk (42% concentration)
- Geographic expansion could drive growth (94% US revenue concentration)
- Data-driven insights require both technical implementation and business context
Potential improvements:
- Add customer cohort analysis
- Implement funnel visualization for checkout process
- Include time-to-purchase metrics
- Add product category performance breakdown
- Integrate with Google Analytics 4 dataset (when available)
- Automate dashboard refresh with Apps Script
- Add anomaly detection alerts
Source: Google BigQuery Public Datasets
Dataset: bigquery-public-data.google_analytics_sample
Period: August 1, 2016 - August 1, 2017
Update Frequency: Static historical dataset (for demonstration purposes)
Note: This dataset contains anonymized Google Analytics 360 data from the Google Merchandise Store and is provided by Google for educational and demonstration purposes.
Osvaldo Ruiz
Analyst | Data Visualization | Business Intelligence
- Portfolio: ruizosvaldo.github.io
- LinkedIn: linkedin.com/in/OsvaldoRuiz
- GitHub: github.com/ruizOsvaldo
- Email: oruiz.code@gmail.com
MIT License - See LICENSE file for details.
- Google Cloud Platform for providing public BigQuery datasets
- Google Analytics sample dataset for realistic e-commerce data
- Google Sheets Connected Sheets for enabling no-code BI solutions
Built with: BigQuery SQL • Google Sheets • Connected Sheets • Data Visualization
Project Type: Business Intelligence • Analytics Dashboard • Self-Service Analytics
