D-CAT Group ↗ Contact ENTRDEESAZ
Start a 4-week pilot

Solutions · by industry · retail chains

Retail: the same revenue line can be healthy or sick, and the agent tells which

CIO (POS, ERP and workforce data already in one warehouse; on-premise; row-level scope by region) · CFO and chief merchandising officer (margin, markdown, promotion, private label) · store operations director (comparable sales, traffic, conversion, labour) · supply-chain director (availability, stock cover). The buyer is usually the CIO with the merchandising officer; the daily readers are category managers and regional managers.

How the three agents on this page read one semantic modelOne semantic model on the left; three scheduled agents in the middle - Chief Merchandising Officer Agent, Store Performance Agent, Inventory Availability Agent; each publishes findings, recommendations and a brief on the right.semantic modelimported from Axoria Data Studionet_salesgross_salesunits_soldtransaction_countgross_marginChief MerchandisingOfficer Agentweekly · Monday 05:00FfindingRrecomm.BbriefStore Performance Agentweekly · Monday 05:15FfindingRrecomm.BbriefInventory AvailabilityAgentmonthly on the 3rd · 05:30FfindingRrecomm.Bbriefevery number in a record carries an evidence address

Questions

The three questions a retail board asks every month

  • Is revenue growth price, volume or basket — and is it healthy?
  • Which region's comparable sales fell, and was it traffic or basket?
  • Is stock rising where sales are falling, and which shelves are empty?

In conversation

Sample questions people type into the conversation

deepen path — the finding's evidence is carried frozen; a new number needs a new query, and the agent says so

  • "Break the Fresh Produce markdowns down by store format."
  • "Which South-East stores lost traffic and which lost basket?"
  • "Show promoted basket depth by category group for August."
  • "Is Household stock rising in every store or in a few?"
  • "How current is the stock data?"

Personas

Three example agents

The agents below are examples for this industry, not a fixed set: Chief Merchandising Officer Agent · Store Performance Agent · Inventory Availability Agent. Each one’s scheduled run is shown in the example sets that follow.

Set 1

Chief Merchandising Officer Agent

Audience: the chief merchandising officer, category directors, the promotions manager.

Set 2

Store Performance Agent

Audience: regional managers, the store operations director.

Set 3

Inventory Availability Agent

Audience: category buyers, the replenishment manager, the supply-chain director.

An agent's name says which measures it reads and for whom. It holds none of the role's authority: it does not decide, approve or act.

Agents for the topics you choose

An agent is a job description, a bound semantic model and a schedule — not code — so the topics it watches are yours to set: a payer, a service line, a campaign, a supplier. We write the first ones with you.

Build your agents with us →

Example sets

Three example sets, one run each

Each set is one agent persona and one scheduled run’s output — the brief, the recommendations and the findings they rest on — in the product’s own record envelope. The first set is open; the other two are collapsed. The model and the measures the sets assume are listed at the foot of the page.

IllustrativeSet 1Chief Merchandising Officer Agent
Persona
Reads category margin, markdown, promotion and brand-tier dynamics for a 62-store supermarket chain in one country (12 hypermarkets, 50 neighbourhood stores); separates the dynamic that produced a category's revenue from the revenue itself. · Audience: the chief merchandising officer, category directors, the promotions manager. · Tone: corporate-report language, short, number-led; where two explanations cannot be separated it says so. · Output language: en
Signals it watches
(1) Category margin scissors — net sales rising while gross margin share falls. (2) Markdown share by category and week. (3) Brand-tier migration — private-label units against branded units inside a category. (4) Promotion efficiency — promoted transactions rising while promoted basket depth falls. (5) Average unit price shift, read as price or mix, never "price went up" before the breakdown separates the two.
Thresholds it was given
finding 15 % · critical 40 % · ratio metrics (margin share, markdown share, basket depth, unit price) 8 % · minimum share 1 % of network net sales · scissors 10 points · severity rule: medium when a threshold is crossed, high when a ratio metric moves more than 1.25× its threshold or a count metric more than 1.5× the finding threshold, critical above the critical threshold; a finding with a breakdown cell takes the severity of the cell's own move; an ongoing topic keeps the severity it was given

