Forum Discussion
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 🙂
- Anonymous3 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
- mlsx4Memorable 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])))- AnonymousNot applicable
Hi, thanks! The cycles units are years, so I want it to show me the next date plus the cycle years
- mlsx4Memorable Member
Then, use the formula I had written before. It should work
- AnonymousNot applicableNext 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
- mlsx4Memorable 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 - AnonymousNot 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
- AnonymousNot 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