GoExplore Analytics

10-Day Project Roadmap & KPI Blueprint
⚡ BI Squad: The Lobster Lookers ⚡ Blessy · Ayo · Iliya · Andreas

1. The Mission

The Situation

GoExplore is a growing camping and hiking supplier. Their only data scientist left without notice. CEO Sabah handed us a single spreadsheet and two weeks to build a working analytics setup from scratch.

Two Questions to Answer

① Expansion: GoExplore wants to open in 4 new European countries. Which market sizes should they expect?

② Retailer Performance: Do specialty stores (like Golf Shops) perform differently than general stores (like Sports Stores)?

2. What's in the Data

The spreadsheet contains 4 separate sheets — think of them as 4 tables that can be connected to each other:

Sheet name What it contains Key columns
retailers Every store that sells GoExplore products — their name, type, and country Retailer code, Name, Type, Country
products Every product GoExplore sells — category, brand, cost, and price Product number, Product line, Unit cost, Unit price
daily_sales Every single transaction — 149,257 rows from January 2015 to July 2018. This is the main data source. Retailer code, Product number, Date, Quantity, Unit sale price, Order method code
methods How each order was placed — by phone, fax, web, etc. Order method code, Order method type

Important: Revenue does not exist yet

There is no "Revenue" column in the data. We have to calculate it ourselves for every row: Quantity × Unit sale price. All our KPIs are built on this calculation.

3. Our 5 KPIs

A KPI (Key Performance Indicator) is a number that answers a specific business question. Each of our 5 KPIs directly addresses something Sabah asked for.

01
Total Revenue by Country
Expansion
What it answers

Which of our existing 21 markets generates the most revenue? This is the starting point for everything — before we can estimate what Norway or Poland might be worth, we need to know what countries like Sweden or Germany actually earn for GoExplore today.

How to calculate it
Revenue = Quantity × Unit sale price, then add it all up per country
SQL query in BigQuery
SELECT r.Country, SUM(s.Quantity * s.Unit_sale_price) AS Total_Revenue FROM daily_sales AS s JOIN retailers AS r ON s.Retailer_code = r.Retailer_code GROUP BY r.Country ORDER BY Total_Revenue DESC;
02
Revenue per Capita (per person)
Expansion
What it answers

Germany has 84 million people and Sweden has 10 million — so of course Germany earns more in total. But that doesn't mean Germany is a "better" market per person. Revenue per capita (per person) removes that size bias and shows how much GoExplore earns per inhabitant in each country. We then use that number to estimate what the 4 new markets could be worth.

How to calculate it
Revenue per capita = Total country revenue ÷ Number of people in that country
External data we need (from Eurostat and World Bank)

We need population and GDP (Gross Domestic Product — the total economic output of a country) figures for our 4 target markets. These come from public databases and will be added to our Google Sheet manually:

Target country Population GDP (Gross Domestic Product) Best comparison market we already have
Norway 5.5 million $580 billion USD Sweden (similar size, same region)
Czech Republic 10.8 million $330 billion USD Austria (similar size, Central Europe)
Poland 36.8 million $860 billion USD Germany / France (larger markets)
Portugal 10.4 million $270 billion USD Spain (same peninsula, similar culture)
SQL query in BigQuery
SELECT r.Country, SUM(s.Quantity * s.Unit_sale_price) / ext.Population AS Revenue_per_Capita FROM daily_sales AS s JOIN retailers AS r ON s.Retailer_code = r.Retailer_code LEFT JOIN external_market_data AS ext ON r.Country = ext.Country GROUP BY r.Country, ext.Population ORDER BY Revenue_per_Capita DESC;
03
Average Order Value (AOV) by Store Type
Retailer Analysis
What it answers

When a Golf Shop places an order, how much is it worth on average? And how does that compare to a general Sports Store? AOV (Average Order Value) tells us the typical size of one order per store type — so we can see if specialty stores spend more per order than general ones.

How to calculate it
AOV = Total revenue for that store type ÷ Number of orders placed by that store type
A note on "orders"

