top of page

Every Little Helps: Turning Tesco Orders into Household Spending Insights

  • 3 days ago
  • 7 min read

Can household data reveal whether the weekly shop is really becoming more expensive?


Reports about the rising cost of groceries seem to be everywhere. But while the headlines describe national trends, I wanted to know what was happening closer to home.


Was my household grocery spending also increasing? Were we spending more each week without noticing? More importantly, could I change some of our shopping habits without compromising the quality of what we bought?


Tesco’s order history provided part of the picture, but scrolling through individual orders could only tell me so much. I could roughly estimate what we were spending, but I wanted to know—not simply think I knew.


That question led me to build a Power BI dashboard that transforms my Tesco purchase history into a practical household spending tool.


Why This Project?

The number I cared about most was our average weekly grocery spend.


If that figure remained stable or moved down while food prices were reportedly rising, I would know our spending habits were moving in the right direction. If it began climbing, I wanted enough information to understand the change and take action.


I also wanted to answer several related questions:

  • How much were we spending per order?

  • How frequently were we placing orders?

  • How did current spending compare with the previous year?

  • Was our recent spending trending up or down?

  • How much were we saving through Clubcard offers and coupons?


The objective was not simply to make an attractive dashboard. I wanted to establish meaningful household KPIs and use them to make better decisions.


Starting with Tesco’s Data

The Tesco JSON export contained much more information than was visible in the standard order-history screen.


It included 317 purchases between June 2023 and June 2026, with 6,722 individual item records. Available fields included purchase timestamps, basket values, savings, payment details, quantities, weights and product descriptions.


However, not everything belonged in the first version of the project.


Of the 317 purchases, 200 were online grocery orders and 117 were in-store transactions. I filtered the analysis to online orders because these represented our planned, larger grocery shops. The in-store transactions were usually small, occasional purchases with a fundamentally different purpose. Combining them would have made measures such as average order value less meaningful.


I also decided not to begin with individual products. Product names were inconsistent, and the data did not include categories. Analysing thousands of unclassified items would have introduced unnecessary complexity before I had answered the project’s primary question: how much were we spending on our main grocery shops?


That became an important scoping decision. I focused Phase 1 on reliable order-level analysis while preserving product-level analysis as a potential second phase.


Preparing the Data with Power Query

I used Power Query to navigate the nested JSON structure, isolate online grocery orders and prepare the required fields:

  • Order timestamp

  • Order type

  • Gross order value

  • Order savings

  • Net order value

  • Number of items

  • Payment amount


I then created supporting fields for month, year and week.


Each column was assigned an appropriate data type, including currency, whole numbers and dates. This was a relatively simple step, but an essential one: calculations are only reliable when the underlying fields are interpreted correctly.


I also separated the date from the original timestamp and created a dedicated date table.


This prevented problems when more than one order occurred on the same day and gave me consistent control over daily, weekly, monthly and yearly analysis. It also provided a clean foundation for time-intelligence calculations.


To keep the model organised, I created a separate measures table for DAX measures and aggregations. This made the report easier to navigate and maintain as the number of calculations increased.


Designing the Dashboard Around Decisions

When deciding what belonged on the dashboard, I asked myself a simple question:

At a quick glance, what do I want to know when comparing months?

The answer shaped the entire design.


I wanted to see how much we were spending per order and per week, how frequently we were shopping and how each month compared with a stable historical benchmark.


The final dashboard included:

  • Orders year to date

  • Average items per order

  • Average days between orders

  • Average order spend

  • Average weekly spend

  • Rolling 90-day spending trend

  • Year-to-date spending variance

  • Average weekly savings

  • Total year-to-date savings

  • Year-to-date savings rate

  • Monthly spending compared with the previous year’s monthly average


Rather than comparing each month directly with the corresponding month in the previous year, I used the 2025 monthly average as a constant reference line. I was interested in the bigger picture, so a stable benchmark was more useful than a comparison that changed from month to month.


Use the interactive report below to explore the latest household spending, savings and order trends. The figures update whenever I refresh the dashboard with new Tesco data.



Building the Rolling 90-Day Trend

The most challenging calculation was the rolling 90-day spending trend.


I wanted to compare spending during the most recent 90 days with the 90-day period immediately before it. Unlike a fixed quarterly comparison, both windows needed to move forward as the data was refreshed.


This created a more responsive indicator of recent performance. It answered a straightforward question:

Is our grocery spending currently moving up or down?

At the time of analysis, spending during the latest 90-day period was 16.4% lower than during the preceding 90 days.


