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 ID | Q1 2026 header | Q2 2026 header | Q3 2026 header | Comparable? |
|---|---|---|---|---|
| SAT_OVERALL | Overall satisfaction (1-5) | Overall satisfaction (1-5) | Overall satisfaction (1-5) | Yes |
| SAT_SUPPORT | Satisfied with support? | Satisfied with our support team? | Satisfied with our support team? | Yes, minor rewording |
| NPS | How likely to recommend (0-10) | How likely to recommend (0-10) | How likely to recommend (0-10) | Yes |
| SAT_PRICE | Value 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
- Load each wave's export (Power Query, one query per wave, or From Folder if layouts are similar).
- 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.
- Add a Wave column (2026-Q1, 2026-Q2…) and keep the respondent ID and completion date.
- Append all waves. Columns are matched by name, so SAT_PRICE is simply blank for Q1 and Q2.
- 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
| Wave | Responses | Avg SAT_OVERALL | Promoters | Detractors | NPS |
|---|---|---|---|---|---|
| 2026-Q1 | 400 | 3.9 | 168 | 72 | 24 |
| 2026-Q2 | 350 | 4 | 161 | 56 | 30 |
| 2026-Q3 | 500 | 3.8 | 190 | 110 | 16 |
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.