The data doesn't have a column called "Order ID". So we treat each unique combination of Date + Retailer as one order. This is a reasonable assumption but has a limitation — see below.

SQL query in BigQuery
SELECT r.Type AS Store_Type, SUM(s.Quantity * s.Unit_sale_price) / COUNT(DISTINCT CONCAT(CAST(s.Date AS STRING), '-', CAST(s.Retailer_code AS STRING))) AS Average_Order_Value FROM daily_sales AS s JOIN retailers AS r ON s.Retailer_code = r.Retailer_code GROUP BY r.Type ORDER BY Average_Order_Value DESC;
⚠️ Known Limitation — Worth Mentioning to the Instructor

Because we don't have a real Order ID, we're grouping by Date + Retailer as a stand-in. If a retailer placed two separate orders on the same day, our query would count them as one. This slightly underestimates the true number of orders and makes our AOV a bit higher than reality. We know this and will flag it during the presentation.

04
Orders per Store
Retailer Analysis
What it answers

How often does a typical store of each type order from GoExplore? A Golf Shop might order less frequently than a general Sports Store — but each order might be worth more. This KPI measures how active each store type is as a buyer. It also helps Sabah understand how many stores he'd need in a new country to hit a revenue target.

How to calculate it
Orders per Store = Total number of orders for that store type ÷ Number of stores of that type
SQL query in BigQuery
SELECT r.Type AS Store_Type, COUNT(DISTINCT CONCAT(CAST(s.Date AS STRING), '-', CAST(s.Retailer_code AS STRING))) AS Total_Orders, COUNT(DISTINCT s.Retailer_code) AS Number_of_Stores, COUNT(DISTINCT CONCAT(CAST(s.Date AS STRING), '-', CAST(s.Retailer_code AS STRING))) / COUNT(DISTINCT s.Retailer_code) AS Orders_per_Store FROM daily_sales AS s JOIN retailers AS r ON s.Retailer_code = r.Retailer_code GROUP BY r.Type ORDER BY Orders_per_Store DESC;
05
Average Product Price by Store Type
Retailer Analysis
What it answers

Do Golf Shops and Eyewear Stores sell more expensive products than general Outdoors Shops? This KPI looks at the average price of individual items sold per store type. If specialty stores consistently sell higher-priced products, that explains why their AOV (KPI 3) might be higher — it's not just that they buy more, they buy pricier things.

How to calculate it
Average Product Price = Average of all "Unit sale price" values, grouped by store type
SQL query in BigQuery
SELECT r.Type AS Store_Type, AVG(s.Unit_sale_price) AS Avg_Product_Price, MAX(s.Unit_sale_price) AS Most_Expensive_Item_Sold FROM daily_sales AS s JOIN retailers AS r ON s.Retailer_code = r.Retailer_code GROUP BY r.Type ORDER BY Avg_Product_Price DESC;

6. Further Analysis Ideas

Suggested by Kelvin as natural extensions once the 5 core KPIs are in place.

+1
Low-Volume, High-Margin Products (Promotion Candidates)
Product Strategy
What it answers

Which products sell poorly but generate a high profit per unit? These are the best candidates for a targeted promotion — pushing a product that already earns well per sale but just needs more visibility is smarter than promoting a bestseller that sells itself anyway.

How to calculate it
Margin per unit = Unit price − Unit cost  |  then filter for low quantity sold + high margin
SQL query in BigQuery
SELECT p.Product, p.Product_line, (p.Unit_price - p.Unit_cost) AS Margin_per_Unit, SUM(s.Quantity) AS Total_Units_Sold FROM daily_sales AS s JOIN products AS p ON s.Product_number = p.Product_number GROUP BY p.Product, p.Product_line, p.Unit_price, p.Unit_cost ORDER BY Total_Units_Sold ASC, Margin_per_Unit DESC LIMIT 20;
+2
Revenue Growth Over Time
Trend Analysis
What it answers

Is GoExplore actually growing? We have data from January 2015 to July 2018 — enough to see year-on-year trends and seasonal patterns. This tells Sabah whether the business is accelerating, plateauing, or dipping at certain times of year.

