Forum Discussion

SharpsmartCP's avatar
SharpsmartCP
Frequent Visitor
5 years ago
Solved

Using the DATEADD expression with an unusual data set

Good morning, I have a data set as follows:

1 x Column of dates

1 x Column that is an identifier for a date frequency. eg. 103 represents every third week, 104 represents every forth week, etc. but then there are also codes like 208 representing every 2 months and 209 representing every 3 months.

 

I am able to easily build a new column 'TOADD' that says where 103 is present, this would represent '3' and where 208 is present, this represents '2'.

 

So I then went on to build a formula with DATEADD whereby:

 

NextDate = DATEADD(DateTime[DateKey], 'TOADD', DAY)

 

The issue I have is that I can only use either DAY or MONTH as the interval parameter at the end of the expression. I cannot find a way to vary this based on what is present in my frequency column, or even vary it at all.

 

Any ideas how I would accomplish this? I'm thinking maybe not to start with DAX for this issue and rather do transfroms / calculations in the data model first. Just not sure how to do it!

 

Any help would be appreciated. Thanks.

 

  • The challenge here is that DATEADD reutns a date column with the exisiting dates only. As you are using a denormalized structure without a calendar table (you might want to consider this practice) then you may use 2 solutions:

    1. Use the simple math like:

     

    Next Scheduled Date =
    SWITCH (
        [TYPE ADD],
        "DAY", [SCH01_LD1] + [DAYS TO ADD],
        "MONTH",
            [SCH01_LD1] + [DAYS TO ADD] * 30,
        "YEAR",
            [SCH01_LD1] + [DAYS TO ADD] * 365
    )

     

     

    2. Use Power Query (Preferred):

    In Power Query add a new column

    if [TYPE ADD] = "DAY" then Date.AddDays([SCH01_LD1],[DAYS TO ADD]) else
    if [TYPE ADD] = "WEEK" then Date.AddWeeks([SCH01_LD1],[DAYS TO ADD]) else
    if [TYPE ADD] = "MONTH" then Date.AddMonths([SCH01_LD1],[DAYS TO ADD]) else
    if [TYPE ADD] = "YEAR" then Date.AddYears([SCH01_LD1],[DAYS TO ADD]) 

5 Replies

  • SharpsmartCP ,Can you share sample data and sample output in table format? Or a sample pbix after removing sensitive data.

      • Mohammad_Refaei's avatar
        Mohammad_Refaei
        Icon for Solution Specialist rankSolution Specialist

        The challenge here is that DATEADD reutns a date column with the exisiting dates only. As you are using a denormalized structure without a calendar table (you might want to consider this practice) then you may use 2 solutions:

        1. Use the simple math like:

         

        Next Scheduled Date =
        SWITCH (
            [TYPE ADD],
            "DAY", [SCH01_LD1] + [DAYS TO ADD],
            "MONTH",
                [SCH01_LD1] + [DAYS TO ADD] * 30,
            "YEAR",
                [SCH01_LD1] + [DAYS TO ADD] * 365
        )

         

         

        2. Use Power Query (Preferred):

        In Power Query add a new column

        if [TYPE ADD] = "DAY" then Date.AddDays([SCH01_LD1],[DAYS TO ADD]) else
        if [TYPE ADD] = "WEEK" then Date.AddWeeks([SCH01_LD1],[DAYS TO ADD]) else
        if [TYPE ADD] = "MONTH" then Date.AddMonths([SCH01_LD1],[DAYS TO ADD]) else
        if [TYPE ADD] = "YEAR" then Date.AddYears([SCH01_LD1],[DAYS TO ADD])