Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Microsoft is giving away 50,000 FREE Microsoft Certification exam vouchers. Get Fabric certified for FREE! Learn more

Reply
rutujakadam_11
Frequent Visitor

Dynamic Parameters for Incremental Refresh

I have set up incremental refresh using Date/Time parametrs. I want the data to be refreshed on 1st of every current month to till date. While setting up the parameters for incremental refresh I have created 2 parameters- RangeStart & RangeEnd. RangeStart is defined  in a way that it should start on 1st date of month & RangeEnd to end on todate.  The details are Type:Date/Time, Suggested Value: Any value & Current Value: 11/1/2024 12:00:00 AM (RangeStart) & 11/28/2024 12:00:00 AM(RangeEnd). But can I set up these parameters dynamically, so as every month I won't have to set up the Current value manually. I want them to refresh the data from 1st of every current month to todate.

I have tried the Query option within parameter but that to requires a manual current Value, Also worked around the M-code to get the dates dynamically but the Incremental Refresh will only reference to Parameter and not the M-code so had to comment out that step. 
ParammeterParammeter

 

DataData

 


Following is the M-code but the dynamic logic is commented-out-

let
// Load your source data
Source = Excel.Workbook(File.Contents("C:\Users\snehalkumar.kadam\Downloads\Incremental Refresh.xlsx"), null, true),
#"Incremental Refresh_Sheet" = Source{[Item="Incremental Refresh",Kind="Sheet"]}[Data],
#"Promoted Headers" = Table.PromoteHeaders(#"Incremental Refresh_Sheet", [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"ID", Int64.Type}, {"Name", type text}, {"City", type text}, {"LastModified", type datetime}}),

// Dynamically calculate RangeStart (1st of the current month)
//RangeStart = Date.StartOfMonth(DateTime.LocalNow()),

// Dynamically calculate RangeEnd (current date and time)
//RangeEnd = DateTime.LocalNow(),

// Filter rows based on LastModified column
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each [LastModified] >= RangeStart and [LastModified] <= RangeEnd),

// Sort rows to get the latest record for each ID
#"Sorted Rows" = Table.Sort(#"Filtered Rows",{{"ID", Order.Ascending}, {"LastModified", Order.Descending}}),

// Group rows by ID and keep the latest record
#"Grouped Rows" = Table.Group(#"Sorted Rows", {"ID"}, {{"LatestRecord", each _, type table [ID=nullable number, Name=nullable text, City=nullable text, LastModified=nullable datetime]}}),
#"Expanded LatestRecord" = Table.ExpandTableColumn(#"Grouped Rows", "LatestRecord", {"Name", "City", "LastModified"}, {"LatestRecord.Name", "LatestRecord.City", "LatestRecord.LastModified"}),

// Rename columns for clarity
#"Renamed Columns" = Table.RenameColumns(#"Expanded LatestRecord",{{"LatestRecord.Name", "Name"}, {"LatestRecord.City", "City"}, {"LatestRecord.LastModified", "LastModified"}}),

// Remove duplicates by ID
#"Removed Duplicates" = Table.Distinct(#"Renamed Columns", {"ID"})
in
#"Removed Duplicates"

 

1 REPLY 1
FarhanJeelani
Super User
Super User

Hi @rutujakadam_11 ,

To set up dynamic incremental refresh for Power BI:

  1. Create Parameters: Define RangeStart and RangeEnd as Date/Time with dummy values (e.g., 11/1/2024 and 11/28/2024).

  2. Use Dynamic Logic in Query: Update your M-code to calculate dynamic dates but still filter using the parameters for incremental refresh:

    CurrentDate = DateTime.LocalNow(),
    DynamicRangeStart = Date.StartOfMonth(CurrentDate),
    DynamicRangeEnd = CurrentDate,
    #"Filtered Rows" = Table.SelectRows(#"Changed Type", each [LastModified] >= RangeStart and [LastModified] <= RangeEnd)
  3. Set Up Incremental Refresh: In Power BI Desktop, configure RangeStart and RangeEnd for incremental refresh and publish the report.

Power BI Service will use your dynamic logic to fetch data from the 1st of the current month to today during refresh.

 

Please mark this as solution if it helps. Appreciate Kudos.

Helpful resources

Announcements
Notebook Gallery Carousel1

NEW! Community Notebooks Gallery

Explore and share Fabric Notebooks to boost Power BI insights in the new community notebooks gallery.

April2025 Carousel

Fabric Community Update - April 2025

Find out what's new and trending in the Fabric community.

