Forum Discussion
Getting "Failed to execute 'ariaNotify' on 'Document': Failed to read the 'priority' property from '
- Anonymous11 months ago
Hi PeterGoertz ,
Thanks for confirming. Since the flow runs fine after ignoring the design-time error, it’s indeed pointing more towards a front-end regression than a data issue. To help Microsoft prioritize a fix, I’d still recommend raising a support ticket and attaching your session ID. That way, the product team can trace the exact failure and speed up resolution.
Meanwhile, glad to hear your workflow is executing successfully in spite of the popup. Hopefully, the engineering team rolls out a quick patch soon.
Thanks,
Akhil.
Solution: AriaNotify Error in Fabric Dataflows
The Error
If you're encountering this error in Fabric Dataflows:
This is caused by how Power Query handles streaming data transformations and triggers UI progress notifications.
Root Cause
The error occurs when performing column transformations on streaming data from API sources (like Dynamics 365 Business Central, Dataverse, REST APIs, etc.).
When you transform columns on streaming data:
- Data flows incrementally from the API
- Each chunk triggers UI progress updates
- The UI's accessibility notification system gets called repeatedly
- A bug in the FluentUI component tries to set notification priority to "none" (invalid value)
- The error is thrown and can cause the dataflow to fail
The Solution: Buffer Before Transform
The fix is simple: buffer your data before performing transformations.
❌ Problem Pattern (Causes Error)
let
Source = Dynamics365BusinessCentral.ApiContentsWithOptions(...),
Navigation_1 = Source{[Name = "Environment"]}[Data],
Navigation_2 = Navigation_1{[Name = "Advanced"]}[Data],
Navigation_3 = Navigation_2{[Name = "api/v2.0"]}[Data],
Navigation_4 = Navigation_3{[Name = "entities", Signature = "table"]}[Data],
// ❌ Transforming streaming data - triggers the bug
#"Changed column type" = Table.TransformColumnTypes(
Navigation_4,
{
{"modifiedAt", type datetime},
{"createdAt", type datetime},
{"status", type text}
}
),
#"Replaced values" = Table.ReplaceValue(
#"Changed column type",
"_x0020_",
" ",
Replacer.ReplaceText,
{"status"}
)
in
#"Replaced values"✅ Solution Pattern (Prevents Error)
let
Source = Dynamics365BusinessCentral.ApiContentsWithOptions(...),
Navigation_1 = Source{[Name = "Environment"]}[Data],
Navigation_2 = Navigation_1{[Name = "Advanced"]}[Data],
Navigation_3 = Navigation_2{[Name = "api/v2.0"]}[Data],
Navigation_4 = Navigation_3{[Name = "entities", Signature = "table"]}[Data],
// ✅ Buffer the data FIRST - load completely into memory
Buffer_Data = Table.Buffer(Navigation_4),
// ✅ Now transform the buffered data - no streaming, no UI bug
#"Changed column type" = Table.TransformColumnTypes(
Buffer_Data,
{
{"modifiedAt", type datetime},
{"createdAt", type datetime},
{"status", type text}
}
),
#"Replaced values" = Table.ReplaceValue(
#"Changed column type",
"_x0020_",
" ",
Replacer.ReplaceText,
{"status"}
)
in
#"Replaced values"Why This Works
Streaming vs Buffered Execution
Without Buffer (Streaming):
- API data flows incrementally (chunk by chunk)
- Each transformation evaluates lazily
- Multiple UI progress notifications fire
- Buggy aria notification code gets triggered
- Error occurs
With Buffer (Eager Loading):
- Table.Buffer() forces complete data load into memory
- Subsequent transformations work on in-memory table
- Single evaluation, minimal UI updates
- Buggy code path is avoided
- No error
Why You Should Buffer Anyway (Beyond Bug Fix)
Even without this bug, buffering before transformations is a best practice for several reasons:
1. Performance Optimization
- Prevents repeated API calls: Without buffering, each downstream operation can trigger re-evaluation and re-fetch from the API
- Faster transformations: Column operations on in-memory data are much faster than streaming operations
- Reduced API throttling: Single API call instead of potential multiple evaluations
2. Predictable Refresh Behavior
- Consistent data snapshots: All transformations work on the same dataset
- Avoid partial refresh issues: No risk of data changing mid-transformation
- Better error handling: Failures are easier to diagnose
3. Lower API Costs
- Some APIs charge per call or have rate limits
- Buffering ensures you only call the API once per refresh
- Prevents accidental duplicate calls from query folding failures
4. Improved Dataflow Stability
- Reduces memory pressure from streaming operations
- More predictable resource usage
- Fewer timeout issues on large datasets
When to Buffer
✅ Buffer These Sources
- Dynamics 365 Business Central API
- Dataverse / Power Platform APIs
- REST API calls
- OData feeds
- Any API-based connector
- Web.Contents() calls
- SharePoint lists (when doing complex transformations)
⚠️ Consider Carefully
- Large datasets (>1GB): Buffering loads everything into memory - ensure sufficient capacity
- Direct Lake/Warehouse queries: May prevent query folding optimization
- Incremental refresh sources: Buffer after filtering to refresh window
❌ Don't Buffer
- File sources already in Lakehouse/OneLake (already optimized)
- When query folding to SQL databases is critical
- Very large datasets where memory is limited
Best Practice Pattern
Here's a complete best-practice pattern for API-based dataflows:
let
// 1. Connect to API
Source = Dynamics365BusinessCentral.ApiContentsWithOptions(
"PROD",
null,
null,
[UseReadOnlyReplica = true]
),
// 2. Navigate to your table
Navigation_1 = Source{[Name = "PROD-ENV"]}[Data],
Navigation_2 = Navigation_1{[Name = "Advanced"]}[Data],
Navigation_3 = Navigation_2{[Name = "company/v2.0"]}[Data],
Navigation_4 = Navigation_3{[Name = "glEntries", Signature = "table"]}[Data],
// 3. Remove unnecessary columns BEFORE buffering (reduces memory)
Remove_Columns = Table.RemoveColumns(
Navigation_4,
{"dimensionValue", "glAccount"},
MissingField.Ignore
),
// 4. BUFFER - this is the key step
Buffer_Data = Table.Buffer(Remove_Columns),
// 5. Now safely perform all transformations
Format_Columns = Table.TransformColumnTypes(
Buffer_Data,
{
{"documentType", type text},
{"postingDate", type datetime},
{"amount", type number}
},
"en-US" // Use locale for date parsing
),
// 6. Additional transformations (replace, merge, etc.)
Decode_Text = Table.TransformColumns(
Format_Columns,
{
{"documentType", each Text.Replace(_, "_x0020_", " "), type text},
{"description", each Text.Replace(_, "_x0020_", " "), type text}
}
)
in
Decode_TextAdditional Tips
Optimize Buffer Placement
- Remove columns first: Buffer after removing unnecessary columns to reduce memory usage
- Filter early: If possible, filter data before buffering (but after to refresh window for incremental)
- Buffer once: Don't buffer multiple times in the same query
Example: Incremental Refresh with Buffer
let
Source = API_Call,
Navigation = Navigate_To_Table,
// Filter to incremental window FIRST (query folding)
Filtered = Table.SelectRows(
Navigation,
each [modifiedAt] >= RangeStart and [modifiedAt] < RangeEnd
),
// NOW buffer the filtered data
Buffer_Data = Table.Buffer(Filtered),
// Then transform
Transformed = Table.TransformColumnTypes(Buffer_Data, ...)
in
TransformedSummary
The Fix:
- Add Buffer_Data = Table.Buffer(YourTable) before any column transformations
- This prevents the AriaNotify error by changing execution from streaming to eager
The Benefits:
- ✅ Avoids the UI bug
- ✅ Improves performance
- ✅ Reduces API calls
- ✅ More stable dataflow refreshes
- ✅ Better resource utilization
When to Use:
- All API-based data sources
- Before Table.TransformColumnTypes()
- Before Table.TransformColumns()
- Before Table.ReplaceValue()
- Before complex transformations
This is a best practice that solves the immediate bug AND improves your dataflow quality overall.
References
Tested and verified with Dynamics 365 Business Central API, Dataverse, and REST API sources in Microsoft Fabric.
- PeterGoertz10 months agoFrequent Visitor
Hey Keith-Oak, thank you for that very detailed tip. I'll try that. But as far as I remeber i fetched data from a lakehouse in another workspace and the error occured. As far as I understood I don't need to buffer in case of a lakehouse ?
I'll try and come back.
- Alven10 months ago
Microsoft Employee
Hi keith-oak ,
please note that the root cause you described above is not correct given the issue was not linked to the stream of data.
As I previously mentioned, the error reported by PeterGoertz was due to a UI regression that happened only when the user added a default destination or a destination for a query: this caused an aria notification to be sent using a priority property which was not supported anymore by recent browsers, and caused the error to be thrown. The issue is now fixed in all regions.
Regards,
Alessandro