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

Enhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.

Reply
kkanukurthi
Helper III
Helper III

Get data till last friday(previous week) dynamically based on date column

Hi All,

 

I need help on creating a custom column in power query. I have a Date column with past and future dates. say from 2024 to 2025. check below screen shot.

kkanukurthi_4-1721907719924.png

Need a custom column so that column should have dates calculated till Friday. Lets say today is 25th July 2024. I need to get data till last Friday 19th July 2024 including past data. Future dates(from 20th july) and data should be ignored/not considered. whenever it is autorefreshed the data should be taken till 19th july/last friday. check below screen shot.

kkanukurthi_5-1721907982836.png

 

Likewise, if the week changes 29th july Monday to 3rd August Saturday , the data should be picked up till last/previous week friday date i.e 26th July including past data.

 

It should repeat every week, the data and Date should be picked up till last/previous week friday whenever it refreshes(dynamically)  either it is refreshed on following Monday or any day in week.

 

Please help.Thanks in advance

 

 

 

 

2 ACCEPTED SOLUTIONS
Anonymous
Not applicable

Hi @kkanukurthi ,

Sorry for being late! Back to work now!
You can change the custom column into this:

if [Date] <= Date.StartOfWeek(Date.From(DateTime.LocalNow()), Day.Monday) - #duration(3, 0, 0, 0) then 1 else 0

Here is the whole M function:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("ZZJBDsMgDAT/knOkxgaD/Zao//9GW9W7RuE6AjNr9r6P+ZKXXtqP8xh6vM8fURJL0kDalaSDSEtiIDgyABRjJojjkoNEggCwmUQuoOlAdDYMEkorEa2NF0u7A9mmKTQPSlBdEE/orjy12yvtA+OV9o5ZSvs2gGjfYa+0J7H93thS69w2qL79n8Y2q1HeiSgf/y/zKlBIkkqToLLgEqO0noRRLAGDzJGEOVST+ONbfCkQ/ZiiORCdG15bCgTybL0v/TGeovfkqfHYpC/9oZU/PsWX+nSMqvoYl0t3JaK74MGqT8C06hN4sfozsIfqD5dc/REi2jsCVX8Ms6o/Aa/qz/yeen8A", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, Value = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"Value", Int64.Type}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each if [Date] <= Date.StartOfWeek(Date.From(DateTime.LocalNow()), Day.Monday) - #duration(3, 0, 0, 0) then 1 else 0),
    #"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Custom] = 1))
in
    #"Filtered Rows"


Best Regards,
Dino Tao
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

View solution in original post

ronrsnfld
Super User
Super User

You can use the Table.SelectRows method to return only those rows earlier than or equal to last Fridays date.

Here is code that generates a sample table and shows you the filter.

Paste this code into the Advanced Editor in a blank query to see how it works.

let

