User Guide
The controls, then nine techniques worked through on the sample data.
New here? Do the Quick Start first — eight steps, about five minutes.
Opening data
Drag a file onto the page, or click Try it out with sample data.
CSV, TSV, Parquet and .drd all open the same way.
Each file gets its own tab. Nothing is uploaded — the file is read by your browser and the query engine runs in your browser.
Combining sources
Combine sources…, tick two or more tabs, then Combine. You get a new tab holding all of them.
Rows are stacked, not joined. A Source column records which file
each row came from, and a measure absent from one file is null in those rows rather than zero.
A join on shared dimensions is only correct when each file holds exactly one row per dimension combination. When it does not — and a plan at region level against actuals at order level does not — the join multiplies rows and inflates every total, silently. Stacking cannot do that.
The model
Edit model. Inference gets close and then gets things wrong, which is
why every column is editable. Corrections are saved into the .drd, so a file only
needs fixing once.
| column | what it sets |
|---|---|
| Role | dimension, measure, or identifier. An identifier is a number you never add up — an order number summed produces a figure in the trillions. |
| Aggregate | SUM, AVG, MIN, MAX, COUNT. A rate wants AVG; a quantity wants SUM. |
| Format | how the number prints, and for dates how the text is parsed. |
| Level | where the column sits in a hierarchy. Level 2 sits under level 1. |
| Group | which heading the column files under in the sidebar. Booleans are grouped as Switches automatically. |
Two settings sit above the table. Trend date column chooses which date drives the chart, for a file with more than one. Fiscal year starts shifts year and quarter buckets; month, week and day cannot be affected by it.
Where a child belongs to exactly one parent, the relationship is in the data and the tool
finds it — every Sales Rep belongs to one territory. Where a name repeats under
several parents it is not there to find: Metro appears under North, South
and East. That is a ragged hierarchy, and it has to be declared with
the Level column.
Names help too — Category Level 1 / 2 / 3 are picked up from what they are
called.
Measures on screen
The sidebar's measure list controls what appears in the tiles, the breakdown and the trend. Two entries are always there rather than coming from a column:
- Rows — the record count. Turn it on whenever a percentage looks exciting: revenue rising from 236 to 1,835 is a fourfold jump until you see it is 2 orders against 10.
- Edges — first date, last date, days spanned and days active, for each row of the breakdown. This is how you find what started or stopped.
Click a measure to add it; ctrl-click to select only it.
Derived measures
Build one from two others and an operator: SUM (Revenue) - SUM (Budget Revenue).
They compute from the totals, not row by row — a variance is the difference of the sums.
The aggregates are part of the formula rather than inherited, so the measure prints what it
computes and cannot change under you. Switch the operator to / and both operands snap
to SUM: a rate is the ratio of the totals, and a ratio of averages ignores order
size.
Build something incoherent anyway and you get a warning, inline, at the point of choice. It never blocks you.
A - B reads against zero: negative is behind. A / B reads against
100%: below one is behind. All-positive values from a ratio do not mean everything is ahead.
Pivot a measure across a dimension
One measure per value of a dimension — Revenue across
Customer Segment — up to 20 values. They behave like any other measure: bands on the
trend, columns in the breakdown (a genuine cross-tab), a tile each.
This is how you get several bands on one chart. The trend draws one series per selected measure, never one per value of a dimension, so a dimension has to become measures first.
The slices replace their source in the selection, because the parts and the whole stacked together count everything twice.
Exploring
Break down by picks the dimension in the table.
| action | what it does |
|---|---|
| click a row | filters to that value and moves the breakdown down a level |
| drag across rows | selects several at once |
| breadcrumb | click any level to return to it, clearing its filter and everything beneath |
| chips along the top | every filter in force. Click one to remove it |
| ctrl-click in the sidebar | select only that value — the fastest way to walk a dimension while watching the trend |
| Clear filters | back to everything |
| Copy | the breakdown table to the clipboard |
Column headers sort. The bar behind each row measures whatever the table is currently ranked by, so sorting changes what the bars mean.
The trend
Time window
The strip under the chart is the whole period, with your window cut out of it. Drag the handles to resize, drag the middle to slide. ◀ and ▶ step by one window; All dates returns to everything.
You can also drag across the chart itself to window onto what you dragged.
Grain sets the bucket: day, week, month, quarter or year.
Chart form
| form | what it's for |
|---|---|
| line | trajectory and level — where a series went, how series compare |
| bars | one period against the next, as discrete quantities |
| stacked | the total, and what makes it up |
| 100% | the mix, with the total deliberately removed |
The last is not decoration: composition shifting while the whole grows or shrinks is invisible in the other three.
Scale
How the vertical axis is shared out, which is a separate decision from the chart form.
- one scale — honest about magnitude, useless when magnitudes differ.
- own scales — each series scaled to its own range. Two at most, and crossings between two independently scaled lines mean nothing.
- indexed to 100 — every series rebased to its first visible point. Answers "how do the shapes compare" for any number of series, and its crossings are real. Values are no longer in the measure's own units.
Comparison periods
vs previous period or vs same period last year. Each selected
measure gains Prior, Change and % Change columns in the
breakdown, sortable like any other, and the prior period draws behind the current one on the
trend.
Needs a date window — with no window selected, the current period is everything and there is no period before it. Stacked and 100% carry warnings while comparing: one would add a period to its own prior, the other divide a period by itself plus its prior.
Saving and sharing
Save view captures where you are: filters, date window, grain, breakdown, sort, measures on screen, chart form, scale and comparison.
Pin nominates the view a .drd opens on. That is a choice
about what you are handing over — sometimes the point of a file is the finding, sometimes it is the
data with the filters left clean.
Report (PDF)
Generate report (PDF) prints the filters in force, the totals, the trend, and a breakdown for every level of the drill path — not just the level on screen. It goes straight to the print dialogue, and back to the dashboard afterwards.
The .drd file
Save compiled data (.drd) writes your model, derived measures, saved views and the data into one file. It is columnar and compressed: smaller than the source CSVs and dramatically faster to open — five million rows in about a second against roughly forty-two for raw CSV.
Drag it back onto the page and it opens on the pinned view. Hand it to someone else and they arrive where you left off, which is the difference between sending a finding and sending a haystack.
Techniques
Nine techniques, each worked through on the sample data. They are independent — read one, or all nine.
Each assumes the combined tab from the Quick Start: actuals and
budget together, with Actual vs Budget derived.
1. Combining turns an absence into a number
Territory = Lakeside
· break down by Channel ·
measures Revenue, Budget Revenue, Actual vs Budget.
Lakeside does no wholesale business at all, against a plan of nearly 1.2 million. It is the only channel-and-territory combination in the entire file that exists in budget and not in actuals.
In the actuals alone this is a row that isn't there — the hardest kind of thing to notice, because nothing draws your eye to a blank. Put the plan beside it and the same fact becomes the largest negative variance on the screen.
2. Uniform across every sub-dimension means policy
Discount Rate (it should be
AVG; fix it in the model if not) · break down by
Region, then drill into East.
Now check whether it is uniform inside Valley: break down by category, by channel, by customer segment, by sales rep. It is ~35% in every one. Switch the trend to month grain — it is flat across all eighteen, never below 34.2% or above 35.6%.
Valley discounts at roughly 35% against about 9.5% everywhere else, uniformly and without variation over time.
If one rep or one product line were responsible, the average would be dragged by them and the rest of Valley would look normal. It isn't, so this is a rule someone set — a report that produces a phone call, not a coaching conversation.
3. Plan is what separates a season from a step change
Category Level 3 =
Hoses · measures Revenue,
Budget Revenue · trend at month grain.
Through 2024 hoses oscillate around plan, which is what a seasonal product does. At the start of 2025 the line steps down and never recovers, while budget climbs into spring on the seasonal assumption. It is company-wide — every territory sits between 15% and 37% of plan in the first half of 2025.
Actuals alone show a decline that could be winter. The budget expected the opposite, and that divergence is the signal. And check the scope before you attribute it: found inside a territory filter, this looks like a local problem. It isn't.
4. Rows beside a measure turns a total into a distribution
Sales Rep
· measures Revenue and Rows
· sort by Revenue.
Abbott, Payton leads at about 1.7 million, more than double anyone else. Now look
at Rows, and filter to Basin to compare like with like:
A quarter the order count, ten times the order size. Not one big deal — every order is large. Zero of their 397 orders fall below the other reps' median.
A tempting explanation is a data-entry error — someone adding a digit. That theory dies on the count: a fat finger is sporadic, and there is no normal part of this book.
5. Pivot to make a cross-tab
Revenue across Channel
· break down by Customer Segment.
Public Sector — the largest segment at 37.8% of all revenue — buys through wholesale exclusively.
Pivoting one measure across a dimension gives you one measure per value, so a breakdown by anything else becomes a matrix. Three rows that look alike and one that doesn't is a pattern you can see in a second and would never find by drilling into segments one at a time.
Bonus: this also explains technique 1 from the other side. Lakeside has no wholesale, and Public Sector only buys wholesale — so Lakeside has no Public Sector either. Two findings, one intersection.
6. Ctrl-click to walk a dimension one value at a time
Units ·
break down by Territory · ctrl-click each territory in the
sidebar in turn, watching the trend redraw.
Overall the trend is flat and uniform. Highland alone starts low in early 2024 and climbs steadily through to the end of the data.
Highland is growing against a background that isn't.
Comparing eighteen-month shapes across nine territories is not something a single chart does well. Soloing each in turn and watching the same axes redraw makes an odd one obvious.
7. “Exclusively” and “mostly” are different findings
Sales Rep
· sort by Revenue ascending to find the small books
· filter to Naylor, Indigo ·
break down by Category Level 3.
Indigo Naylor sells power tools. Only power tools — not mostly, exclusively.
Every top seller has a category they lead in; that is ordinary. A rep with exactly one line is not. Check the whole breakdown, not just the top row.
Be careful with the story you attach: their revenue peaks in March and April, which looks like spring tool demand — but total company revenue peaks in March and April too. On a book of a few thousand a month, that is the season showing through, not evidence about them.
8. Rule out axes with 100%, then locate on the one that's left
Category Level 3 =
Cookware · trend at month grain.
March 2025 roughly doubles: 237,605 against about 120,000 either side. Now find which dimension
it belongs to. Break down by Customer Segment and switch the chart to
100% — the mix does not move. Break down by Channel — all
three channels roughly double together. Break down by Sales Rep and drag
across the top four rows to select them all at once.
Those four reps are all in one territory: Foothills.
A single enormous month in cookware, in one territory, spread evenly across every channel and segment within it.
A spike that is mix-neutral across a dimension did not come from that dimension. Working through segment and channel that way costs two clicks each and eliminates them properly, rather than leaving you suspecting them.
9. Sort instead of scroll
Sales Rep
· tick Edges in the measures panel
· click the Last header to sort ascending.
One rep in the file stops mid-period and never comes back. Nobody joins.
"Who left?" is not an aggregate question and no measure answers it. With four hundred reps you
cannot eyeball it, and filtering to each in turn is hopeless. First and last dates turn it into a
sort, and Rows beside them separates someone who left from someone who was always
too small to notice.
Two mistakes worth making once
Both of these cost real time while the techniques above were being worked out. Neither is a bug — in both cases the chart was correct and the conclusion it invited was false.
The month that looks like a slump
Break down Units by month and February dips, in both years, in every region and
category.
It is the calendar. February has 28 days against 31. Units per day is flat straight through, and the 2024 dip is shallower than 2025's only because 2024 was a leap year.
The tell was there in the observation itself: "consistent across every region and category". A real February effect would be concentrated somewhere. A pattern that appears uniformly in every slice usually belongs to the axis, not the data.
The filter you forgot was on
Halfway through technique 8, a filter from an earlier search was still applied. Cookware
looked like it had no wholesale spike and an online one instead — because the filter was
Territory = Lakeside, which has no wholesale at all, and the remaining online figures
were 2 to 10 orders a month.
The chips along the top of the screen were saying Territory: Lakeside the whole
time.
Two habits worth building:
- Read the chips before you conclude anything. They are the sentence your numbers are the answer to.
- Turn
Rowson when a pattern looks dramatic. Revenue rising from 236 to 1,835 sounds like a fourfold jump. The count beside it — 2 orders to 10 — says it is noise.
Where next
Open your own file. The techniques transfer directly:
- Combine an actuals extract with a plan or a prior period, and absences become numbers.
- Pivot a measure across a small dimension to get cross-tabs.
- Turn on
Edgeswhen you want to know what started or stopped. - Watch
Rowswhenever a percentage looks exciting.
And when you find something, save the view, pin it, and send the .drd. The person
who opens it lands exactly where you were standing.
Back to the app in the tab you came from — or open DashReporter here. · back to Quick Start