Run header

  • Scheduled weekly, Monday 05:00, Europe/Amsterdam
  • Period: August 2026 (31 days, 5 weekends) vs August 2025 (31 days, 5 weekends) — equal trading days
  • Data complete through 2026-09-20, measured via max(SALE_DATE), 7 hours ago
  • Scope: no row-level rule is bound to this agent — the run was produced on every row
  • Model: the workspace's approved model, written onto the run
  • Cost: recorded on the run
  • Amounts in EUR
Brief

August 2026: Net Sales +7.17 % YoY, Fresh Produce Margin 27.39 % → 24.10 % on Doubled Markdowns, Promoted Baskets Thinner at 2.18 Units, Private Label 35.33 % of Dry Grocery Units

Assumptions strip

You did not state a period; last full month (August 2026) was assumed, compared with August 2025 (equal trading days). No row-level rule is bound to this agent; the run was produced on every row. Margin is measured at category level; brand-tier margin is not in this model.

August net sales of 73.2 M € were 7.17 % above last year, and the growth was not uniformly healthy. Fresh Produce outgrew the network (+9.82 %) while its gross margin share fell from 27.39 % to 24.10 %, with markdowns doubling from 0.294 M € to 0.593 M €. In Dry Grocery, private label kept taking share of units — 35.33 % against 31.20 % a year ago — while branded units fell 5.30 %; the category's average unit price barely moved. The promotion programme brought 28.87 % more promoted transactions but a thinner promoted basket, 2.18 units against 2.41; promoted sales are now 30.16 % of the network. A sentence calling August the strongest promotion month of the year was held: no query in this run compared the months, and promotion funding is not in the model.

covers: Finding 1, Finding 2, Finding 3

— Run: weekly, the workspace's approved model, data complete through 2026-09-20. Guard Ledger: held 1 — candidate f-03 draft, reason unproven_superlative (gate 4): token strongest promotion month of the year had no queried month series behind it, one coached rewrite still carried it, then held; not_selected 0; duplicate 0.

Recommendation 1

Break Fresh Produce markdowns down by store format and by hour of day for August, with fresh units beside them

based_on: Finding 1 · owner: Fresh category director, with the store operations director

If the added markdown sits in the last two trading hours and in the neighbourhood format, it is waste-driven and the replenishment owner reads it; if it is spread across the day, it is a price decision and the pricing owner reads it. Both cuts are in this model and cost one query each. The markdown reason code is not — until it is added, "waste" and "price investment" cannot be told apart from the data alone.

The findings this rests on

Finding 1

Margin Scissors in Fresh Produce: Net Sales +9.82 % YoY While Gross Margin 27.39 % → 24.10 % of Sales — Markdowns 3.10 % → 5.70 % of Category Sales

severity highdirection downnovelty newtrust Abreakdown PRODUCT_CATEGORY = Fresh Produce

Fresh Produce net sales reached 10.40 M € in August 2026 against 9.47 M € in August 2025 (+9.82 %), with units sold +6.20 %. Gross margin fell from 2.594 M € to 2.506 M € (−3.39 %), so the margin share moved from 27.39 % to 24.10 % — a −12.03 % change in a ratio metric, 1.50× the 8 % threshold — severity high. Markdowns doubled in amount (0.294 M € → 0.593 M €, +101.70 %) and their share of category sales rose from 3.10 % to 5.70 %. Fresh Produce is 14.21 % of the network's 73.2 M € August net sales; network net sales grew +7.17 %, so the category outgrew the network on the top line while losing on the margin line. This data cannot separate a deliberate price investment from waste-driven end-of-day markdown — the markdown reason code is not in this model.

Recommendation 2

Put promoted basket depth on a weekly watch by category group, and stop reading promoted sales growth without it

based_on: Finding 3 · owner: promotions manager

Promoted net sales grew 31.43 % while promoted basket depth fell 9.54 %; the second number is the one the promotion calendar owner needs beside the first. A weekly watch by category group will show whether the thinning is general or sits in one group; the agent will stamp the topic ongoing rather than alert again.

The findings this rests on

Finding 3