//sample table
    Source = Table.FromColumns(
        {List.Dates(#date(2024,1,1),365,#duration(1,0,0,0))}
        & {List.Numbers(1,365)},
        type table[Date=date, Data=number]),

    #"Up to Last Friday"=Table.SelectRows(Source, each [Date] <= Date.StartOfWeek(Date.From(DateTime.FixedLocalNow()),Day.Friday))
    
in
    #"Up to Last Friday"

 

View solution in original post

8 REPLIES 8
ronrsnfld
Super User
Super User

You can use the Table.SelectRows method to return only those rows earlier than or equal to last Fridays date.

Here is code that generates a sample table and shows you the filter.

Paste this code into the Advanced Editor in a blank query to see how it works.

let

//sample table
    Source = Table.FromColumns(
        {List.Dates(#date(2024,1,1),365,#duration(1,0,0,0))}
        & {List.Numbers(1,365)},
        type table[Date=date, Data=number]),

    #"Up to Last Friday"=Table.SelectRows(Source, each [Date] <= Date.StartOfWeek(Date.From(DateTime.FixedLocalNow()),Day.Friday))
    
in
    #"Up to Last Friday"

 

Anonymous
Not applicable

I would do this by first adding a query that gives you the date for the most recent Friday, and then use this query as a parameter in your main query's date filter. First query named FridayDate (in a new blank query):

= let Today = Date.From(DateTime.LocalNow()) in 

if Date.DayOfWeek(Today) = 7 then Date.AddDays(Today, -8) else if Date.DayOfWeek(Today)= 6 then Date.AddDays(Today, -7) else if Date.DayOfWeek(Today)= 1 then Date.AddDays(Today, -9) else Date.AddDays(Today, (8+ Date.DayOfWeek(Today))*-1)

 

This gives you last Friday's date, or the Friday before that if today is Friday, Saturday, or Sunday.

 

Then you can use this query as a parameter in you date filter, so in your main query, add:

 

= Table.SelectRows(PriorStepOrTableName, each [Date] <= FridayDate)

 

--Nate

 

 

 

Anonymous
Not applicable

Hi @kkanukurthi ,

Maybe you can try this way:
Here is my sample data (from 2024.7.1 to 2024.8.31), and Today is 2024.7.26 Friday:

vjunyantmsft_0-1721974537748.png

Use this M code to create a custom column:

let
    Today = Date.From(DateTime.LocalNow()),
    CurrentDayOfWeek = Date.DayOfWeek(Today, Day.Friday),
    MostRecentFriday = if CurrentDayOfWeek = 0 then Today else Date.AddDays(Today, -CurrentDayOfWeek),
    Result = if [Date] <= MostRecentFriday then 1 else 0
in
    Result

And the final output is as below:

vjunyantmsft_1-1721974639595.png

Then you can filter the column "Custom" which equals 1:

vjunyantmsft_2-1721974741205.png

And the final output is as below:

vjunyantmsft_3-1721974760781.png

The final result will change according to the date.

Here is the whole M code in the Advanced Editor:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("ZZJBDsMgDAT/knOkxgaD/Zao//9GW9W7RuE6AjNr9r6P+ZKXXtqP8xh6vM8fURJL0kDalaSDSEtiIDgyABRjJojjkoNEggCwmUQuoOlAdDYMEkorEa2NF0u7A9mmKTQPSlBdEE/orjy12yvtA+OV9o5ZSvs2gGjfYa+0J7H93thS69w2qL79n8Y2q1HeiSgf/y/zKlBIkkqToLLgEqO0noRRLAGDzJGEOVST+ONbfCkQ/ZiiORCdG15bCgTybL0v/TGeovfkqfHYpC/9oZU/PsWX+nSMqvoYl0t3JaK74MGqT8C06hN4sfozsIfqD5dc/REi2jsCVX8Ms6o/Aa/qz/yeen8A", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, Value = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"Value", Int64.Type}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each 
    let
        Today = Date.From(DateTime.LocalNow()),
        CurrentDayOfWeek = Date.DayOfWeek(Today, Day.Friday),
        MostRecentFriday = if CurrentDayOfWeek = 0 then Today else Date.AddDays(Today, -CurrentDayOfWeek),
        Result = if [Date] <= MostRecentFriday then 1 else 0
    in
        Result),
    #"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Custom] = 1))
in
    #"Filtered Rows"


Best Regards,
Dino Tao
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

Thankyou for detailed solution. Can we restrict the dates in date column to last week/most recent friday should be 19th July. 

Like, if today's date falls anyday between 22nd july Monday to 28 July Sunday , the dates should be taken till last week friday i.e 19th July. In custom column, the filter '1' should be till 19th July only. Remaining from 20th july should be '0'.

 

The same way if the week passes, say Im in 29th July monday, The data and Dates should be picked up till 26th Friday. The custom coulmn filter '1' should be till 26th july and remaining from 27th july should be '0'

 

Note : whether it is Monday to Sunday any day , the data should be picked till previous week friday only.

 

PLease Help. Thanks

Anonymous
Not applicable

Hi @kkanukurthi ,

Sorry for being late! Back to work now!
You can change the custom column into this:

if [Date] <= Date.StartOfWeek(Date.From(DateTime.LocalNow()), Day.Monday) - #duration(3, 0, 0, 0) then 1 else 0

Here is the whole M function:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("ZZJBDsMgDAT/knOkxgaD/Zao//9GW9W7RuE6AjNr9r6P+ZKXXtqP8xh6vM8fURJL0kDalaSDSEtiIDgyABRjJojjkoNEggCwmUQuoOlAdDYMEkorEa2NF0u7A9mmKTQPSlBdEE/orjy12yvtA+OV9o5ZSvs2gGjfYa+0J7H93thS69w2qL79n8Y2q1HeiSgf/y/zKlBIkkqToLLgEqO0noRRLAGDzJGEOVST+ONbfCkQ/ZiiORCdG15bCgTybL0v/TGeovfkqfHYpC/9oZU/PsWX+nSMqvoYl0t3JaK74MGqT8C06hN4sfozsIfqD5dc/REi2jsCVX8Ms6o/Aa/qz/yeen8A", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, Value = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"Value", Int64.Type}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each if [Date] <= Date.StartOfWeek(Date.From(DateTime.LocalNow()), Day.Monday) - #duration(3, 0, 0, 0) then 1 else 0),
    #"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Custom] = 1))
in
    #"Filtered Rows"


Best Regards,
Dino Tao
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

Once more, have a look at:

Date.StartOfWeek([Date], Day.Saturday)

This will give you the last Friday before the date given...

PwerQueryKees
Super User
Super User

You are looking for Date.StartOfWeek([Date], Day.Saturday)

More info here: Date.StartOfWeek - PowerQuery M | Microsoft Learn

And you probably want to use: DateTime.LocalNow - PowerQuery M | Microsoft Learn

Can you please show me with sample data or provide me Mquery please. If it is not possible through power query please provide dax formula.

 

Thanks

Helpful resources

Announcements
July 2025 community update carousel

Fabric Community Update - July 2025

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

July PBI25 Carousel

Power BI Monthly Update - July 2025

Check out the July 2025 Power BI update to learn about new features.