I was particularly proud of this measure because the downward trend supported what I was seeing elsewhere in the dashboard: our monthly average was also below the previous year’s benchmark.


Validating the Results

I did not want to trust the dashboard simply because the figures looked plausible.


I checked selected totals and individual orders against Tesco’s original order history. I also recreated calculations in Excel and compared the results with my DAX measures.

The Excel checks did not uncover any errors, but they gave me evidence that the dashboard was returning the intended results. This was especially important for the rolling periods and weekly averages, where a believable number is not necessarily a correct one.


Validation turned the report from something that looked right into something I could confidently use.


What the Dashboard Revealed

Three results were especially useful.


Average weekly spending: £131.41

The average weekly spend became the dashboard’s most important KPI.

It gave me a clear baseline and, more importantly, a target to reduce. Instead of vaguely feeling that we were spending too much or doing reasonably well, I now had a figure I could monitor over time.


Average time between orders: 4.2 days

At first, ordering every 4.2 days might appear unusually frequent. However, the surrounding context matters.


Food in the UK often has a shorter shelf life than I was accustomed to in the United States, and we have a relatively small refrigerator. This means meals need to be planned carefully around delivery dates and the order in which fresh ingredients must be used.

The goal is not necessarily to maximise the number of days between orders. Ideally, the refrigerator should be close to empty immediately before the next delivery—not filled with unused food that may go to waste.


The measure therefore became a planning indicator rather than simply a frequency target.


Spending was 6.5% below the 2025 average

This was particularly encouraging against the wider backdrop of rising grocery prices.

It indicated that our household spending habits were moving in the right direction. We were maintaining the quality of what we bought while spending less than the previous year’s monthly benchmark.


The dashboard also showed £784.48 in year-to-date savings and an 18.4% savings rate. These figures represented Tesco offers, coupons and Clubcard discounts. I treated them as supporting information rather than the project’s main measure of success, but they confirmed that we were taking advantage of available savings.


Turning the Findings into Action

The project became valuable when the results started influencing our behaviour.


I began paying closer attention to staples that appeared in regular weekly orders and asking whether they were genuinely needed each time. I also switched selected products to Tesco own-brand alternatives when doing so would reduce the cost without noticeably lowering quality.


These were not dramatic changes. They were small, repeatable decisions guided by evidence.


That is what I wanted the dashboard to accomplish: translate household spending data into practical choices.


The consistently declining 90-day trend, combined with spending below the previous year’s average, suggests those choices are working.


Building a Reusable Tool

This is not intended to be a one-off analysis.


The Power Query transformations, date model and DAX measures have been designed to continue working as new data becomes available. Tesco currently requires a manual data request, so updating the dashboard involves downloading the latest complete JSON export, replacing the existing file and refreshing Power BI.


The KPIs and rolling calculations then update automatically.


In an ideal future version, the dashboard would connect directly to Tesco’s data, refresh on a schedule and update without requiring the export to be requested and replaced manually.


Looking Ahead: Product-Level Analysis

The next phase could extend the analysis from orders to individual products.


The main obstacle is classification. Tesco’s export contains product descriptions but does not provide reliable categories, and product naming is not always consistent.


I would address this using a helper table that maps each original product description to a category and subcategory. For example:

Original product

Category

Subcategory

Monster Energy Ultra

Drinks

Energy Drinks

Brand is less important to this analysis than understanding where the money is going.

Once the products were classified, I could identify:

  • Which categories account for the most spending

  • Which categories are increasing most quickly

  • Where own-brand substitutions could reduce costs

  • Which recurring products may not be needed every week

  • Whether changes in total spending are caused by prices, quantities or product choices


This would move the project from monitoring overall performance to diagnosing what is driving it.


What I Learned

The dashboard confirmed that our grocery spending was already reasonably controlled—but it also gave me a way to make that spending more effective.


Technically, the project reinforced the value of a well-structured data model. A dedicated date table made the time-based calculations more reliable, while a separate measures table kept the model organised and maintainable.


More broadly, it demonstrated that useful analysis does not always begin with a large corporate problem. The same principles apply to household data:

  • Define the question clearly

  • Select the correct population

  • Establish meaningful KPIs

  • Validate the calculations

  • Compare performance against appropriate benchmarks

  • Turn the findings into action


Final Thoughts

This project began with a simple question: was our household keeping pace with rising grocery costs?


Tesco’s order history provided the raw information, but Power Query, DAX and Power BI turned it into something genuinely useful.


The most important result was not any single visual or calculation. It was gaining a reliable way to monitor performance, establish targets and make informed decisions.

Instead of thinking I knew how much we were spending, I now know—and I can do something about it.

bottom of page