Promotion Bringing Traffic, Not Basket: Promoted Transactions +28.87 % YoY While Promoted Basket Depth 2.41 → 2.18 Units (−9.54 %) — Promoted Share of Net Sales 24.60 % → 30.16 %

severity highdirection downnovelty newtrust Ainterpretivebreakdown PROMO_FLAG = On promotion

Promoted net sales rose from 16.8 M € to 22.08 M € (+31.43 %) and now carry 30.16 % of network net sales, up from 24.60 %. Non-promoted net sales were flat (51.5 M € → 51.12 M €, −0.74 %, below threshold). Promoted transactions rose from 1.94 M to 2.50 M (+28.87 %, 1.92× the 15 % finding threshold — severity high) while promoted units rose less, from 4.675 M to 5.45 M (+16.58 %), so promoted basket depth fell from 2.41 to 2.18 units per transaction (−9.54 %, above the 8 % ratio threshold). The pattern suggests the promotion brings the customer in but does not fill the basket — that sentence is interpretive and badged so. This data cannot say whether the promotion paid for itself — promotion funding is not a metric in this model.

Also published in this run, with no recommendation resting on it

Finding 2

Brand-Tier Migration in Dry Grocery: Private-Label Units +14.11 % YoY While Branded Units −5.30 % — Private Label Now 35.33 % of Category Units, Net Sales +2.10 %

severity highdirection upnovelty ongoingtrust Abreakdown BRAND_TIER = Private label

Dry Grocery sold 5.884 M units in August 2026 against 5.84 M a year earlier (+0.75 %), but the tiers moved apart: private-label units rose from 1.822 M to 2.079 M (+14.11 %) while branded units fell from 4.018 M to 3.805 M (−5.30 %). Private label's share of the category's units moved from 31.20 % to 35.33 % (+13.25 % in a ratio metric, 1.66× the 8 % threshold — severity high, unchanged from the previous run). Category net sales grew from 27.6 M € to 28.18 M € (+2.10 %); Dry Grocery is 38.50 % of network net sales. The average unit price of the category moved from 4.726 € to 4.789 € (+1.34 %), below any threshold — the tier shift has not lowered the category's price point. The agent reported this migration in the previous run as well; it is stamped ongoing. This data cannot say what the migration did to category margin — cost is held at category level in this model, not by brand tier.

What this run could not see.

The markdown reason code, promotion funding and cost by brand tier are not in this model. Whether the private-label migration is deliberate range work or customer trading-down cannot be read from units alone. Store-level margin is outside this agent's scope by design — the Store Performance Agent reads sales and traffic, not margin.

IllustrativeSet 2Store Performance Agent
Persona
Reads comparable-store sales, traffic, basket, conversion and scheduled labour for the same 62-store chain; tells "one store's story" from "a region's story", and "fewer customers" from "smaller baskets". · Audience: regional managers, the store operations director. · Tone: plain and operational. · Output language: en
Signals it watches
(1) Comparable-store divergence — a region moving against the network, split into traffic and basket value. (2) Conversion — transactions against footfall, by format, with the counter's own data edge stated. (3) Labour hours per 1,000 transactions by format. (4) Basket erosion — units falling while transactions hold. (5) Store concentration — a change that is one store's is said as one store's.
Thresholds it was given
finding 15 % · critical 40 % · ratio metrics (conversion, basket value, hours per 1,000 transactions) 8 % · minimum share 1 % of network net sales · divergence rule: a region moving against the network by more than 5 points on comparable sales is a finding, published at high when the region holds more than 10 % of network net sales · severity rule: medium when a threshold is crossed, high when a ratio metric moves more than 1.25× its threshold or a count metric more than 1.5× the finding threshold, critical above the critical threshold; a finding with a breakdown cell takes the severity of the cell's own move; an ongoing topic keeps the severity it was given

Run header

  • Scheduled weekly, Monday 05:15, Europe/Amsterdam
  • Period: weeks 34–37 of 2026 (17 August – 13 September, 28 days, four of each weekday) vs the same 28 days of 2025 (18 August – 14 September) — equal weekday composition
  • Data complete through 2026-09-20, measured via max(SALE_DATE), 7 hours ago; the footfall counter loads weekly and its edge is 2026-09-13
  • Scope: the agent runs under the store operations scope (all 62 stores, no margin metrics)
  • Model: the workspace's approved model
  • Cost: recorded on the run
  • Amounts in EUR
