Browse documentation

Measurement framework

Make reporting useful by defining what each measure can and cannot tell you.

On this page

Begin with the decision

A useful KPI supports a decision with an accountable owner. Define the question before the visualization. Separate operational measures such as handoff time from commercial measures such as qualified pipeline and realized revenue.

Specify the metric contract

Document the grain, included records, filters, currency, timezone and time window. Make the distinction between a created date, a stage transition date and a closed date explicit. Define how changes to historical source records affect reporting.

Keep attribution claims proportionate

Attribution allocates credit under a model. It does not by itself establish causality or incremental impact. State the model, available touchpoints and identity limits alongside the report. Offline activity and incomplete tracking can change interpretation.

Reconcile source and model

Track freshness, excluded records and unresolved identifiers. Compare source totals to modeled totals on a representative sample and document legitimate differences. Give report users enough information to understand when a figure is provisional.

Establish a review cadence

Combine dashboard review with operational context. A conversion change may reflect seasonality, campaign mix or a definition change. Record decisions and follow up on the chosen action, rather than adding metrics without changing behavior.

Test the grain before writing a measure

Joining opportunity records to many campaign touches can multiply the opportunity value. Establish the grain of each table before introducing a measure and test its uniqueness. The example query checks an opportunity_current model designed to hold one row per opportunity. Any returned row indicates that the expected grain has been violated and requires investigation before revenue is summed.

SQL check for an opportunity modelsql
SELECT
  opportunity_id,
  COUNT(*) AS row_count
FROM opportunity_current
GROUP BY opportunity_id
HAVING COUNT(*) > 1;

Choose the date role that answers the question

Created date, stage transition date and close date describe different events. A report comparing them without explicit labels can produce apparently conflicting results from correct data. Define the period, timezone, currency and historical change policy in the metric contract. Power BI modeling guidance distinguishes fact observations from the dimensions used to filter and group them.

QuestionRelevant grainDate role
How much pipeline was created?Opportunity at creationCreated date
How did opportunities progress?Stage transition eventTransition date
What business closed?Closed opportunity under the agreed ruleClose date
What was the pipeline at period end?Opportunity snapshotSnapshot date

Publish confidence and reconciliation context

Show the last successful source update, unresolved identity count and material exclusions with the report. Keep the expected source totals and reconciliation results as inspectable evidence. If a refresh fails, retain the previous data with a clear timestamp rather than presenting it as current. When an attribution model is used, state its coverage and assumptions so allocated credit is not mistaken for causal impact.

Standards and documentation

Explore the protocol specifications and platform guidance for this topic.

Bring the contract into your operating environment.

Discuss an implementation

Image preview