"); $(".slidesjs-pagination" ).prependTo(".pagination_sec"); $(".slidesjs-pagination" ).append("
"); $(".slidesjs-play.slidesjs-navigation").appendTo(".playpause_sec"); $(".slidesjs-stop.slidesjs-navigation").appendTo(".playpause_sec"); $(".slidesjs-pagination" ).append(""); $(".slidesjs-pagination" ).append(""); } catch(e){ } /* End: This code is added by iTalent as part of iTrack COMPL-455 */ $(".slidesjs-previous.slidesjs-navigation").attr('tabindex', '0'); $(".slidesjs-next.slidesjs-navigation").attr('tabindex', '0'); /* start: This code is added by iTalent as part of iTrack 1859082 */ $('.slidesjs-play.slidesjs-navigation').attr('id','playtitle'); $('.slidesjs-stop.slidesjs-navigation').attr('id','stoptitle'); $('.slidesjs-play.slidesjs-navigation').attr('role','tab'); $('.slidesjs-stop.slidesjs-navigation').attr('role','tab'); $('.slidesjs-play.slidesjs-navigation').attr('aria-describedby','tip1'); $('.slidesjs-stop.slidesjs-navigation').attr('aria-describedby','tip2'); /* End: This code is added by iTalent as part of iTrack 1859082 */ }); $(document).ready(function() { if($("#slides .item").length < 2 ) { /* Fixing Single Slide click issue (commented following code)*/ // $(".item").css("left","0px"); $(".item.slidesjs-slide").attr('style', 'left:0px !important'); $(".slidesjs-stop.slidesjs-navigation").trigger('click'); $(".slidesjs-previous").css("display", "none"); $(".slidesjs-next").css("display", "none"); } var items_length = $(".item.slidesjs-slide").length; $(".slidesjs-pagination-item > button").attr("aria-setsize",items_length); $(".slidesjs-next, .slidesjs-pagination-item button").attr("tabindex","-1"); $(".slidesjs-pagination-item button").attr("role", "tab"); $(".slidesjs-previous").attr("tabindex","-1"); $(".slidesjs-next").attr("aria-hidden","true"); $(".slidesjs-previous").attr("aria-hidden","true"); $(".slidesjs-next").attr("aria-label","Next"); $(".slidesjs-previous").attr("aria-label","Previous"); //$(".slidesjs-stop.slidesjs-navigation").attr("role","button"); //$(".slidesjs-play.slidesjs-navigation").attr("role","button"); $(".slidesjs-pagination").attr("role","tablist").attr("aria-busy","true"); $("li.slidesjs-pagination-item").attr("role","list"); $(".item.slidesjs-slide").attr("tabindex","-1"); $(".item.slidesjs-slide").attr("aria-label","item"); /*$(".slidesjs-stop.slidesjs-navigation").on('click', function() { var itemNumber = parseInt($('.slidesjs-pagination-item > a.active').attr('data-slidesjs-item')); $($('.item.slidesjs-slide')[itemNumber]).find('.c-call-to-action').attr('tabindex', '0'); });*/ $(".slidesjs-stop.slidesjs-navigation, .slidesjs-pagination-item > button").on('click keydown', function() { $.each($('.item.slidesjs-slide'),function(i,el){ $(el).find('.c-call-to-action').attr('tabindex', '-1'); }); var itemNumber = parseInt($('.slidesjs-pagination-item > button.active').attr('data-slidesjs-item')); $($('.item.slidesjs-slide')[itemNumber]).find('.c-call-to-action').attr('tabindex', '0'); }); $(".slidesjs-play.slidesjs-navigation").on('click', function() { $.each($('.item.slidesjs-slide'),function(i,el){ $(el).find('.c-call-to-action').attr('tabindex', '-1'); }); }); $(".slidesjs-pagination-item button").keyup(function(e){ var keyCode = e.keyCode || e.which; if (keyCode == 9) { e.preventDefault(); $(".slidesjs-stop.slidesjs-navigation").trigger('click').blur(); $("button.active").focus(); } }); $(".slidesjs-play").on("click",function (event) { if (event.handleObj.type === "click") { $(".slidesjs-stop").focus(); } else if(event.handleObj.type === "keydown"){ if (event.which === 13 && $(event.target).hasClass("slidesjs-play")) { $(".slidesjs-stop").focus(); } } }); $(".slidesjs-stop").on("click",function (event) { if (event.handleObj.type === "click") { $(".slidesjs-play").focus(); } else if(event.handleObj.type === "keydown"){ if (event.which === 13 && $(event.target).hasClass("slidesjs-stop")) { $(".slidesjs-play").focus(); } } }); $(".slidesjs-pagination-item").keydown(function(e){ switch (e.which){ case 37: //left arrow key $(".slidesjs-previous.slidesjs-navigation").trigger('click'); e.preventDefault(); break; case 39: //right arrow key $(".slidesjs-next.slidesjs-navigation").trigger('click'); e.preventDefault(); break; default: return; } $(".slidesjs-pagination-item button.active").focus(); }); }); // Start This code is added by iTalent as part of iTrack 1859082 $(document).ready(function(){ $("#tip1").attr("aria-hidden","true").addClass("hidden"); $("#tip2").attr("aria-hidden","true").addClass("hidden"); $(".slidesjs-stop.slidesjs-navigation, .slidesjs-play.slidesjs-navigation").attr('title', ''); $("a#playtitle").focus(function(){ $("#tip1").attr("aria-hidden","false").removeClass("hidden"); }); $("a#playtitle").mouseover(function(){ $("#tip1").attr("aria-hidden","false").removeClass("hidden"); }); $("a#playtitle").blur(function(){ $("#tip1").attr("aria-hidden","true").addClass("hidden"); }); $("a#playtitle").mouseleave(function(){ $("#tip1").attr("aria-hidden","true").addClass("hidden"); }); $("a#play").keydown(function(ev){ if (ev.which ==27) { $("#tip1").attr("aria-hidden","true").addClass("hidden"); ev.preventDefault(); return false; } }); $("a#stoptitle").focus(function(){ $("#tip2").attr("aria-hidden","false").removeClass("hidden"); }); $("a#stoptitle").mouseover(function(){ $("#tip2").attr("aria-hidden","false").removeClass("hidden"); }); $("a#stoptitle").blur(function(){ $("#tip2").attr("aria-hidden","true").addClass("hidden"); }); $("a#stoptitle").mouseleave(function(){ $("#tip2").attr("aria-hidden","true").addClass("hidden"); }); $("a#stoptitle").keydown(function(ev){ if (ev.which ==27) { $("#tip2").attr("aria-hidden","true").addClass("hidden"); ev.preventDefault(); return false; } }); }); // End This code is added by iTalent as part of iTrack 1859082