O25DE4: Change Tracking in Data Entities and latest changes
<for my reference only: O25 = October 2025; DE4 = with Data Entity Tag;>
If you’ve ever worked on data integrations or migrations in Dynamics 365 Finance & Operations (F&O), you know the pain of moving large datasets repeatedly. Enter Change Tracking - a feature that feels small but makes a huge difference.
What is Change Tracking?
Change Tracking lets you detect and export only what changed since the last sync, instead of dumping the entire dataset every time. This is used by Microsoft already in the out-of-the-box frameworks :
- Inbuild Integrations with Microsoft CRM or BI scenario. Could be used for integration towards external apps.
- Incremental data migration using DMF during cutovers.
- BYOD exports where performance matters.
Why It Exists
Without Change Tracking:
- Every export = full dataset.
- More time, more cost, more risk of throttling.
- Most costs (per transfer / transaction).
- Only inserts, updates, and (sometimes) deletes are exported.
- Faster, lighter, and easier to schedule.
- Lesser costs.
Types of Change Tracking in F&O
There are now two flavors of Change Tracking:
1. Classic Change Tracking (Entity-level)
Configured in Data Management workspace for BYOD and DMF scenarios.
- Options:
- None → No tracking.
- Primary Table → Tracks changes only in the root table.
- Entire Entity → Tracks changes across all tables in the entity.
- Custom Query → Tracks changes based on a developer-defined query (great for complex joins).
- Use cases: BYOD incremental push, DMF exports.
- Limitations: Doesn’t support row-level versioning; deletes tracked only for BYOD and Dataverse virtual entities.
2. Row Version Change Tracking (Modern approach)
Generally Available in 10.0.34+, prerequisite / required for the several newer functionalities. Also a lot more important information is in MS Learn site: https://learn.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/data-entities/rowversion-change-track
- prereq for Data archival
- prereq for Synapse integration
- prereq for Mobile offline
- prereq for Relevance search
- Future Dataverse-based sync frameworks.
How it works:
- Adds a
rowversion
column to tables. - SQL Server increments a counter for every insert/update.
- Changes detected by comparing previous vs current rowversion.
- Prerequisite: Enable Sql row version change tracking configuration key in License configuration (maintenance mode required).
Important:
- Row version tracking does not allow custom queries. Entities using custom queries must be refactored.
- Direct SQL DML statements that try to update
rowversion
will break—test in sandbox first.
Performance Considerations
- Change Tracking adds overhead—don’t enable it on every entity “just in case.”
- For large transactional tables (e.g.,
InventTrans
), consider:- Primary Table option for minimal churn.
- Custom Query for classic CT (not rowversion).
- Monitor batch jobs and SQL performance after enabling.
How to Enable Change Tracking
Classic CT (BYOD/DMF)
- Go to Data Management → Data Entities.
- Select your entity → Change Tracking.
- Choose:
- Primary Table
- Entire Entity
- Custom Query
- Save and publish.
Row Version CT
- Enable Sql row version change tracking in License configuration (maintenance mode).
- Set Allow Row Version Change Tracking = Yes on tables/entities.
- Sync database (adds
rowversion
column). - Validate in Data Management and Power Platform integration.
Using Change Tracking in Data Projects
- In Export projects, choose Incremental Push.
- First run exports all records; subsequent runs export only changes.
- Perfect for BYOD or scheduled DMF jobs.
New in 2025
- Fabric Link & Synapse Link require row version CT for incremental sync.
- Manage Tables in Fabric Link lets you choose which tables to sync—only those with CT enabled will appear.
- Deletes now tracked for BYOD and Dataverse virtual entities (root table only).
Wrap-Up
Change Tracking is one of those features that quietly powers big things:
- Faster integrations.
- Smarter exports.
- Future-ready for Fabric and Dataverse sync.
If you’re enabling it:
- Pick the right type (classic vs rowversion).
- Test in sandbox.
- Keep performance in mind.
Lycka till / Good luck.
This was originally posted here.
*This post is locked for comments