Start

What you can ask

There is no command syntax and no menu of features. You type a sentence and EDI works out whether it is a question about the data, a chart, or an instruction to change the sheet. This is what it currently does with each.

Every example below was run against a real sheet rather than taken from a list of intents, and the ones that failed were fixed rather than written up. Answer quality still depends on the model you configured, so a weaker one will do worse on the questions even where the plumbing is identical. See Choosing a model.

Questions about the data

The common case. Your question becomes read-only SQL, runs against the sheet, and the rows come back as prose. Nothing is changed.

AskYou get
Which region had the highest total revenue?The answer, the number, and two follow-up questions worth asking next
how many orders came from the East region?A count
what is the average unit price?An average
compare the East and West regionsA comparison across several measures at once
what is this data aboutA description of the sheet, inferred from its columns and values

Column names do not need to be quoted or spelled exactly as the header. the model is reading the sheet, so “revenue” finds a column called Revenue.

Charts

When an answer is shaped like a chart, you get one. The backend returns a spec (chart type, axis, series, rows) and the browser draws it, so what arrives is data rather than a picture.

Chart total revenue by month
plot total revenue by region as a bar chart

Each chart carries a View data control, so the numbers behind it are always one click away rather than something you have to take on trust.

Finding problems

AskYou get
analyze this dataA pass over the whole sheet for anomalies and things worth a second look
are there any missing values?Which columns have gaps, or confirmation that none do
are there any duplicate rows?A count, without changing anything
remove duplicate rowsThe duplicates gone, and a note of how many

Changing what you see

These reorder or hide rows. The underlying data is untouched.

AskYou get
sort the sheet by revenue, highest firstSorted, with the direction confirmed back to you
sort revenue from largest to smallestSame. descending, high to low and Z-A all read
filter Region equals EastOnly matching rows left visible
filter Category contains GrindersSame, matching on part of a value
filter rows where Revenue is over 5000A numeric comparison
filter Units at least 10Same. >=, under, at most and the rest all read
show all rows againEvery filter cleared
freeze the first rowHeaders pinned while you scroll

Which way a sort runs is read from your sentence, not decided by the model. That matters on a small local model: one was asked to sort “descending” and sorted ascending, then reported success. The word is in the sentence, so there is nothing to infer. The model is only consulted when the sentence does not say, and then the default is ascending.

Filters match on equals, contains, or a numeric comparison, and take a column by name or by letter (filter column C with the value West). Rows whose value is not a number are hidden by a comparison rather than kept, so a column with stray text in it does not quietly widen the result.

Changing how it looks

AskYou get
make the header row boldBold. Also works on a cell (make A1 bold) or a column
highlight revenue over 5000 in greenA background colour on the cells that qualify
autofit the columnsEvery column widened to its content
format this sheet nicelyCurrency, dates and numbers detected and formatted in one pass

Name a colour when you highlight. Without one you get asked for it rather than a guess.

Changing the data

AskYou get
replace East with EasternEvery instance replaced, and a count of them
delete column IThe column removed. delete the Rep column works too
hide the Rep columnHidden, not deleted. show the Rep column brings it back
rename column C to AreaA new header, the data untouched
add a column called MarginAn empty column on the end, headed Margin
insert 2 columns before DTwo empty columns. after D puts them on the other side
translate the Region column to FrenchA new Region_Translated column, leaving the original alone

Everything here is saved as you go, and Download as CSV in the workbook menu gets it back out.

Formulas

Ask for a formula and you get the formula, not the answer, with an Apply button under it. Nothing changes in the sheet until you press it, which is the point: a formula lands in cells you picked, so a wrong one should be something you read and ignore rather than something you undo.

what formula would sum revenue for the South region
add a column called unit_price that is revenue divided by units
give me a formula for the average units per order

Two things can come back. An aggregate, =SUMIF(B:B,"South",E:E), goes into one cell, and the button names which: click a cell in the sheet first and it goes there. A per-row calculation, =E2/D2, becomes a new column at the end, headed with the name you gave, filled down every row with the references shifted as a spreadsheet would shift them.

It is a real formula in a real cell, not a computed value: edit a number the formula depends on and it recalculates, which is the reason to want one rather than asking for the number.

Naming a column

Anywhere a column is called for, three ways of naming it all work: the spreadsheet letter (C, and AA past Z), the position (column 3), or the header itself (the Rep column). They used to differ per operation: sorting and filtering took names while deleting and hiding took a single letter, which meant delete the Rep column failed for no reason a reader could see.

A header wins over a letter when they collide, so a sheet with a column genuinely headed “C” is still reachable by name. A partial match only counts when exactly one header contains what you typed; otherwise you are told nothing matched rather than given a coin flip.

Notes, links and dropdowns

add a note to A1 saying checked by hand, add a hyperlink on B2 pointing to https://example.com and add validation on C1:C10 with dropdown values: Red, Green, Blue all work, in both directions: you can ask what a note or link says, and remove either. Number-range and date validation are there too.

Pivots

pivot revenue by region and product puts a cross-tab on a new sheet: the first column down the side, the second across the top, totals on both edges. break down total units by rep and cross-tab average revenue by month and region work the same way. Name an aggregate and it is used: sum, mean, median, min, max, count, std, var, first or last. Name none and it sums. Name no number at all and it aggregates every numeric column that is not already a heading.

The numbers are computed in the backend, where the sheet is already a pandas frame, and written back as cells. Univer’s own pivot tables are part of its commercial tier, so this is the pivot an Apache-2.0 build can have: a real sheet you can sort, chart and export, rather than a live object you drag fields onto. Re-slicing means asking again.

A pivot wider than 200 columns is refused rather than drawn. That is what pivoting across a column with a distinct value per row produces, and the message says so.

Changing one you already have

A follow-up names only what moved, and the rest of the last pivot carries over. change it to average keeps the fields and swaps the aggregate. same pivot but by month keeps the aggregate and regroups. add product as a column to that pivot keeps everything and widens it. Each of these rewrites the sheet the pivot is already on rather than making another, because one pivot should be one sheet: the whole sheet is cleared first, so a narrower result leaves no stale Total column behind.

another pivot right below this one but by rep and product keeps the first and puts the second underneath it, one blank row apart, on the same sheet. Where it goes is measured at the time rather than remembered, so inserting or deleting rows by hand in between does not misplace it.

A follow-up that names no fields at all gets asked which ones, and told what the last pivot was, rather than being guessed at. A follow-up before there is any pivot says so.

What is not there

Images and drawings. The classifier recognises the request and there is nothing behind it: inserting a picture goes through Univer’s drawing system rather than a cell, which this has not been wired to. Asking gets you a failure, not a picture.

For that, and anything else the chat does not cover, the sheet is a real spreadsheet (Univer, with its own toolbar) so you can do it by hand.

How it decides

Two classifications, not one. The browser checks first whether your sentence is a spreadsheet operation it can carry out itself, using patterns where they are unambiguous and the model where they are not. Anything that is a plain question skips that entirely and goes to the backend, which categorises it again to choose between SQL, a chart, a data-quality pass and the rest.

How it works follows a single question through both of those.