Brief

Weeks 34–37 2026: Comparable Sales +4.12 % While South-East −3.83 % on Traffic, Hypermarket Conversion 63.81 % → 57.89 %, Neighbourhood Hours per 1,000 Transactions +9.84 %

Assumptions strip

A four-week window (weeks 34–37) was used because the agent's schedule is weekly; the comparison window has the same weekday composition. The footfall counter's data edge (2026-09-13) is a week behind the sales edge (2026-09-20). Two stores' counters returned no rows and are excluded from the conversion ratio.

The network's comparable sales grew 4.12 % over the four weeks, but Region South-East fell 3.83 % on its eleven stores, and the fall is traffic (−5.12 %) rather than basket (+1.36 %); nine of the eleven stores show it. In the hypermarkets, footfall rose 7.79 % while transactions fell 2.20 %, taking conversion from 63.81 % to 57.89 % — a counting change cannot be ruled out because the counter's exclusion flag is not in the model. The neighbourhood format spent 9.84 % more scheduled hours per 1,000 transactions than a year ago on slightly fewer transactions.

covers: Finding 1, Finding 2, Finding 3

— Run: weekly, the workspace's approved model, data complete through 2026-09-20 (sales) and 2026-09-13 (footfall). Guard Ledger: held 0; duplicate 1 — candidate f-04 (district cut of the South-East decline) merged into Finding 1 on fingerprint net_sales|w34-37|south-east; data state 1 — envelope e5 (footfall) returned 0 rows for two hypermarket counters; not_selected 0.

Recommendation 1

Break South-East's eleven stores down individually for weeks 34–37, transactions and basket value side by side, against each store's own 2025 weeks

based_on: Finding 1 · owner: regional manager, South-East

Nine stores lost traffic; the store cut will show whether two or three carry most of it or the loss is even. Both metrics are in this model at store grain and cost one query. Catchment and competitor data are not in the model; the regional manager reads those beside the record.

The findings this rests on

Finding 1

Regional Divergence: Comparable Sales +4.12 % Network-Wide While Region South-East −3.83 % on 11 Stores — Traffic −5.12 %, Basket Value +1.36 %

severity highdirection downnovelty newtrust Abreakdown REGION = South-East

Across the 58 comparable stores, net sales for weeks 34–37 reached 63.72 M € against 61.20 M € a year earlier (+4.12 %). Region South-East moved the other way: 10.877 M € against 11.31 M € (−3.83 %), on 11 stores that hold 16.33 % of the network's 66.62 M € total (four non-comparable stores included) — a 7.95-point divergence from the network, above the 5-point divergence rule, on a region above 10 % of sales: severity high. Neither the region's −3.83 % nor its traffic −5.12 % crosses the 15 % finding threshold on its own; the divergence rule is what published this record. The decline is traffic, not basket: South-East transactions fell from 1.412 M to 1.3397 M (−5.12 %) while basket value rose from 8.01 € to 8.12 € (+1.36 %). Nine of the eleven stores show the traffic loss, so this is a regional story, not one store's. The region cut and the district cut return the same rows in this estate and are not presented as two pieces of evidence. This data cannot say where the traffic went — the model holds no competitor, roadworks or catchment data.

Recommendation 2

Put hypermarket conversion on a weekly watch with footfall beside it, and ask the model owner for the counter's exclusion flag

based_on: Finding 2 · owner: store operations director, with the data-model owner

A conversion fall on rising footfall is either more browsing or a counting change, and the data cannot tell which until the counter's exclusion flag (staff, deliveries) is in the model. Until then the watch shows the direction; the flag is a Data Studio change, not an agent change.

The findings this rests on

Finding 2

Hypermarket Conversion Falling While Footfall Rises: Footfall +7.79 % YoY, Transactions −2.20 %, Conversion 63.81 % → 57.89 % (−9.27 %)

severity mediumdirection downnovelty newtrust Abreakdown STORE_FORMAT = Hypermarket

