Daniel M. Jin Email

Direction 5 min read

Write the sentence before the chart

A dashboard earns its place by stating a verdict, a threshold and the evidence; here is the method, worked on 21,940 bachelor's programs.

Most dashboards show what happened. Few say what to do next.

The fix is not another chart. It is one sentence, written before anyone opens Tableau or Power BI.

The mirror problem

A wall of KPI tiles hands the hardest step to the reader. Revenue, margin and volume sit side by side, and the leader does the synthesis alone.

If a viewer must do arithmetic to judge a number, the dashboard has not done its job. Good BI states a verdict, then shows the evidence.

Three clauses, in order

An insight sentence has three parts. Each one does a different job.

ClauseJobWorked example
ObservationA measured fact, with its base8.8% of 21,940 bachelor's programs leave borrowers with median debt above median first-year pay
ComparisonThe fact against the usual beliefField of study explains somewhat more of that spread than the choice of school
DecisionWhat to do with itSo check the program's own ratio: 77.7% of bachelor's programs sit below 0.8x

The example uses the US Department of Education's College Scorecard field-of-study file, released 10 June 20261. Every figure here comes from an audited rebuild of that file2.

If you cannot write the sentence, no layout will save the dashboard. If you can, the layout nearly designs itself.

Thresholds turn a scatter into decisions

A scatter of 39,504 programs, debt against pay, impresses everyone and decides nothing2. Cut it into zones with stated rules, and every dot gets a verdict.

The ratio is median debt over median first-year earnings. The payment share uses the Scorecard's own ten-year rates: 4.99% for undergraduate loans and 7.54% for graduate loans3.

ZoneDebt-to-earningsUndergraduate payment, share of gross payBachelor's programs
Debt-safeBelow 0.8xUnder about 10%77.7%
Manageable0.8x to 1.2xAbout 10% to 15%18.6%
Stretched1.2x to 1.6xAbout 15% to 20%3.0%
High-riskAbove 1.6xOver about 20%0.7%

At 4.99% over ten years, a 0.8x ratio costs about 10.2% of gross pay3. The cut points are choices, not findings. Publish them beside the chart, so the board argues with the rule instead of the data.

The time window changes the verdict too. Measured on four-year earnings, only 0.75% of bachelor's programs carry debt above pay4. Graduate degrees look worse on first-year pay: debt exceeds pay in 78.9% of first-professional and 49.2% of doctoral programs5.

Same file, different windows, different stories. Put the window and the level in the sentence.

Decide the rule before you see the number

The comparison clause hides a hard call. Does field of study matter more than the school?

The rule was written before the math: claim "more" only if field explains more than 1.5 times the variation school does. Field scored an adjusted R² of 0.492, school 0.335, a ratio of 1.476. By the rule, that is "comparable".

A later check resampled schools: 95% of draws fell between 1.35 and 1.63, and 42% cleared 1.56. So the college page says "somewhat more" and prints no multiplier.

The same discipline runs through this portfolio. An audit of the old site's pages checked 149 claims; 11 held, and the rest were rebuilt or removed2. A leader should expect that kind of checking from any BI team, including their own.

The awkward data is the real job

Clean demo datasets teach little about enterprise work. Federal files do.

  • Most debt cells are suppressed. Of 227,980 rows, 164,662 hide the median debt7.
  • Fields vanish by level. The all-school debt field is empty for graduate degrees, so graduate rows use debt borrowed at that school2.
  • Rows repeat. Branch campuses copy their main campus values, so the build keeps one row per school and program, with 0 conflicts across 217,369 programs2.
  • Coverage depends on the unit. The 21,940 bachelor's programs with both figures are a third of 68,319, yet they hold 81.7% of bachelor's degrees awarded2.

That last line is the one a CFO should ask for. "We cover a third of the programs" and "we cover four in five bachelor's degrees awarded" are both true.

What this means for your BI team

  • Open every executive dashboard with one sentence: observation, comparison, decision.
  • Publish thresholds and their reasons next to the chart.
  • Name the time window and the denominator inside the sentence.
  • For any headline that moves money, write the decision rule before running the numbers.
  • Report coverage two ways: share of rows, and share of what matters, such as people or revenue.
  • In a Tableau-to-Power BI migration, carry the sentence across, not only the visuals: the new report is not done until it states that sentence from the same numbers.

Rewritten 2026-10-17 from a 2026-09-04 dossier; figures from the 2026-09-24 audit.

Notes

  1. US Department of Education, College Scorecard, Most-Recent-Cohorts-Field-of-Study_06102026.zip; cohort completing in 2018-19 and 2019-20, earnings in 2022 dollars. Hash in tableau/tableau-sources/manifest.json. ↩︎
  2. tableau/real-data-audit.md: verdict, claims 23 to 28, and "What else the real data showed"; data in tableau/tableau-sources/out/college_scorecard_cip.json. Page-claim counts from tableau/tableau-sources/out/before_after.md; the audit verdict's 150 and 12 add one record no page stated. ↩︎
  3. Scorecard field-of-study documentation, page 5, as recorded in college_scorecard_cip.json (metadata.payment_rates_pct) and the audit's zone rows. ↩︎
  4. college_scorecard_cip.json, robustness.four_year_earnings, bachelor's programs. ↩︎
  5. college_scorecard_cip.json, shares_by_credential; graduate rows use debt borrowed at that school. ↩︎
  6. college_scorecard_cip.json, field_vs_institution; cluster bootstrap of 400 draws in tableau/tableau-sources/out/robustness.json; audit claims 25 and 26. The pre-registered verdict was "comparable"; the bootstrap was added after review, not pre-registered. Rule: plans/2026-09-24_portfolio-real-data.md, fixed before computing. ↩︎
  7. college_scorecard_cip.json, metadata.rows_in_file and metadata.suppressed_cells. ↩︎