
When developing reports in Microsoft Dynamics 365 Business Central, performance and scalability are crucial—especially in cloud environments where system efficiency impacts everything from responsiveness to cost. One often-overlooked feature that can significantly enhance report performance is the DataAccessIntent property.
What Is DataAccessIntent?
The DataAccessIntent property is available on report objects in AL. It specifies how a report should access the database—whether it’s read-only or read-write.
The property supports two values:
- DataAccessIntent = ReadOnly
- DataAccessIntent = ReadWrite
ReadOnly
When you set DataAccessIntent = ReadOnly, you are explicitly telling the platform that your report only needs to read data from the database and will not perform any write operations.
Why is this important?
- Better Performance: In Business Central SaaS, reports marked as ReadOnly can run on read-only replicas of the database. This reduces the load on the primary (read-write) database and enhances scalability.
- Improved Report Execution Time: Since queries are routed to optimized replicas, report rendering can be faster and more efficient.
ReadWrite
If your report needs to modify data during execution—a rare scenario—you should use DataAccessIntent = ReadWrite. This forces the report to run on the primary database.
However, you should avoid using ReadWrite unless absolutely necessary because:
- It eliminates the benefit of using read replicas.
- It may degrade performance, especially under high concurrency.
When to Use Each
| Scenario | Use ReadOnly? | Use ReadWrite? |
|---|---|---|
| Standard data listing/reporting | ✅ | ❌ |
| Reports that update records | ❌ | ✅ |
| Diagnostic or audit reports | ✅ | ❌ |
How to Set DataAccessIntent in AL
report 50100 "Customer Balance Report"
{
DataAccessIntent = ReadOnly;
dataset
{
dataitem(Customer; Customer)
{
column(Name; Name) { }
column(Balance; "Balance (LCY)") { }
}
}
layout
{
// Define RDLC or Word layout
}
}
By default, if you don’t specify the property, it behaves as ReadWrite. So it’s a good practice to explicitly set it to ReadOnly when applicable.
Important Considerations
- The
DataAccessIntentproperty is only a hint to the Business Central server. The server may not always be able to use a read-only replica, even if the property is set toReadOnly. - If a report with
DataAccessIntentset toReadOnlyattempts to modify data, a runtime error will occur. - The
DataAccessIntentproperty can be overridden by the user through the “Database Access Intent List” page in Business Central.
In short: if your report doesn’t write data, use DataAccessIntent = ReadOnly. It’s an easy win for performance and best practice compliance.
Stay tuned for more….