The 12 hypermarkets (46.80 % of network net sales) counted 4.98 M entries in weeks 34–37 against 4.62 M a year earlier (+7.79 %), while their transactions fell from 2.948 M to 2.883 M (−2.20 %). Conversion — transactions per entry — moved from 63.81 % to 57.89 % (2.883 M of 4.98 M entries against 2.948 M of 4.62 M), a −9.27 % change in a ratio metric, 1.16× the 8 % threshold — severity medium. Ten of the twelve stores show the fall; two counters returned no rows for the period and those stores are excluded from the ratio (recorded as a data state, not a finding). The counter counts every entry, staff and non-shoppers included, and loads weekly — its edge is 2026-09-13, a week behind the sales edge. This data cannot separate more browsing from a counting change; the counter's exclusion flag is not in this model.

Also published in this run, with no recommendation resting on it

Finding 3

Neighbourhood Labour Intensity: Scheduled Hours per 1,000 Transactions 27.40 → 30.10 (+9.84 %) While Transactions −1.60 %

severity mediumdirection upnovelty newtrust Abreakdown STORE_FORMAT = Neighbourhood

The 50 neighbourhood stores recorded 5.53 M transactions in weeks 34–37 against 5.62 M a year earlier (−1.60 %, below the finding threshold) while scheduled labour hours rose from 154,000 to 166,450 (+8.08 %). Hours per 1,000 transactions therefore moved from 27.40 to 30.10 (+9.84 %, 1.23× the 8 % ratio threshold — severity medium). The hypermarket format shows no such move. These are scheduled hours from the workforce system, not worked hours — the time-clock is not in this model, so overtime and absence cannot be read here.

What this run could not see.

Where South-East's traffic went; whether the counter change is real; worked hours as opposed to scheduled hours. Margin is outside this agent's scope by design.

IllustrativeSet 3Inventory Availability Agent
Persona
Reads the stock star and the sales star of the same chain and builds the comparison in the sentence — the two have no bridge; separates "stock rising because sales rise" from "stock rising while sales fall", and reads out-of-stock item-days by category and format. · Audience: category buyers, the replenishment manager, the supply-chain director. · Tone: plain; every stock sentence names its month, every sales sentence its window. · Output language: en
Signals it watches
(1) Stock–sales scissors — month-end stock value rising while the category's units sold fall. (2) Days of cover by category. (3) Out-of-stock item-days as a share of listed item-days, by format. (4) Stock mix diverging from sales mix. (5) Stock concentration by store.
Thresholds it was given
finding 15 % · critical 40 % · ratio metrics (days of cover, out-of-stock share) 8 % · minimum share 1 % of network stock value · scissors 10 points · severity rule: medium when a threshold is crossed, high when a ratio metric moves more than 1.25× its threshold or a count metric more than 1.5× the finding threshold, critical above the critical threshold; a finding with a breakdown cell takes the severity of the cell's own move; an ongoing topic keeps the severity it was given

Run header

  • Scheduled monthly on the 3rd, 05:30, Europe/Amsterdam
  • Period: month-end August 2026 vs month-end July 2026 for stock; August vs July 2026 for sales (31 days each, 5 vs 4 weekends — stated, not corrected)
  • Data complete through 2026-08-31 for stock, measured via max(STOCK_MONTH); through 2026-09-20 for sales, measured via max(SALE_DATE), 8 hours ago
  • Scope: the agent runs under the supply chain scope (all stores, no margin metrics)
  • Model: the workspace's approved model
  • Cost: recorded on the run
  • Amounts in EUR
Brief

August 2026: Household & Cleaning Stock +15.18 % While Its Units Sold −4.29 % (Cover 41.33 → 49.74 Days) — Dairy Out-of-Stock at Neighbourhood Stores 3.90 % → 6.40 %

Assumptions strip

Stock is measured at month-end and compared month over month; sales for the same months are compared on the sales star. The two stars have no bridge; every comparison is built in the sentence. Six neighbourhood stores have no gap-scan rows for August and are recorded as a data state.

