Skip to content
AnrilX
All capabilities

Conversational SAP

Ask it the way you would ask a person

No query language, no entity names, no transaction codes. A question in plain English comes back as figures, with the SAP field and the period they were computed from printed underneath.

  • Finds the right data itself across a catalogue of the whole SAP surface
  • Answers in seconds, not in a ticket queue
  • Follow-ups keep their context: “break those down”, “just for org 5000”
  • Every figure carries its source line
See it live

How much discount did we give last month, by condition type?

412.8m SAR in August 2026, across four condition types, 6.2% of gross order value. ZK02 customer rebate is the largest at 178.4m and is contractual. ZD01 is the one worth a look: it is the manual header discount, entered by hand, and it accounts for 94.1m across 1,208 orders.

SAR

178m ZK02 94m ZD01 89m ZD02 52m ZK05
Condition type Discount given
ZK02 · Customer rebate 178,412,090.44 SAR
ZD01 · Manual header discount 94,108,772.10 SAR
ZD02 · Volume discount 88,631,405.88 SAR
ZK05 · Promotion 51,702,318.02 SAR

Source: zsd_sales_order / A_SalesOrderItemPrcgElmnt · discount = sum of ConditionAmount · grouped by ConditionType · joined to header for the document date · August 2026

Assumed: discount means the condition types your pricing procedure configures as discounts: ZK02, ZD01, ZD02, ZK05. Freight, surcharge and tax conditions are excluded. Item-level rows carry no date of their own, so the period came from the header.

How it works

01

It searches your SAP, it does not guess at it

Your OData surface is ingested into a searchable catalogue: every service, entity set, field, type and key. A question is resolved against that catalogue, so the platform is choosing between entities that actually exist in your system rather than recalling what an SAP system usually looks like.

02

The query is built in code, not written by the model

One model call turns the question into a typed specification: which entity, which measure, which grouping, which period. Code executes it. The model never writes a filter string, never writes a date, and cannot name an entity outside the candidate list the platform assembled.

03

A follow-up resolves against the last answer

“Break those down”, “just for sales org 5000”, “and how many of those last year” each carry the previous question forward. What changes is one dimension; the rest of the plan is reused, so the second question costs what the first one did.

04

Arithmetic is arithmetic

Totals, deltas and percentages are computed in code and never asserted by a model. A percentage is the easiest number for a language model to get subtly wrong and the hardest for a reader to check by eye.

What it replaces

The normal path from a question to an answer in SAP runs through somebody else. A request, a queue, a specialist who knows which table holds the field you mean, and a report that answers the question you asked three weeks ago rather than the one you have now.

The cost is not mainly the waiting. It is that the second question (the one you only think of once you have seen the first answer) never gets asked at all, because asking is expensive.

What a good answer contains

A figure on its own is not an answer, it is an assertion. Every number AnrilX reports carries the entity set it was read from, the SAP field and aggregation behind it, the filter applied and the window covered:

Source: zsd_sales_order / ZA_SalesOrder · net revenue = sum of TotalNetAmount · Q3 2026

That line is what makes the difference between a number you have to trust and a number you can check. It is also what catches the one error nothing else can: a figure computed correctly from the wrong entity looks completely normal until you see which entity it came from.

Where it draws the line

The platform will tell you when a window was assumed because your question named no period, when a read came back incomplete, when a field name was repaired to the nearest match, and when one of your own business rules adjusted the figure. Each of those is a fact about the answer, and each is reported in the answer rather than in a log nobody opens.

Where it stops

What this capability will not do

Where this one stops, said here rather than discovered in a pilot.

  • A question with no answer in your data returns nothing, not a plausible substitute. Zero is a finding only when zero is the answer.

  • Context is scoped to the thread you are in. A question resting on something established in a different conversation has to restate it, because the platform does not carry assumptions between threads.

  • It reads what your own SAP authorisations permit. A question about data you cannot see returns nothing rather than a leak.

Questions people ask us

Do we need to know SAP table or entity names to ask a question?

No. You ask in business language (“which products are declining fastest”) and AnrilX resolves that against your own SAP catalogue. Entity and field names appear in the answer, under the figure, so you can check what was read.

How fast is an answer?

A compiled question (a figure, a breakdown, a comparison or a trend) typically returns in a couple of seconds, because only one model call is spent turning the question into a query and none at all executing it. Questions that need real reasoning take longer and are handled by a slower path.

What happens if it cannot answer?

It says so, and says why: the data is not there, the period is outside what the system holds, or the question cannot be expressed as a single query. An unanswerable question never becomes an invented answer.

Bring the question your reports cannot answer

Thirty minutes against a live SAP system we provide: no access to yours, nothing to set up. If it cannot answer, you find that out in half an hour rather than three months into a pilot.