Using ETL formula for finding between dates

Hi, I have a dataset and every row has a date. I want to add a column using ETL that indicates what week that is (starting mondays). So for a row with 3/28/2022, the new column would have "week of 3/28" and for a row with 4/1/2022 it would also say "week of 3/28" since 3/28 was a Monday. A row with 4/5/2022 would say "week of 4/4". How can I approach this?

Best Answer

  • GrantSmith
    GrantSmith Coach
    Answer ✓

    You can do some simple date manipulation to get the Monday of the current week with a Formula Tile

    `Date` - INTERVAL (CASE WHEN DAYOFWEEK(`Date`) = 1 THEN 6 ELSE (DAYOFWEEK(`Date`) - 2) END) DAY
    

    DAYOFWEEK returns a number between 1 (Sunday) and 7 (Saturday).

    The CASE statement is checking if it's a Sunday to subtract 6 days instead of 1.

    -2 is to reduce the days to subtract to get to Monday. For example Tuesday (3) we need to subtract only 1 day instead of 3 days.

    You can then tie it all together with a CONCAT function and a DATE_FORMAT:

    CONCAT('Week of ', DATE_FORMAT(`Date` - INTERVAL (CASE WHEN DAYOFWEEK(`Date`) = 1 THEN 6 ELSE (DAYOFWEEK(`Date`) - 2) END) DAY, '%m/%d'))
    
    **Was this post helpful? Click Agree or Like below**
    **Did this solve your problem? Accept it as a solution!**

Answers

  • GrantSmith
    GrantSmith Coach
    Answer ✓

    You can do some simple date manipulation to get the Monday of the current week with a Formula Tile

    `Date` - INTERVAL (CASE WHEN DAYOFWEEK(`Date`) = 1 THEN 6 ELSE (DAYOFWEEK(`Date`) - 2) END) DAY
    

    DAYOFWEEK returns a number between 1 (Sunday) and 7 (Saturday).

    The CASE statement is checking if it's a Sunday to subtract 6 days instead of 1.

    -2 is to reduce the days to subtract to get to Monday. For example Tuesday (3) we need to subtract only 1 day instead of 3 days.

    You can then tie it all together with a CONCAT function and a DATE_FORMAT:

    CONCAT('Week of ', DATE_FORMAT(`Date` - INTERVAL (CASE WHEN DAYOFWEEK(`Date`) = 1 THEN 6 ELSE (DAYOFWEEK(`Date`) - 2) END) DAY, '%m/%d'))
    
    **Was this post helpful? Click Agree or Like below**
    **Did this solve your problem? Accept it as a solution!**