Household & Cleaning ended August with 645,000 units in stock against 560,000 at the end of July (+15.18 %), while the category sold 4.29 % fewer units than in July; days of cover rose from 41.33 to 49.74. The category is 12.37 % of the network's month-end stock value. At the neighbourhood stores, Dairy's out-of-stock item-days rose from 3.90 % to 6.40 % of listed item-days, measured on the 44 stores that scan daily, while Dairy units sold slipped 2.10 %. The "capital tied up" figure the agent wrote was held; the stock value in the finding is the number with an address.

covers: Finding 1, Finding 2

— Run: monthly, the workspace's approved model, stock complete through 2026-08-31, sales through 2026-09-20. Guard Ledger: held 1 — candidate r-01 draft, reason numeric_provenance: token about 0.45 M € (capital tied up) resolved to no envelope and declared no operation; data state 1 — envelope e4 (gap scan) returned 0 rows for six neighbourhood stores; not_selected 0; duplicate 0.

Recommendation 1

Break Household & Cleaning month-end stock down by store cluster for July and August, and put each cluster's August units sold beside it

based_on: Finding 1 · owner: category buyer, Household & Cleaning

If the added stock sits in a few stores, it is an allocation question; if it is even, it is an order-quantity question. Both cuts are in this model, on their own stars, and the comparison is written in the sentence. The stock value in the finding (2.858 M €) is the addressed figure; the "capital tied up" estimate the agent drafted was not.

The findings this rests on

Finding 1

Stock–Sales Scissors in Household & Cleaning: Stock Units +15.18 % MoM While Units Sold −4.29 % — 19.46-Point Gap; Days of Cover 41.33 → 49.74

severity highdirection upnovelty newtrust Abreakdown STOCK_CATEGORY = Household & Cleaning

Month-end stock of Household & Cleaning rose from 560,000 units (2.41 M €) at the end of July to 645,000 units (2.858 M €) at the end of August (+15.18 % in units, +18.59 % in value). On the sales side the category's units sold fell from 0.42 M in July to 0.402 M in August (−4.29 %). The gap between the stock change and the sales change is 19.46 percentage points, above the 10-point scissors threshold. Days of cover — stock units over the month's daily sales rate — moved from 41.33 to 49.74 (+20.34 %, 2.54× the 8 % ratio threshold — severity high). The category holds 12.37 % of the network's 23.1 M € month-end stock value. The stock category and the sales category carry similar names but are two dimensions on two stars with no defined relationship; the comparison is built in this sentence and not by a join. This data cannot say whether the stock came from one large delivery or a slower sell-through in a few stores — the delivery calendar is not in this model.

Recommendation 2

Put the Dairy out-of-stock rate on a daily watch by day of week and by store, and ask the model owner for a gap-scan coverage flag

based_on: Finding 2 · owner: replenishment manager, with the data-model owner

A day-of-week cut will show whether the gaps sit on delivery days or between them. The six stores without scan rows must be visible as absent, not as zero: a coverage flag in the model is the way, and it is a Data Studio change.

The findings this rests on

Finding 2

Dairy Out-of-Stock at Neighbourhood Stores: 3.90 % → 6.40 % of Listed Item-Days (+64.01 %) While Dairy Units Sold −2.10 %

severity criticaldirection upnovelty newtrust Abreakdown PRODUCT_CATEGORY = Dairy × STORE_FORMAT = Neighbourhood

Across the 44 of the 50 neighbourhood stores that scan gaps daily, Dairy recorded 103,000 out-of-stock item-days in August against 62,800 in July, on 1,609,520 listed item-days (1,180 listed items × 44 scanning stores × 31 days): the rate moved from 3.90 % to 6.40 %, a +64.01 % change in a ratio metric, above the 40 % critical threshold — severity critical. Dairy is 9.80 % of network net sales, and its units sold fell from 2.86 M to 2.80 M (−2.10 %, below the finding threshold). Six neighbourhood stores have no gap-scan rows for August and are absent from the rate; this is recorded as a data state. This data cannot separate supplier fill-rate from store replenishment — supplier delivery lines are not in this model.

What this run could not see.

The delivery calendar, supplier fill-rate and the gap-scan coverage of six stores. Stock and sales share no dimension; whether the same items are overstocked and out of stock at once cannot be asked of this model.

Every number carries an address

In the product each figure binds to an evidence address — envelope, row, cell, check digit — and a number without one is held, not published. The anatomy of a record →

