Analistable

How to combine quarterly survey waves into one spreadsheet

By the Analistable team · Updated · 5 min read

Build a question map that gives every question a stable ID across waves, rename each wave's columns to those IDs, add a Wave column, then append the exports. Questions missing from a wave stay blank rather than shifting. Trends then come from a pivot of average score or percentage by question and wave, reported on the same base each time.

Part of our guide: How to answer questions across multiple spreadsheets

Why survey waves don't stack cleanly

Each quarter's export from a survey tool uses the question text as the column header. Reword one question ("How satisfied are you with support?" becomes "How satisfied are you with our support team?") and the next wave has a different column. Add a question and every later column moves along. Paste the waves under each other and answers end up under the wrong question.

The cure is to stop relying on header text. Give every question an ID that stays fixed across waves, and append by ID. This is the same "append by name, not position" principle covered in combining Excel files with different columns, applied to a survey.

Step 1: build a question map

Question map across three waves
Question IDQ1 2026 headerQ2 2026 headerQ3 2026 headerComparable?
SAT_OVERALLOverall satisfaction (1-5)Overall satisfaction (1-5)Overall satisfaction (1-5)Yes
SAT_SUPPORTSatisfied with support?Satisfied with our support team?Satisfied with our support team?Yes, minor rewording
NPSHow likely to recommend (0-10)How likely to recommend (0-10)How likely to recommend (0-10)Yes
SAT_PRICEValue for money (1-5)New in Q3

Decide deliberately whether a reworded question is comparable. A small wording change is usually fine; a change of scale (1–5 to 0–10) or meaning is not, and should get a new ID. Note the judgement in the map so readers of the trend know.

Step 2: rename, label and append

  1. Load each wave's export (Power Query, one query per wave, or From Folder if layouts are similar).
  2. Rename columns from header text to question IDs using the map. In Power Query, Table.RenameColumns with a list built from the map does every column in one step.
  3. Add a Wave column (2026-Q1, 2026-Q2…) and keep the respondent ID and completion date.
  4. Append all waves. Columns are matched by name, so SAT_PRICE is simply blank for Q1 and Q2.
  5. Recode text answers to numbers if the tool exported labels ("Very satisfied" = 5).

Keep scales consistent. If one wave exported "5 - Very satisfied" and another just "5", strip to the number before appending, or averages will silently ignore the text values.

Worked example: trend by wave

Combined responses, summarised by wave
WaveResponsesAvg SAT_OVERALLPromotersDetractorsNPS
2026-Q14003.91687224
2026-Q235041615630
2026-Q35003.819011016

NPS is the percentage of promoters (9–10) minus the percentage of detractors (0–6): in Q1, 168/400 = 42% minus 72/400 = 18% gives 24. Q2 rises to 30 (46% − 16%), then Q3 drops to 16 (38% − 22%). Before reading the Q3 drop as real, check whether the sample changed — the jump from 350 to 500 responses may mean a new channel or customer segment was surveyed for the first time.

SELECT wave,
  COUNT(*) AS responses,
  ROUND(AVG(sat_overall), 1) AS avg_sat,
  ROUND(100.0 * (COUNT(*) FILTER (WHERE nps >= 9)
               - COUNT(*) FILTER (WHERE nps <= 6)) / COUNT(*)) AS nps
FROM responses
GROUP BY wave
ORDER BY wave;

Comparing like with like

  • Same base: report each wave on respondents who answered that question, and show the count. A trend line without counts hides small waves.
  • Repeat respondents: if the same customers answer each quarter, a respondent ID lets you track individual change, which is far more telling than averages. Joining responses to your customer list is covered in matching survey responses to a customer list.
  • Segments: add customer fields (plan, region, tenure) to the combined table and pivot by segment and wave. A falling average is often one segment changing while others stay flat.
  • New questions: start their trend at the wave they were introduced; don't treat earlier blanks as zeros.

Asking across waves in plain English

Analistable can load each wave's export side by side and answer "average overall satisfaction by wave" or "NPS by plan for the last three quarters". It writes the SQL, which you can check, and runs it in your browser; responses are not uploaded to a server, which matters when free-text answers contain personal details. It doesn't rename or rewrite your exports, so the question map still matters when headers change between waves. More examples of questions across files are in the guide to answering questions across spreadsheets.

Keeping free text and personal data under control

Survey exports often carry more than scores: names, emails, IP addresses, and free-text comments in which people mention colleagues or their own circumstances. When you combine waves you multiply that data, so decide early what the combined table needs.

  • Keep a respondent ID for joining and drop names and emails unless you need them for follow-up.
  • Hold free-text comments in a separate table keyed by respondent ID and wave, so the scores table can be shared more widely.
  • Code comments into themes (price, support, product quality) in a column per wave, so themes can be trended alongside scores.
  • Record the survey's fieldwork dates per wave; a wave that ran over a holiday or a service outage may need a footnote rather than a conclusion.

Frequently asked questions

How do I combine survey waves when questions changed?
Give each question a stable ID, map every wave's header text to it, and append by ID. Questions missing from a wave stay blank, and reworded but comparable questions line up under the same ID.
Should I average a question whose scale changed?
No. A 1–5 scale and a 0–10 scale aren't directly comparable. Give the new version its own ID and start a new trend, or rescale only if you clearly state the method.
Why did my averages change after combining waves?
Usually because some waves exported labels ("Agree") or prefixed numbers ("4 - Agree") that the average skips as text. Convert every answer to a plain number before appending.
Can I combine waves from different survey tools?
Yes, as long as the question map covers both tools' headers and answers are recoded to the same numeric scale. Check how each tool exports multi-select questions, as one may use one column per option and the other a single delimited cell.

Related guides