How to calculate it
Monthly revenue = SUM(Quantity × Unit sale price) grouped by Year and Month
SQL query in BigQuery
SELECT EXTRACT(YEAR FROM s.Date) AS Year, EXTRACT(MONTH FROM s.Date) AS Month, SUM(s.Quantity * s.Unit_sale_price) AS Monthly_Revenue FROM daily_sales AS s GROUP BY Year, Month ORDER BY Year, Month;
+3
Geographic Map in the Dashboard
Visualisation
What it answers

A world map in Data Studio that colours each country by revenue — darker means more revenue. This makes the expansion story immediately visible: Sabah can see at a glance which regions are strong and where the 4 new target countries sit relative to existing markets.

How to build it in Data Studio

Add a new chart → select Geo Chart → set Country as the dimension and Total Revenue as the metric. Data Studio draws the map automatically. No SQL needed at this step.

4. How We'll Estimate the New Markets

We can't know exactly how much GoExplore will earn in Norway or Poland — they've never operated there. But we can make a data-driven estimate using countries we already know. The logic is simple: if Sweden earns X per person, and Norway has a similar population and GDP, then Norway should earn roughly the same per person.

New target market Why this comparison market? Comparison market in our data
Norway Same region, similar wealth and outdoor culture Sweden + Denmark
Czech Republic Similar size, Central European market Austria
Poland Much larger — needs bigger reference markets Germany + France
Portugal Same peninsula, similar consumer culture Spain

5. The Three Tools We Use

We work entirely inside Google's ecosystem. Think of it as an assembly line — raw data goes in one end, live dashboard comes out the other.

Google Sheets
Where the raw data lives. We clean it here and add our external population and GDP numbers manually.
→
BigQuery
Google's cloud database. We connect our Sheet here and run SQL queries to calculate all 5 KPIs.
→
Data Studio
Google's dashboard tool (formerly Looker Studio). This is what Sabah sees — charts, filters, no SQL required.

6. The 10-Day Plan

Day 1 — Today
Data Discovery & External Data Collection
  • Open the spreadsheet in Google Sheets and explore all 4 sheets
  • Look for missing values, odd numbers, or anything that doesn't make sense
  • Find and copy population + GDP data for all 21 active countries and 4 target countries from Eurostat and World Bank
  • Add this external data as a 5th sheet in our Google Sheet
  • Present our 5 KPI plan to the instructor ← this is today's goal
Day 2 – 3
Data Cleaning & BigQuery Setup
  • Check for duplicate rows in daily_sales
  • Check for rows where Unit sale price is higher than Unit price (this would be a data error)
  • Check for missing values in key columns (Retailer code, Date, Quantity)
  • Connect our cleaned Google Sheet to BigQuery as a live data source
  • Verify that all 4 sheets loaded correctly with the right column names
Day 4 – 5
SQL Development in BigQuery
  • Write and test all 5 KPI queries (see section 3 above)
  • Join the 4 tables together using Retailer_code and Product_number
  • Create saved "views" in BigQuery so Data Studio can use them directly
  • Double-check that revenue totals make sense (sanity check)
Day 6 – 7
Dashboard in Data Studio
  • Connect BigQuery views to Data Studio
  • Build a world map showing revenue by country
  • Build a bar chart comparing store types across all 5 KPIs
  • Add a country filter so Sabah can drill into any market
  • Add a date range filter to show trends over time
Day 8 – 9
Insights & Presentation Prep
  • Read the dashboard and write down 3–5 concrete findings for Sabah
  • Calculate market size estimates for Norway, Czech Republic, Poland, Portugal
  • Prepare a short non-technical summary — what does this all mean for the business?
  • Rehearse the presentation as a team
Day 10 — Showdown
Live Presentation to Sabah & the Instructor
  • Morning: final checks, make sure the dashboard is live and filters work
  • Afternoon: present — walk Sabah through the dashboard and the 2 key business questions
  • Goal: Sabah leaves knowing exactly which 4 countries to prioritize and how his retailer network compares