Derived figures show their operation

A change, a share or a gap is computed by the engine and carries its operands; the model never divides. How every number is proved →

AI governance is the publication layer

Eight deterministic gates, the trust tier, badged interpretation, an assumptions strip that cannot be switched off, and the Guard Ledger. Where the model can and cannot reach →

FAQ

Four questions this page is usually asked

01Our stock snapshot is monthly and our sales are daily. Can the agent still compare them?

Yes, and it says how: each star is asked on its own grain, and the comparison is built in the sentence, never with a join the model does not have.

02Does the agent see loyalty members?

No. Member identity is marked personal; the nearest allowed cut is a segment.

03What if a store's counter is broken?

The store is excluded from the ratio and recorded as a data state — not counted as zero, not turned into a finding.

04Can it tell price from mix?

Only as far as the breakdown allows. Where SKU-level price is not in the model, the finding says the two cannot be separated.

Free data discovery study

See which of these signals your own warehouse can carry.

Send us the name of your data platform and the domain you argue about most. We read your semantic model with you and answer in writing: which of the signals on this page your model carries today, which need a change in Axoria Data Studio, and what a four-week pilot would measure. No cost, no sequence — a person replies within two working days.

What the examples assume

The data, the model and the measures behind the three sets

Nothing in a set rests on a source outside the model described here. Open what you want to reconcile.

01Assumed data sources — data a retail chain already has

POS transactions (line level, daily), the merchandising system (item master, category tree, cost, list price, promotion flag), the warehouse and store stock snapshot (monthly or daily), the promotion calendar, traffic counters (weekly loads), workforce management (scheduled hours by store), the loyalty programme (never by person in the model — by segment). Typical warehouse grain: one row per receipt line, rolled to day × store × item.

02Assumed semantic model — the minimum for the three personas
Measures
net_sales · gross_sales · units_sold · transaction_count · gross_margin (cost at item or category level) · markdown_amount · promoted net_sales / units / transactions (via the promotion flag) · basket_depth (engine-derived: units_sold / transaction_count) · average_unit_price (engine-derived: net_sales / units_sold) · footfall · conversion (engine-derived: transaction_count / footfall) · labour_hours (scheduled) · stock_units · stock_value · out_of_stock_item_days · listed_item_days · days_of_cover (engine-derived).
Dimensions
sale date · store · store format (hypermarket / neighbourhood) · region · category group · product category · brand tier (private label / branded) · promotion flag · hour of day · stock month · stock category · stock store. Marked personal and never broken down by: loyalty member, cashier.
Data edge
measured by the engine via max(SALE_DATE) for the sales star and max(STOCK_MONTH) for the stock star; the model declares both, and the two stars have no bridge — comparisons are built in the sentence.
03Assumed KPIs — what retail executives track
KPIDefinitionUnitTypical bandUsual breakdown
Comparable-store sales growthYoY revenue change for stores open ≥ 12 months%company-specificstore · region
Sales per square metrenet sales / selling areacurrency/m²specialty retail $300–500 per sq ft [vendor]store · category
Gross margin(sales − cost of goods) / sales%independent grocers 27.9 % FY2025 [assoc]category · store
Net profit marginnet income / sales%grocery ≈ 2.1 % FY2025 [assoc]banner · store
Inventory turnovercost of goods / average inventoryturns/yrgrocery 10–17; fashion 4–6 [vendor]category · store
Shrink(book inventory − physical) / sales% of sales1.6 % average [assoc, via secondary]store · category
Basket size / average transaction valuesales / transactionscurrencycompany-specificstore · daypart
Conversion ratetransactions / footfall%counter-dependent; no public bandstore · hour
Gross margin return on inventorygross margin / average inventory costratio2.0–3.5 target [vendor]category
On-shelf availability / out-of-stock rateitems in stock / items listed%92–95 % typical, 95–98 % strong [research]store · category
Labour cost share of salespayroll / sales%company-specificstore · department
Markdown sharemarkdown amount / gross sales%company-specificcategory · season
Return ratereturns / sales%15.8 % all-channel 2025 [assoc]category · channel
Promoted share of salespromoted net sales / net sales%company-specificcategory group · store

Related

Where these pages lead