Join us for an expert-led overview of the tools and concepts you'll need to pass exam PL-300. The first session starts on June 11th. See you there!
Get registeredPower BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.
Hello everybody,
I'm trying to set up an incremental refresh in Dataflows (PPU).
It let's me do all the set up steps correctly
But the refreshing time is way to long for 7 days of data:
I am using the Microsoft Business Central Connector for BC Cloud, am seeing the same behaviour if I use the odata connector.
It seems like the date filter (rangeStart, rangeEnd) isn't working and Power BI is always trying to fetch all data.
Thanks a lot!
Hi @Powerwoman ,
This happens when query folding is broken.
If your connector (e.g., Dynamics365BusinessCentral.ApiContentsWithOptions) doesn’t support folding beyond certain steps, filters are applied after fetching all data, which defeats the purpose of incremental refresh.
Here is an recommended approach to solve the issue:
1.Use OData.Feed() connector instead of ApiContentsWithOptions.
This allows query folding to the Business Central source.
Folding is necessary for RangeStart and RangeEnd filters to be effective.
2.Apply date filters directly using RangeStart and RangeEnd:
3.Avoid transformations before the filter step that could break query folding.
How to confirm whether it works or not:
Right-click the filtering step in Power Query and check if “View Native Query” is enabled.
If it’s greyed out, folding is broken and incremental refresh won’t behave correctly.
If this post helps, then please consider Accepting as solution to help the other members find it more quickly.
Thank you.
Hi @Powerwoman
Thank you for reaching out to Microsoft Fabric Community.
Your current setup in the incremental refresh UI looks correct. However, due to a lack of query folding, Power BI ends up downloading all rows instead of just the incremental range.
To fix this, you need to explicitly apply the RangeStart and RangeEnd filters in Power Query (M code) and ensure that query folding is happening. Without folding, the filters are not pushed down to Business Central, and incremental refresh won’t behave as expected.
If this post helps, then please consider Accepting as solution to help the other members find it more quickly, don't forget to give a "Kudos" – I’d truly appreciate it!
Thank you.
Dear @v-venuppu ,
thanks for coming back to me so quickly.
RangeStart and RangeEnd are included in the M Code:
let
Quelle = Dynamics365BusinessCentral.ApiContentsWithOptions("TNG-Production", null, null, [UseReadOnlyReplica = true, Timeout = null, ODataMaxPageSize = null, AcceptLanguage = "de-de"]),
#"Navigation 1" = Quelle{[Name = "Company"]}[Data],
#"Navigation 2" = #"Navigation 1"{[Name = "Advanced"]}[Data],
#"Navigation 3" = #"Navigation 2"{[Name = "powerBIConnector/v1.0"]}[Data],
#"Navigation 4" = #"Navigation 3"{[Name = "glEntries", Signature = "table"]}[Data],
#"Geänderter Spaltentyp" = Table.TransformColumnTypes(#"Navigation 4", {{"systemModifiedAt", type datetime}}),
#"glEntries-73797374656D4D6F6469666965644174-autogenerated_for_incremental_refresh" = Table.SelectRows(#"Geänderter Spaltentyp", each DateTime.From([systemModifiedAt]) >= RangeStart and DateTime.From([systemModifiedAt]) < RangeEnd)
in
#"glEntries-73797374656D4D6F6469666965644174-autogenerated_for_incremental_refresh"
I also tried to put the filters in the OData.Feed logic but then it wouldn't let me safe the dataflow saying this is a dynamic source.