In short, for management

Of the 7 figures that Copilot or an AI agent can quote from this model, 1 has been validated by the business, and 3 have no written definition: an AI quoting them guesses what they measure.

We corrected 5 settings without touching any calculation.

8 subjects remain to decide with your data team.

Next step: have management reread and sign the definition of its key figures, starting with “Gross Margin”, “Margin %”, “Turnover”.

Summary

Verdict Not ready for AI → Not ready for AI Score 77 → 79/100 after the safe fixes · 5 safe fixes applied · 11 findings need your decision

Where to start

  1. Visible measure without a description 3 objects concerned
  2. Stale validation 2 objects concerned
  3. Description that says nothing 1 object concerned

What we fixed

Safe fixes, written in the fixed copy of your model. They touch no calculation, only how an AI reads the model: check your report pages once the copy replaces the original.

5 safe fixes applied

FC-LIS-05 Visible technical column · hidden (isHidden) · 2
  • The column “Product ID” (table Sales)
  • The column “Customer ID” (table Sales)
FC-IA-01 Implicit measures allowed · implicit measures discouraged (discourageImplicitMeasures) · 3
  • The model
  • The column “List Price” (table Product)
  • The column “Product ID” (table Sales)

The before/after comparison of your report pages is not attached to this dossier.

What needs your decision

What is left in the fixed copy, rule by rule, the most serious first, with the fix we propose. Nothing is applied without your validation.

FC-LIS-01

Visible measure without a description

blocking 3 objects concerned

For example: The measure “Turnover” (table Sales) is visible without a description: an AI will have to guess what it computes.

to validate

Add a /// description above the measure: what it computes, in which unit, under which rule.

3 objects concerned
  • The measure “Turnover” (table Sales)
  • The measure “KPI_Basket_02” (table Sales)
  • The measure “Order Count” (table Sales)
FC-IA-03

Stale validation

blocking 2 objects concerned

For example: The measure “Gross Margin” (table Sales) was validated on 5 October 2026 by Finance department, but it has changed since: name, DAX, description, format, or the calculation of a measure it calls. An AI would still quote it as a validated fact.

  • The measure “Gross Margin” (table Sales)

    to validate

    Have Finance department reread the definition of “Gross Margin”, then renew the validation with factcraft validate; or remove the FactCraft_Validation annotation if the fact is no longer guaranteed.

  • The measure “Margin %” (table Sales)

    to validate

    Have Finance department reread the definition of “Margin %”, then renew the validation with factcraft validate; or remove the FactCraft_Validation annotation if the fact is no longer guaranteed.

FC-LIS-02

Description that says nothing

important 1 object concerned

The description of the measure “Revenue” (table Sales) says nothing: it is 1 word long. An AI takes it for an explanation, and still guesses what the measure computes.

to validate

Rewrite the /// description: what it computes, in which unit, under which rule.

1 object concerned
  • The measure “Revenue” (table Sales)
FC-LIS-03

Cryptic name on a visible object

important 1 object concerned

The measure “KPI_Basket_02” (table Sales) has a cryptic name (coding prefix “KPI_”): no question asked in plain language will lead an AI to it.

to validate

Rename it “Basket 02”, to be reworded in the business's vocabulary; write in the AI instructions that “KPI_Basket_02” is its former name, for the questions that still use it.

1 object concerned
  • The measure “KPI_Basket_02” (table Sales)
FC-COH-01

Two measures with the same DAX

important 1 object concerned

The measure “Turnover” (table Sales) duplicates “Net Sales” (table Sales): same DAX, apart from spaces, case and comments. An AI hesitates between the two, and they will drift apart as soon as only one of them changes.

to validate

First check with the business that the two names mean the same figure. If they do, keep a single calculation: replace the DAX of “Turnover” with [Net Sales], or delete “Turnover” if nothing uses it; hiding it is not enough, the measures that reference it still read it. If they do not, one of the two calculations is wrong: correct it.

1 object concerned
  • The measure “Turnover” (table Sales)
FC-STR-01

Bidirectional relationship

important 1 object concerned

The relationship Sales[Customer ID] → Customer[Customer ID] filters in both directions: depending on the filter path an AI takes, the same number can change.

to validate

Make the relationship filter in one direction (crossFilteringBehavior: oneDirection), or write down why both directions are needed.

1 object concerned
  • The relationship Sales[Customer ID] → Customer[Customer ID]
FC-STR-02

Missing or automatic date table

important 1 object concerned

No table is marked as a date table: an AI does not know on which calendar to compute a year-to-date or a comparison with the previous year.

to validate

Mark “Calendar” as a date table (dataCategory: Time, a date column with continuous days).

1 object concerned
  • The model
FC-IA-04

AI instructions missing

important 1 object concerned

No AI instructions found in the project (Copilot/Instructions/instructions.md, where Prep data for AI saves them): Copilot has only the names and descriptions of the model to know which measure answers a question, and which date to use by default.

to validate

Write the AI instructions in Prep data for AI (saved in the project as Copilot/Instructions/instructions.md): the business terms, the measure behind each key figure, the default date. The audit dossier drafts them from this audit, for the business to validate.

1 object concerned
  • The model

Measures to validate

The figures not yet validated, starting with those the most other measures depend on, directly or not. For each one, the business rereads its definition, corrects it if needed, and signs it: who, when. FactCraft writes the signature into the model and warns as soon as the calculation changes.

MeasureDefinitionDepended on byStatus
Gross MarginSales Gross margin in euros: net sales minus the purchase cost of the products sold. 1 measure validation outdated
Margin %Sales Gross margin as a share of net sales, in percent. — validation outdated
TurnoverSales No definition yet: to write before it can be validated. — to validate
RevenueSales Total — to validate
KPI_Basket_02Sales No definition yet: to write before it can be validated. — to validate
Order CountSales No definition yet: to write before it can be validated. — to validate
Net SalesSales Net sales excluding tax, in euros: sum of the net amounts of sales lines, discounts deducted. 3 measures validated

AI instructions draft

Written by FactCraft from the audit of the fixed copy, without AI: the key figures validated by the business, the dates, the names to read carefully, the definitions under review. The data team rereads and corrects it with the business, then pastes it into Prep data for AI, where Copilot reads it.

to validate
<!-- FactCraft draft: validate it with the business, then delete this line and paste the rest into Prep data for AI. -->
# Instructions for Copilot

## Key figures
- “Net Sales” (table Sales): Net sales excluding tax, in euros: sum of the net amounts of sales lines, discounts deducted. Definition validated by Finance department on 2026-10-05.

## Names
- “Turnover” does the same calculation as “Net Sales”, validated by the business: use “Net Sales”.

## Definitions under review
- “Gross Margin”: its calculation changed after the business validated it; if you use it, say that its definition is being revalidated.
- “Margin %”: its calculation changed after the business validated it; if you use it, say that its definition is being revalidated.