Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
3 years ago
Solved

Calculating date and count columns?

Hi all! 

 

Simple task that I cannot get right! 

 

Two columns, one denotes the date of a next product renewal (start_date) 

The other is a whole number representing the lifecycle of each product (cycle_length) 

 

I want to create a new column which calculates a future date of the next renewall based on the start date plus the cycle length. 

 

Each product has a different cycle length so needs to read the cycle lenght column for each row. 

 

Example start date is 01/07/2023, cycle legnth is 20 years, next renewal colunn should read 1/07/2043 (simplied for example) 

 

Any help much appreciated 🙂 

  • Anonymous's avatar
    Anonymous
    3 years ago

    Hi Anonymous ,

    It seems that there is null value in the field 'rm_loc_component_cycles'[next_date], and in order to avoid February having different days in different years get error, for example next_date is 2024/2/29, cycle length is 3. Then the next renewal will be date(2027,2,29) base on your formula. It will also be wrong....

    So please update the formula of calculated column [Next renewal] as below and check if it can return the expected result... Please find the details in the attachment.

    Next renewal = 
    VAR _year =
        YEAR ( 'rm_loc_component_cycles'[next_date] ) + 'rm_loc_component_cycles'[cycle_length]
    VAR _month =
        MONTH ( 'rm_loc_component_cycles'[next_date] )
    VAR _day =
        DAY ( 'rm_loc_component_cycles'[next_date] )
    VAR _eomonth =
        EOMONTH ( DATE ( _year, _month, 1 ), 0 )
    RETURN
         IF (
             ISBLANK ( 'rm_loc_component_cycles'[next_date] ),
             BLANK (),
            IF ( _day > DAY ( _eomonth ), _eomonth, DATE ( _year, _month, _day ) )
         )

    Best Regards

7 Replies

  • mlsx4's avatar
    mlsx4
    Memorable Member

    Hi Anonymous 

     

    I assume that all cycles' length are the same unit, so you can do:

    Next renewal = SUMX('Table',DATE(YEAR('Table'[Date])+'Table'[Cycle length],MONTH('Table'[Date]),DAY('Table'[Date])))



    • Anonymous's avatar
      Anonymous
      Not applicable

      Hi, thanks! The cycles units are years, so I want it to show me the next date plus the cycle years 

      • mlsx4's avatar
        mlsx4
        Memorable Member

        Then, use the formula I had written before. It should work

  • Anonymous's avatar
    Anonymous
    Not applicable
    Next renewal = SUMX(rm_loc_component_cycles,DATE(YEAR('rm_loc_component_cycles'[next_date].[Date])+'rm_loc_component_cycles'[cycle_length],MONTH('rm_loc_component_cycles'[next_date].[Date]),DAY('rm_loc_component_cycles'[next_date].[Date])))
     
    Error showing as 
     

     

    • mlsx4's avatar
      mlsx4
      Memorable Member

      Next renewal = SUMX(rm_loc_component_cycles,DATE(YEAR('rm_loc_component_cycles'[next_date])+'rm_loc_component_cycles'[cycle_length],MONTH('rm_loc_component_cycles'[next_date]),DAY('rm_loc_component_cycles'[next_date])))

      You don't need .[Date]. Check if this is the problem

    • Anonymous's avatar
      Anonymous
      Not applicable

      Hi Anonymous ,

      It seems that there is null value in the field 'rm_loc_component_cycles'[next_date], and in order to avoid February having different days in different years get error, for example next_date is 2024/2/29, cycle length is 3. Then the next renewal will be date(2027,2,29) base on your formula. It will also be wrong....

      So please update the formula of calculated column [Next renewal] as below and check if it can return the expected result... Please find the details in the attachment.

      Next renewal = 
      VAR _year =
          YEAR ( 'rm_loc_component_cycles'[next_date] ) + 'rm_loc_component_cycles'[cycle_length]
      VAR _month =
          MONTH ( 'rm_loc_component_cycles'[next_date] )
      VAR _day =
          DAY ( 'rm_loc_component_cycles'[next_date] )
      VAR _eomonth =
          EOMONTH ( DATE ( _year, _month, 1 ), 0 )
      RETURN
           IF (
               ISBLANK ( 'rm_loc_component_cycles'[next_date] ),
               BLANK (),
              IF ( _day > DAY ( _eomonth ), _eomonth, DATE ( _year, _month, _day ) )
           )

      Best Regards

  • Anonymous's avatar
    Anonymous
    Not applicable

    Hii Anonymous , You can also use the DATEADD function
    It will return the dates according to the interval you choose. In your case the formula would be :-
    Formula = DATEADD(Start_date, cycle_Length, Year)
    You can also refer this link for more information.
    https://learn.microsoft.com/en-us/dax/dateadd-function-dax