Issue #21 · September 18, 2026

Two Surfaces Now Answer Every Question Fluently. Somebody Still Has To Say Which One Is Right.

The authority did not port.

The Four Skills, part 2 of 4 | Decisions

A series on the four skills that matter most for analysts now that frontier models and open-source tooling do the tool-native half of the job. Part 1 showed the warehouses ingesting every measure with equal weight, blind to which three the room decides on. This one is about the morning the ingested copy and the original disagree, and whose job that is. Attention, decisions, vision, systems.

The troubleshooting row already exists.

Snowflake’s developer guide for turning a Power BI model into a semantic view has a section for when things go wrong. One entry is titled “Metrics don’t match Power BI.” Under it, a list of places to look: default report and page filters, slicers, how blanks are handled, rounding, implicit date windows. The vendor wrote the row before you filed the ticket.

The support table says the same thing in a flatter voice. Ingestion reads the data model. It does not read the report layout, so report-level measures stay behind. Time intelligence needs a date context that only exists inside a report, so PREVIOUSMONTH, SAMEPERIODLASTYEAR, and TOTALYTD stay behind too. Databricks is blunter. The first best practice in its Genie Code import docs is to hand the agent a screenshot of the original dashboard every time, so it can check its numbers against the picture. The second is to expect to push back on the agent.

Two vendors. Both documented the disagreement before you had one.

The smallest version fits in one function. SQL’s COUNT(DISTINCT) skips nulls. DAX’s DISTINCTCOUNT counts blank as a value. Point both at a customer column with one empty row and the two surfaces disagree by exactly one. Same column. Same morning. The contributors building a Power BI converter for Apache Ossie hit this in review and wrote it into the commit history.

Neither number is a bug. Each is correct in its own language. So a better query will not fix it.

For twenty years a disagreement about a number had a default resolution. The tool was the truth. Whoever owned the Power BI model owned the number, and when finance pushed back the argument ended at the measure definition. That person did not have to volunteer. The tool made them the owner.

The authority did not port.

The warehouse does have an owner field, and it is worth reading what it means. In Unity Catalog the principal that creates an object becomes its owner. In Snowflake it is the role. So the recorded owner of net new ARR on the second surface is whoever pressed upload, or a service account. That field answers who can grant access and who can drop the view. It does not answer who takes the call.

The neutral referee is not coming this quarter either. Apache Ossie, the open standard meant to carry definitions between tools, still has no merged Power BI converter. It has an open pull request for one: opened August 16, fifty commits, changes requested on September 10. It has a second open pull request, two days older, about what to call the vendor. Two names are in flight, MICROSOFT and POWER_BI, and the author notes that five lists of vendor names in the repository already disagreed with each other. The proposed fix is not a smarter parser. It is one list declared canonical, by a person, in writing.

Even the standard for settling definitions is settling its own the old way.

A parity check surfaces every place the two copies differ. It settles none of them. It can tell you two numbers disagree. It cannot tell you which one goes in the board deck on Thursday. That takes a person who will do three things nobody enjoys. Put their name next to a definition. Say it out loud in a room where finance is present. Take the call when finance disagrees, and either hold the line or change the definition and say why.

That person used to be whoever owned the tool. Now it is whoever owns the sentence. “Net new ARR is bookings from new logos, net of churn in the same period, at contract currency, on the fiscal calendar.” Whoever can say that, defend it, and sign it is the owner. Whoever cannot is running a report.

Sometimes the right name belongs to someone in finance. Fine. That is a finding, not a loss. An owner in another department who knows they own it beats an owner in yours who does not.

An agent does not check with anyone first. It answers from the definition it can see. The cost of an unowned definition used to be a confusing email thread. Now it is a confident wrong answer, in complete sentences, delivered to someone who did not know to ask.

The action. One, and it fits in a Friday afternoon.

Open the file from Part 1. Twenty metrics, each with the decision it feeds and the person who makes it. Add a third thing to every entry: who defines it. “Net new ARR. Feeds the Monday hiring call. Decided by the VP Sales. Defined by ___.” A name, not a team. Part 1 asked who decides with the number. This asks who decides what the number is. They are often not the same person.

Start with the ten from Signal #16, the ones that now have a second copy. Those are the ones that can disagree.

Then the part that takes nerve. For every name that is not yours, ask that person whether they know. Not whether they built it. Whether they would take the call.

Some will say yes. Some will say they thought it was you.

The parity table will be green most weeks. The owner column will not be.


Sources

Crafting runs weekly. The job is to be useful, not to sell. If a line in here is close to a move you're working on, the email reaches a person.

Hiring rather than hunting? Signal is the column for your side of the desk.

Email meRead more Crafting

← All Crafting issues · Drafted with Claude · Edited by Paul Brown