Concepts

Connect your data

How data reaches an Axmo model and how results come back out — input ranges, dimension generators, series loaders and output ranges.

A model needs figures to work from, and it needs somewhere to put the results. Neither means moving your data anywhere.

Axmo does not import your data. It reads it where it already lives.

Your workbook stays the place the numbers are. Whatever brought them there — typed by hand, pulled in by Power Query, refreshed from a database or a business system — is still what brings them there, and Axmo reads the sheet those tools have already filled. There is no separate connector to configure and no second copy to keep in step.

Where data comes in

A data source is anything that hands the model a table of figures with headers on it. That is the whole contract: a table, and a row naming what the columns are.

Today there is one kind, and it is the one an Excel model wants: an input range, which is a range on a worksheet. You point Axmo at it and tell it that is where a particular set of figures lives.

The idea is deliberately wider than the one kind, because the model should not have to care where its figures came from. What it cares about is that something handed it a table.

When a dimension runs across the top

Tables that come out of a system usually have one column per figure — dates in one column, countries in another, then a column of revenue and a column of cost.

CountryMonthRevenueCost
Italy2026-011000500
Italy2026-021100550

Planning sheets are usually the other way round. The months run across the top, one column each, and each row is a line of the plan. The figures are the same six; a month has become a column heading instead of a value in a column.

CountryLine2026-012026-02
ItalyRevenue10001100
ItalyCost500550

An input range reads either shape. For the second you say which dimension's elements are in the headings, where that band of columns starts and ends, and — where the rows carry them — which column holds the name of the line. Axmo reads the grid and hands the model the same kind of table it always gets.

One dimension can sit in the headings, and the range needs a header row, because the headings are what name the elements.

Describing where the band starts and ends by naming other columns matters more than it looks. You can say the elements begin after the Country column and end before the Total column, rather than fixing which columns they occupy. The model then still works when someone plans 2027 instead of 2026, or adds three months — you have described the shape of the sheet, not its size.

Turning a table into structure

A dimension's elements usually exist before the data does — you know your countries, your months, your product lines. Sometimes you do not.

Take a portfolio of investment projects, each with its own code. You want a synthetic indicator calculated for every project and then rolled up into totals — but the list of project codes is in the data, it changes, and nobody is going to type it into a dimension by hand every month.

A dimension generator reads a column of your source and adds whatever it finds there to a dimension. Every project code in the data becomes an element, and the model has somewhere to put each project's numbers without your having declared them in advance.

Where the source also says which layer an element belongs to, or which element it sits under, the generator can take that from the data too. Where it does not, Axmo places what it finds in the dimension itself.

Loading the figures

A series loader does the plainer half of the job: it takes values from a source and puts them into a dataseries, at the coordinates the source's own columns identify.

This is how an input series gets its numbers. You are not writing a formula and you are not copying cells — you are saying this column of that table is this series, and the model reads it whenever it recalculates. Where a dimension is in the headings, it is the same sentence with a different subject. The rows have already said which line each figure belongs to, and you are choosing which of those lines is this series. The two names need not match: a row called Redditi in the workbook can be the Revenue series in the model.

Why generators run before loaders

The order is not a preference. A series loader has to know where each value goes, and it cannot put a figure against a project the dimension has never heard of.

So Axmo runs every dimension generator first, completes the structure, and only then loads values into it. By the time a series loader looks at its column, every element it might need exists.

Getting results back out

Calculated values live inside the model, and an output range is how you put them on a worksheet where people can read them.

An output range is defined by two things: what its rows are, and what its columns are. Months down the side and countries across the top; or products down and a set of series across. You describe each axis once and Axmo writes the block.

Where the same axis is wanted in several reports — the same twelve months, the same set of regions — you can define it once as an axis definition and use it in each of them. Change it in one place and every report using it changes with it.

What stays where

Everything above happens inside your workbook. The model reads ranges in it, writes ranges in it, and is itself stored in it.

Nothing is uploaded, and nothing is duplicated into a store of Axmo's own that then has to be kept in step with the sheet. The workbook remains the single copy, which is why it is still a file you can email, version, or open in five years without anything else being installed.