DashReporter· User Guide Open the app

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.

Why stacking and not joining

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.

columnwhat it sets
Roledimension, measure, or identifier. An identifier is a number you never add up — an order number summed produces a figure in the trillions.
AggregateSUM, AVG, MIN, MAX, COUNT. A rate wants AVG; a quantity wants SUM.
Formathow the number prints, and for dates how the text is parsed.
Levelwhere the column sits in a hierarchy. Level 2 sits under level 1.
Groupwhich 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.

Hierarchies it can and cannot infer

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:

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.

Ratio and difference read against different baselines

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.

actionwhat it does
click a rowfilters to that value and moves the breakdown down a level
drag across rowsselects several at once
breadcrumbclick any level to return to it, clearing its filter and everything beneath
chips along the topevery filter in force. Click one to remove it
ctrl-click in the sidebarselect only that value — the fastest way to walk a dimension while watching the trend
Clear filtersback to everything
Copythe 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

formwhat it's for
linetrajectory and level — where a series went, how series compare
barsone period against the next, as discrete quantities
stackedthe 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.

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

Setup combined tab · filter Territory = Lakeside · break down by Channel · measures Revenue, Budget Revenue, Actual vs Budget.
Online actual 207,113 budget 316,137 variance -109,024 Retail actual 651,228 budget 352,205 variance 299,022 Wholesale actual 0 budget 1,182,956 variance -1,182,956
What you see

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.

Why it works

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

Setup clear filters · measure Discount Rate (it should be AVG; fix it in the model if not) · break down by Region, then drill into East.
Region: South 9.5% North 7.8% West 9.5% East 18.0% East: Metro 9.5% Harbour 9.4% Valley 35.0%

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%.

What you see

Valley discounts at roughly 35% against about 9.5% everywhere else, uniformly and without variation over time.

Why it works

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

Setup clear filters · filter Category Level 3 = Hoses · measures Revenue, Budget Revenue · trend at month grain.
2024 82% 152% 104% 84% 88% 81% 104% 114% 96% 71% 99% 128% (of budget) 2025 40% 28% 22% 30% 15% 13%
What you see

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.

Why it works

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

Setup clear filters · break down by 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:

orders min median mean max Abbott, Payton 397 540.85 3,263.44 4,312.47 15,109.34 Pike, Jordan 1,507 51.00 288.31 394.18 1,419.48 Ives, Frankie 1,474 38.31 287.86 387.40 1,422.97
What you see

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.

Why it works

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

Setup clear filters · Edit modelPivot a measure across a dimensionRevenue across Channel · break down by Customer Segment.
Consumer Online 17.8% Retail 22.3% Wholesale 59.9% Contract Online 17.5% Retail 23.1% Wholesale 59.4% Trade Online 17.7% Retail 22.5% Wholesale 59.8% Public Sector Online 0.0% Retail 0.0% Wholesale 100.0%
What you see

Public Sector — the largest segment at 37.8% of all revenue — buys through wholesale exclusively.

Why it works

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

Setup clear filters · measure 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.

What you see

Highland is growing against a background that isn't.

Why it works

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

Setup clear filters · break down by Sales Rep · sort by Revenue ascending to find the small books · filter to Naylor, Indigo · break down by Category Level 3.
What you see

Indigo Naylor sells power tools. Only power tools — not mostly, exclusively.

Why it works

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

Setup clear filters · filter 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.

What you see

A single enormous month in cookware, in one territory, spread evenly across every channel and segment within it.

Why it works

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

Setup clear filters · break down by Sales Rep · tick Edges in the measures panel · click the Last header to sort ascending.
Ellery, Gray first 2024-01-02 last 2024-08-31 526 rows
What you see

One rep in the file stops mid-period and never comes back. Nobody joins.

Why it works

"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:

Where next

Open your own file. The techniques transfer directly:

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