An open data platform for more than 150 users: cheaper than Fabric, comparable with Databricks and Snowflake, far less to manage yourself
A data platform for fifty to well over 150 report users does not have to be a lakehouse platform with permanent compute. An Azure SQL database that only runs big during the load, Parquet files in your own data lake and Power BI with import models do the same job for about 2,465 euros a month. That includes fifty Power BI licences and two environments. That is well over half cheaper than Microsoft Fabric and comparable with Databricks or Snowflake. The real difference sits in what you build and manage yourself: almost nothing with Yres, most of it with the other three. This page shows that on cost, manageability and functions.
Last updated:
The worked example
The example is an organisation with fifty report users and about a terabyte of data. Every night one load of a few hours fetches only the changes. Power BI reads from import models of at most ten gigabytes that refresh once a day. There is a development and a production environment. Spark, machine learning in production and streaming do not occur in it.
Sources arrive through Azure Data Factory in a single Azure SQL database, where all processing happens as plain SQL. Yres drives the loading, keeps the history and writes every change as Parquet files to a data lake on Azure Data Lake Storage Gen2.
The Azure invoice for both environments together comes to about 750 euros a month. The production database is the largest line, because you pay for it by the hour at whatever level it sits on. Yres puts it on a high level when the load starts and back after the last table, so it sits low during the day. The rest of the invoice consists of the Data Factory activities, storage, the key vault and the small database of the development environment. Yres itself costs a fixed amount per month, with no per-user price and no consumption charges; the Advanced package at 674 euros brings the second environment, the change process and the automatic scaling.
The Power BI prices are those of Microsoft's Dutch pricing page on 6 October 2026, with annual billing and excluding VAT. The last line of the table is optional: a small Fabric capacity (F8) that you switch on now and then for an analysis or a notebook on the same Parquet files and pause afterwards. At forty hours a month it costs about 60 dollars.
| Component | Per month | Per year |
|---|---|---|
| Azure resources for development and production: database (about 1 TB), Data Factory, storage, key vault | ± 750 euros | ± 9,000 euros |
| Yres Advanced: loading, history, Parquet feed, monitoring, scaling, change process, two environments | 674 euros | 8,088 euros |
| Platform before Power BI | ± 1,425 euros | ± 17,100 euros |
| 50 × Power BI Premium per user at 20.80 euros | 1,040 euros | 12,480 euros |
| Total for fifty users | ± 2,465 euros | ± 29,570 euros |
| Per user | ± 49.30 euros | ± 591.40 euros |
| Optional: Fabric F8 for analyses, on forty hours a month, paused otherwise | ± 60 dollars | ± 700 dollars |
Cost at a glance
The same scenario on the three other platforms, always with Power BI as the reporting layer. The Yres column is the worked example in euros; the other three are estimates on list prices of 6 October 2026 in dollars, sized realistically and without discount. For Fabric the outcome is firm: a ten-gigabyte import model only refreshes on an F64 capacity, and that capacity must be on while people open reports. For Databricks and Snowflake the amount depends on cluster sizes and hours, so those show a band.
The outcome: against Fabric the Yres setup is well over half cheaper. Against Databricks and Snowflake the amounts are of the same order, with the Yres setup at the low end. The difference sits in the bottom line of the table. Loading Dutch packages, the history, the change process and the monitoring you build and maintain there yourself, and one day a week of a data engineer costs more at a common hourly rate than the whole Yres licence. How the amounts were calculated is in the appendix at the bottom of this page.
| Per month, fifty users | Yres on Azure | Microsoft Fabric | Databricks | Snowflake |
|---|---|---|---|---|
| Platform: processing, storage, orchestration, two environments | ± 1,425 euros | ± 5,000 dollars (F64 with a one-year reservation) | ± 1,300 dollars | ± 1,300 to 1,800 dollars |
| Power BI licences | 1,040 euros (50 × Premium per user) | ± 65 dollars (5 × Pro); viewers free | 1,040 euros (50 × Premium per user) | 1,040 euros (50 × Premium per user) |
| Total | ± 2,465 euros | ± 5,100 dollars | ± 2,000 to 3,000 dollars | ± 2,000 to 3,000 dollars |
| Verdict | The worked example | Well over half more expensive: a 10 GB model needs F64 and the capacity follows office hours | Comparable | Comparable |
| What you build and maintain yourself | None of the above | Loading, history, AFAS and Exact connectors, monitoring | Everything: loading, history, connectors, orchestration, monitoring | Everything: loading, history, connectors, orchestration, monitoring |
Manageability: who does the work?
The cost above is the vendor's bill. The other bill is your own team's: who builds the loading, who absorbs a changed source, who checks in the morning whether everything went well. The table sets side by side per setup what the engine does and what you do, for the eight situations that take the most time in practice. The cells for Fabric, Databricks and Snowflake come from their own documentation on 6 October 2026.
Databricks and Snowflake do supply real building blocks for this: managed connectors, automatic table maintenance, history in declarative pipelines, alerts on failed tasks. The difference with Yres is that you assemble and monitor those building blocks per source, that most of them only work when the source delivers a change stream, and that none of them knows the Dutch packages.
Two environments are part of that. The Advanced package brings a separate development and production environment, each with its own database, Data Factory, storage and key vault. You build only in development. Every edit there is booked automatically by Yres under a change in a project; on release Yres locks the change and checks that it does not rely on work that has not been released yet. Installing on production is then a single action: Yres rolls out the database structure, republishes the pipelines and translates the names per environment. The object history shows per table, view or procedure how it changed across changes, with two versions side by side. On the other three you set up that deployment process yourself with Git and pipelines; the knowledge base describes the Yres change process step by step.
| Situation | Yres on Azure | Microsoft Fabric | Databricks | Snowflake |
|---|---|---|---|---|
| Connecting a new source | Connect the source in the admin screen, pick tables and load type; the engine creates the pipelines | A pipeline, Copy job or dataflow per source; Copy job loads incrementally on a watermark or via change data capture. No AFAS connector | Lakeflow Connect has managed connectors for SQL Server, PostgreSQL, Salesforce, Workday and SharePoint among others; other sources through your own pipeline or an ELT tool. No AFAS or Exact | Openflow has managed connectors for SQL Server, Oracle, Salesforce, Workday and SharePoint among others; other sources through your own pipeline or an ELT tool. No AFAS or Exact |
| A source adds or removes a column | Yres re-reads the source structure, shows per table what differs and adjusts the tables in one action, keeping the history; only a renamed column the engine does not recognise | Copy job creates destination tables and maps columns; a changed structure you absorb in the mapping, the tables and the models | Auto Loader adds new columns, but the stream stops at that point and only restarts through a job; the Delta tables behind it and the models you adjust yourself | Schema evolution adds new columns during loading and leaves removed columns in place; the tables behind it and the models you adjust yourself |
| Keeping history: what was the value last month? | Standard per table, every row with a validity period | Copy job has SCD type 2 in preview, only for sources with change data capture; otherwise build yourself | AUTO CDC in declarative pipelines produces SCD type 2, provided the source delivers a change stream with a sequence column; otherwise build merge logic yourself | Build yourself with streams, tasks or dynamic tables; Time Travel keeps old versions temporarily, but is not a history table |
| Nightly maintenance: indexes, statistics, log retention, scaling up and down | Built-in maintenance pipelines; the database scales around the load and back afterwards | The warehouse creates and refreshes statistics itself; Lakehouse tables you optimise yourself; the capacity stays on during office hours | Predictive optimization runs OPTIMIZE, VACUUM and ANALYZE itself for managed Unity Catalog tables, on serverless compute billed separately; cluster policies you set up yourself | Storage maintenance is automatic; warehouses stop by themselves after idle time, the size you choose yourself |
| Bringing a change to production | Release and install the change from the screen; dependencies and versions are checked | Deployment pipelines and Git integration per workspace; Copy job supports CI/CD with a variable library per environment | Asset Bundles and Git folders; deployment to production you set up with your own CI/CD | Git integration fetches scripts and runs them; a deployment process between development and production you build with external tooling |
| Platform upgrades | Roll out a new version from the admin screen, first on development and then on production; your data, your history and what you built yourself stay in place | Microsoft updates Fabric continuously; your own pipelines and code you adjust yourself | Runtime versions per cluster you pick and test yourself; serverless compute is updated automatically | Snowflake rolls out updates itself; behaviour changes come in bundles you can enable in advance to test |
| The morning after a failed load | Monitoring screen with the status per source and table, checks on the configuration, roll back a load | Monitoring hub per run; email on a failed scheduled run; recovery per pipeline | Job history with notifications; a failed job you recover with a repair run that re-runs only the failed tasks | Task history; alerts on the event table send an email or webhook; recovery you set up yourself |
| Which team you need | A BI developer or analyst who knows the sources and the models | A Fabric engineer plus BI | A data engineer with Spark and Python plus BI | A data engineer with SQL and ELT plus BI |
Which functions each setup brings
On the major functions the four setups differ less in what is ultimately possible than in what you have to build yourself to get there. 'Included' means the function works without you building anything for it; 'build yourself' means the platform supplies the building blocks and you supply the solution.
| Function | Yres on Azure | Microsoft Fabric | Databricks | Snowflake |
|---|---|---|---|---|
| Relational SQL processing | Azure SQL, set-based on the changes only | Warehouse or the SQL endpoint of a Lakehouse | Spark SQL and Databricks SQL | Virtual warehouses that start and stop by themselves |
| Data warehouse automation: loading sources, history, load types, monitoring | Included | Build yourself | Build yourself | Build yourself |
| Connectors for Dutch packages (AFAS, Exact Online) and SAP | Own connectors, official partner | No AFAS connector; Exact only through Exact's own Premium connector | None; an external ELT tool or your own code | None; an external ELT tool or your own code |
| Modelling and semantic layer | Power BI import model; Direct Lake only with a Fabric capacity next to it | Power BI import model or Direct Lake; Direct Lake needs a capacity and does not work on Premium per user | Power BI import model or DirectQuery on a SQL warehouse | Power BI import model or DirectQuery on a warehouse |
| Reporting and licences | Power BI, Premium per user | Power BI, Pro per viewer below F64, free viewers from F64 | Power BI, Premium per user | Power BI, Premium per user |
| Machine learning and AI | Optional: Fabric F8, Databricks or Snowflake next to the data lake, on only when there is work; the Parquet files are open, so you pick the platform per purpose | Notebooks and Data Science on the same capacity | The strongest offering: MLflow, Mosaic AI, GPU clusters | Snowpark and Cortex |
Up to how many users and how much data does this stay cheaper?
The number of users is the first direction of growth. Every extra user costs 20.80 euros in licence; the platform itself does not change. Fabric F64 is flat, about 5,100 dollars a month with a reservation, however many viewers there are. The break-even therefore sits around 175 users. Above that you put only the reporting layer on an F64 capacity, on top of the Yres cost: viewers become free, builders keep Pro, the database and the Parquet files stay where they are. Yres itself stays at 674 euros, however many users are added.
The second direction is the amount of data. The Standard tier of Azure SQL, in which the example runs, goes up to one terabyte per database. That is a terabyte of compressed data: Yres stores the history tables column-oriented, for which Microsoft quotes up to tenfold compression, so that terabyte corresponds to a multiple in source data. Anyone who archives older history to the Parquet files in the data lake stays well under it, while the full history remains available through a combined view. Above that terabyte the setup becomes custom work; that is where this worked example stops.
The third is the work per day. The advantage comes from the load window. With the load of a few hours from the example, the database still sits on the base level more than half the time at one to four refreshes a day. Anyone refreshing every hour fills the day and pays nearly the high level; then a fixed capacity or a warehouse that stops by itself costs the same. If a nightly load does not fit its window even on the highest Standard level, that is the moment for Spark next to the data lake.
| What grows | What happens in the Yres setup | Break-even |
|---|---|---|
| Number of users | 20.80 euros per extra user; the platform does not change | Around 175 users: an F64 capacity for the reporting layer on top of the Yres cost, viewers free, cost flat |
| Amount of data | Up to 1 TB of compressed data in the Standard tier, with automatic scaling; archive older history to Parquet | Above 1 TB of compressed data: custom work, outside this worked example |
| Refreshes per day | One to four a day: database on the base level more than half the time | Every hour: the load window fills the day and the advantage disappears |
| Weight of the processing | Set-based SQL on the changes only | If the nightly load does not fit the window even on the highest Standard level: add Spark on the same Parquet files |
| Demand for machine learning | F8 or Databricks next to the data lake, on when there is work | Daily use by a team: a fixed capacity or a Databricks workspace of its own, the rest stays |
What the setup suits and what you put next to it
The setup is made for batch processing with a predictable load window in which only the changes are fetched each night, with reporting from import models. What falls outside that is not a limitation of Yres as a tool but a choice about the environment: you put something next to it, on the same Parquet files in your own data lake.
- Limit: the SQL database is the engine. Anyone who fully reprocesses a terabyte every night instead of only the changes hits the largest level and loses the benefit of scaling down
- Advice: Spark, machine learning at scale or streaming go next to the Yres data lake, in Fabric or Databricks, directly on the same Parquet files; you switch the capacity off when the work is done
- Advice: an F8 next to your Premium-per-user licences for small machine-learning scenarios and notebooks; you connect the Azure storage directly in OneLake with a shortcut, so no copy of the data is needed
- Advice: a Premium-per-user licence for everyone. With it, import models up to a hundred gigabytes run without a capacity and you do not have to track per workspace who may open which report
Appendix: how the amounts were calculated
On Fabric the memory per semantic model decides which capacity you need: ten gigabytes on F32, twenty-five on F64. Because a model needs well over twice its size during a refresh, a ten-gigabyte import model in practice only refreshes on F64. That capacity costs 0.18 dollars per capacity unit per hour: about 8,400 dollars a month without a reservation and 5,000 with a one-year reservation. From F64 the fifty users view with a free licence; the five builders keep Pro. Pausing is only possible outside office hours and not with a reservation. A development workspace runs on the same capacity; a separate F8 for development would cost about 620 dollars a month with a reservation.
For Databricks we count a job cluster of two mid-range nodes loading three hours a night. For the Power BI refresh and ad-hoc questions a serverless SQL warehouse of size Small runs three hours a day. Add a development cluster of sixty hours a month, storage and an ETL tool for bringing in the sources: Data Factory as in the Yres setup, about 150 dollars, or an ELT service that charges per connector. The load flows for AFAS, Exact or SAP you build in it yourself. Together that is about 1,300 dollars a month, plus fifty Premium-per-user licences, because a ten-gigabyte import model needs them here too.
On Snowflake a Small warehouse runs three hours a night for the load, an X-Small four hours a day for the refresh and ad-hoc questions and a Small sixty hours a month for development. Together that is 420 credits at 2.60 dollars in the Standard edition for West Europe; the Enterprise edition charges one and a half times as much. With 23 dollars per terabyte of storage and the same ETL tool that comes to about 1,300 dollars a month in the Standard edition and about 1,800 in Enterprise, plus fifty Premium-per-user licences.
The report users themselves cost no compute in any of the four columns, because they read from import models in Power BI; only the daily refresh touches the warehouse. Anyone choosing DirectQuery on Databricks or Snowflake lets the warehouse run along during office hours: about 600 dollars a month extra on Databricks, about 570 on Snowflake. In the Yres setup reporting does not touch the database, not even with 150 users.
The Yres column contains a full development and production environment with the change process between them. For Databricks and Snowflake the development hours sit in the assumptions, but a second full environment with its own load flows and the setup of the deployment process come on top, in time more than in money. All amounts apply to this scenario: if the data grows, all four columns grow with it, on Fabric possibly to a second F64, on Databricks and Snowflake to more cluster hours and credits, in the Yres setup to a higher database level. The sums for Databricks and Snowflake are estimates; ask them for a calculation of your own.
| Per month, fifty users | Yres on Azure | Fabric F64 | Databricks | Snowflake |
|---|---|---|---|---|
| Processing, storage and orchestration | ± 750 euros (Azure, two environments) | ± 5,000 dollars with a one-year reservation (± 8,400 without), plus ± 25 dollars OneLake | ± 1,150 dollars | ± 1,100 dollars Standard; ± 1,650 Enterprise |
| Data warehouse automation and two environments | 674 euros (Yres Advanced) | Build yourself; development workspace on the same capacity | Build yourself; development hours counted, second environment yourself | Build yourself; development hours counted, second environment yourself |
| ETL tool and load flows per source | Included: Data Factory sits in the 750 euros, the flows come from Yres | Data Factory in the capacity; flows built yourself | ± 150 dollars Data Factory or an ELT service; flows built yourself | ± 150 dollars Data Factory or an ELT service; flows built yourself |
| Power BI licences | 1,040 euros (50 × PPU) | ± 65 dollars (5 × Pro); viewers free | 1,040 euros (50 × PPU) | 1,040 euros (50 × PPU) |
| Compute for report users | None: import models run in Power BI | In the capacity | None with import models; with DirectQuery ± 600 dollars extra | None with import models; with DirectQuery ± 570 dollars extra |
| Optional: machine learning and analyses | ± 60 dollars (F8, forty hours) | On the same capacity | Extra clusters as used | Snowpark on extra credits |
| Total | ± 2,465 euros | ± 5,100 dollars (± 8,500 without reservation) | ± 2,400 dollars | ± 2,400 dollars Standard; ± 2,950 Enterprise |
Frequently asked questions
What does a data platform for fifty users cost per month?
In the worked example about 2,465 euros: 750 euros of Azure resources for a development and a production environment, 674 euros for Yres Advanced and 1,040 euros for fifty Power BI Premium-per-user licences. A small Fabric capacity for analyses comes on top as an option for about 60 dollars.
Why not simply take Fabric?
A ten-gigabyte import model needs well over twice its size in memory during a refresh and therefore ends up on F64, about 5,000 dollars a month with a reservation. That capacity must be on while people open reports. Putting Fabric next to the Yres setup for analyses or machine learning does work, on the same Parquet files.
Does Direct Lake also work with Premium per user?
No. Microsoft lists Direct Lake for Fabric capacities only; on Premium per user you work with import models. A ten-gigabyte import model that refreshes once a day runs in this setup without a capacity. If you later put a capacity next to it, you fold the Parquet files into Delta with a notebook.
Is Databricks or Snowflake not cheaper?
The monthly amounts are of the same order, with the Yres setup at the low end. The difference sits in what you build and manage yourself: loading AFAS or Exact, the history, the change process and the monitoring. One day a week of a data engineer costs more than the whole Yres licence.
Up to how many users does this setup stay cheaper?
Up to about 175 users on Premium per user. Above that you put the reporting layer on an F64 capacity, which makes viewers free and the cost flat; the database and the Parquet files stay where they are. The architecture therefore does not change with the number of users.
Up to how much data does this setup work?
Up to one terabyte of compressed data in the Standard tier of Azure SQL, in which Yres puts the database high around the load and back afterwards. Because the history tables are stored column-oriented, that terabyte stands for a multiple in source data. Archiving older history to Parquet keeps the database small.
Why two environments?
Because you then never build directly in production. You connect sources and change tables in the development environment, Yres books that automatically under a change and brings it to production as a locked package, including the pipelines and the translated names per environment. The object history then shows what changed per object.
Is my data locked into Power BI or into Yres?
No. The history sits as Parquet files in your own data lake and the database runs in your own Azure subscription. Another reporting tool, Python, Fabric, Databricks or a SQL engine reads the same files without conversion.
Further reading
- Calculator: what does the same Azure environment cost with and without Yres?
- Yres and Microsoft Fabric: competitor or combination?
- Yres pricing and packages
- Yres or building it yourself on Azure
- Knowledge base: the change process from development to production
- Knowledge base: history and the object history
- Knowledge base: the lake feed (Parquet change feed)
- Knowledge base: Azure architecture and the scaling model
