Solution overview
Historical Dataverse data is moved out of premium Dataverse storage into lower-cost Azure storage without disappearing. Users can continue finding and opening archived records in Power Apps, while analysts can query the archive with SQL.
Lower storage cost
Ageing tables and audit history move from premium Dataverse capacity to Azure Data Lake Storage Gen2.
Nothing is hidden
Archived records surface through Virtual Tables in Power Apps and through Synapse SQL.
Built for audit
Business tables and audit logs are archived together in open formats, including CSV, blob, and Parquet.
Architecture at a glance
- Source: Microsoft DataverseBusiness tables, audit logs, and selected historical or inactive records.
- Archival engineA Scheduler Job triggers the Export Function App, which reads and converts selected records.
- Archive: Azure Data Lake Storage Gen2Archived data is stored as CSV files, Parquet files, and blobs.
- Query and accessSynapse Analytics provides SQL queries over the lake; an Access Function serves records on demand.
- Consumption: Power AppsVirtual Tables surface archived records in the apps users already know.
Export path
The Scheduler Job starts the Export Function App, which reads Dataverse and writes CSV, Parquet, and blob files to the lake.
Read-back path
Synapse SQL and the Access Function retrieve archived data for Virtual Tables and Power Apps.
What moves and what stays live
Historical table records, audit logs, and attachments are archival candidates. Current, active records remain in Dataverse.
Components and responsibilities
Two Azure Function Apps are deliberately separated: the Export Function writes to the archive, and the Access Function reads archived data back. This separation supports straightforward scheduling, scaling, and troubleshooting.
| Component | Role | Details |
|---|---|---|
| Microsoft Dataverse | Source system | Holds business tables and audit logs; historical and inactive records are archival candidates. |
| Scheduler Job | Trigger | Starts the Export Module on a defined schedule so archival runs predictably and off-peak. |
| Export Function App | Archival engine | Reads Dataverse records and writes CSV, blob, and Parquet files to the lake. |
| Azure Data Lake Storage Gen2 | Archive storage | Provides a scalable, lower-cost home for archived data in open formats. |
| Azure Synapse Analytics | Query layer | Runs SQL queries directly over lake files for reporting, analysis, and the access layer. |
| Access Function App | Read-back service | Retrieves archived records from the lake or Synapse and supplies them to Virtual Tables on demand. |
| Dataverse Virtual Tables | Transparent presentation | Present archived data in Dataverse and Power Apps as if it had not left. |
| Power Apps | User experience | Lets business users search, open, and work with archived records in their existing apps. |
The flow, step by step
- Schedule fires. The Scheduler Job starts the Export Module in the Export Function App.
- Records are read. The export reads the selected Dataverse tables and audit data.
- Records are converted. Data is written to Data Lake Storage Gen2 as CSV, blob, and Parquet files.
- Data becomes queryable. Synapse Analytics exposes SQL queries over the lake files.
- Users see it again. The Access Function feeds Virtual Tables, and Power Apps presents the archived records transparently.
Open formats and access paths
The archive uses formats selected for how the data will be used, keeping it readable by standard Azure tools.
Parquet files
Compressed, columnar files for table data, efficient Synapse SQL scans, reporting, and analytics over large historical volumes.
CSV files
Plain, widely readable exports that are straightforward to inspect, exchange, and reload.
Blob files
File and attachment content preserved alongside record data so documents remain associated with their history.
In the app
Virtual Tables in Power Apps let users open archived records in the apps they already use.
With SQL
Synapse Analytics queries Parquet and CSV files in the lake for reporting, compliance extracts, and investigation.
In the lake
Archived files remain in open formats in Data Lake Storage Gen2, under the organisation's control.
Design principles
- Cost follows age. Rarely accessed data belongs in a lower-cost storage tier rather than premium Dataverse storage.
- Archival is not deletion. Tables and audit logs move together so records retain their history and attachments.
- No new user behaviour. Archived data is accessed through Virtual Tables and familiar Power Apps.
- Serverless where it counts. Function Apps and Synapse SQL scale with archival and query workloads.
- Standard Azure building blocks. The design uses Dataverse, Functions, Data Lake Storage Gen2, and Synapse.
Confirm schedules, retention rules, and table selection with the implementation team before deployment.
Dataverse Data Backup & Archival Solution
Archived Dataverse data, still at your fingertips
Historical Dataverse data is offloaded to low-cost Azure Data Lake storage — cutting Dataverse storage costs — while staying transparently accessible in Power Apps, queryable in Synapse SQL, and retrievable through a REST API. Every screen below is from a real customer environment.
01 · The results
Cost dashboard — what the archive is saving
The solution's cost dashboard tracks every export command and the savings it generates, priced at Dataverse rates: table data at $40/GB and audit data at $10/GB. For this customer, two completed export commands moved 121.76 GB and 63,918,498 records out of Dataverse, for an estimated gain of $4,733.18 per month.
- ClickDimensions Tables — 60,000,000 records, 120,000 MB: $4,687.50/month in table-data savings.
- Audit-2018 — 3,918,498 records, 4,678 MB: $45.68/month in audit-data savings.
- Filters by data type, command status and export year, with a per-command cost breakdown.
02 · Transparent access — users
Backup Audit — archived history inside the model-driven app
Archived audit records come back through a Dataverse virtual table, surfaced as a Backup Audit tab directly on the contact record in the model-driven app. Users see the complete change history — changed column, old value, new value, who made the change and when — in context, next to the Summary and Details tabs, with no separate tool and no restore operation.
03 · Transparent access — users
Backup Email — an archived email, opened in Power Apps
The same virtual-table access works for archived table data, not just audit. This archived email — “Meeting Notes - Team Sync” — opens read-only in the model-driven app with its sender, recipients, full message body and a working attachment link. Archived records behave like records; the read-only banner is by design, because archive data is preserved, not edited.
04 · Analytics — analysts
Synapse SQL — the archive is fully queryable
For reporting and analysis, the archived data sits in a lake database (databackup_lh_prod) that Azure Synapse Analytics serves over SQL. This query reads the archived email table — with activityparty, audit and contact alongside it in the tree — and returns results in the Synapse Studio grid, ready for BI and ad-hoc analysis without touching Dataverse capacity.
05 · Open storage — no lock-in
Data Lake structure — open formats in ADLS Gen2
Underneath, the archive lives in Azure Data Lake Storage Gen2 (account databackuplhprodsa, container databackuplhprodfs), organised in folders such as attachment and description, with data landed as monthly files — for example email_2000-01.csv. Records are exported as CSV, blob and Parquet files, so the archive stays readable with standard tools: your data is never locked into a proprietary format.
06 · Programmatic access — developers
REST API — GetRecord via Postman
Developers get a third path back to the data: a REST API. This Postman call — POST api/service/v2/GetRecord — asks for one archived email by ID, naming the columns and blob columns to return, with attachments and activity parties loaded. The API answers 200 OK with the record as JSON: the email fields, its description blob content, and its activity parties — the same archived email shown in Power Apps above, retrieved programmatically.
Cut your Dataverse storage costs
CAPP Techs Inc. • info@capptechs.com • https://capptechs.com
Full story: Dataverse Data Backup & Archival Solution — LinkedIn article
Query it, browse it, call it
The same archive serves analysts, storage teams, and developers without a restore step or a separate portal.
SQL over the archive
The showcase describes querying archived email, audit, and contact data in Synapse Studio using standard SQL.
Open formats in your storage
Data Lake Storage Gen2 contains monthly files and attachment and description folders, without proprietary lock-in.
REST API for developers
A POST to api/service/v2/GetRecord returns an archived email record as JSON, including data, blob content, attachments, and activity parties.