· 4 min read
How to Add a Calculated Column to a CSV
Heshan Fernando
Co-founder & COO
An export has price and quantity and the person who needs it wants total. Twelve hundred rows, one multiplication, and the temptation is to open a spreadsheet, add a formula, fill down and export.
That works. It also silently converts your leading zeros, reformats your dates, and treats eighteen blank quantities as zero — and you find out about the last one when someone asks why a customer’s total is 0.00.
What the blanks do is a decision
Every computed column meets rows where the inputs aren’t clean, and there are three reasonable responses:
Treat blanks as zero. Fast, and produces a number that looks like a real result. A missing quantity becomes a genuine-looking zero total, indistinguishable from a real zero. Fine for a rough aggregate, dangerous for anything financial.
Leave the result blank. Honest. Downstream consumers see nothing rather than something wrong, and a blank in a total column prompts a question.
Flag the row. Best when it matters. The output records that this row’s inputs were incomplete, so nobody has to infer it from a suspicious zero.
The point isn’t which one is right — it’s that a spreadsheet picks one silently and never tells you. Making it a decision is most of the value.
The other silent problem: text that looks numeric
A value of 1,250.00 or £45.00 or 12 is text, not a number. Arithmetic on it either fails or produces something unexpected, depending on the tool.
This is extremely common in exported data, because whatever generated the CSV formatted the numbers for humans. Strip separators, currency symbols and whitespace before computing, or the arithmetic quietly produces nothing useful for a subset of rows.
| Input problem | Symptom | Fix |
|---|---|---|
| Blank quantity | Total of 0.00 looks real | Flag the row |
1,250.00 as text | Result is blank or wrong | Strip separators first |
| Trailing space | Comparison and parse fail | Trim before computing |
| Text in a numeric column | One row breaks the pass | Flag rather than skip |
Chained columns
Computing a second column from a first — margin from total, say — works, but do it in sequence rather than in one expression. Chained references inside a single pass are hard to debug when one of them produces an unexpected result, and running them one at a time means you can check the intermediate column.
Common mistakes to avoid
- Letting blanks become zeros in a financial calculation.
- Computing on a column that contains formatted numbers without stripping the formatting.
- Opening the CSV in a spreadsheet to add the column, which reformats dates and strips leading zeros from anything that looks like a number.
- Adding the column at the start when a downstream import expects a fixed column order.
- Not checking the row count of flagged rows — if it’s a quarter of the file, the problem is upstream.
How to do it with CSV Computed Column
The CSV Computed Column tool adds the column in the browser, leaving everything else untouched.
- Paste or load the CSV with its header row.
- Write the expression using the column names exactly as the header spells them.
- Choose what blanks should do — the choice matters more than the expression.
- Check how many rows were flagged before using the output.
Other CSV tools that keep data local are in the tools directory.
Frequently asked questions
What happens to blank or non-numeric values?
Whatever you choose, and the choice matters. Treating blanks as zero makes a missing quantity look like a genuine zero total, which is why flagging is safer for anything financial.
Are numbers stored as text handled?
Values with thousands separators or currency symbols are text, not numbers. Strip them first, or the arithmetic silently produces nothing useful.
Can the expression reference other computed columns?
Add them in sequence — compute the first, then use its output as input to the next. Chained references in a single pass are hard to debug.
Final thought
Decide what a blank means before you run the calculation. Every silent zero in a total column started as a decision nobody made.