Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
6 years ago
Solved

Incremental refresh not working

Hello everyone, I'm stumped on getting incremental refreshes to work properly. I setup a report to use incremental refreshes following this article https://docs.microsoft.com/en-us/power-bi/service-p...
  • v-diye-msft's avatar
    6 years ago

    Hi Anonymous 

     

    Please kindly refer to this article:

    https://powerbi.microsoft.com/en-us/blog/incremental-refresh-query-folding/ 

    One important consideration to keep in mind is that incremental refresh works best with data sources that support query folding. Such data sources pass through some Power Query transformation steps, such as filtering and grouping, to the underlying data source to improve performance and avoid loading the entire dataset before filtering and grouping is applied. To determine if a specific step is “folded”, right-click the step, such as Filtered Rows, in the Applied Steps pane and observe if the “View Native Query” is enabled.

     

    Although Microsoft doesn’t have an official list of data sources that support query folding and what steps are folded, typically relational data sources and data sources that can handle the SQL WHERE clause support query folding. Excel and text files do not. It’s important to check query folding because it the data source doesn’t support it, Power BI Desktop currently doesn’t prevent incremental refresh but it will load all the data before the filter is applied. Specifically, the query mashup (M) engine will apply the filter as it reads the rows before it gets loaded into the partitions. You might be able to mitigate this performance issue with non-foldable sources by applying the RangeStart/RangeEnd filter when the initial query is sent to the data source. For example, Dynamics Online supports a $filter clause that will work with incremental refresh:

    = OData.Feed(“<endpoint url>/sales?$filter=CreatedDate ge ” & Date.ToText(RangeStart) & ” and CreatedDate lt ” & Date.ToText(RangeEnd)”)