The OneStream Community is temporarily frozen until June 29th due to the ongoing maintenance. Please read the blog post here to learn more.
Forum Discussion
fellow_Ones
2 years agoNew Contributor III
Looking for function to derive prior quarter based on the year and month value passed from parameter
Looking for function in the business rules to derive prior quarter based on the year and month value passed from parameter?
A good way to derive a time period based on a time variable is to use the TimeDimHelper class.
You can nest functions like below; to achieve most use cases.
' Declare timePeriod Dim timePeriod As String = "2024M1" ' Derive prior quarter based on time passed in Dim priorQuarterPeriod As String = TimeDimHelper.GetNameFromId(TimeDimHelper.GetQuarterIdFromId(TimeDimHelper.GetLastPeriodInPriorQuarter(TimeDimHelper.GetIdFromName(timePeriod)))) ' Log BRApi.ErrorLog.LogMessage(si, "PriorQuarter Logging: ", priorQuarterPeriod)ah! TimeDimHelper. I didn't know that existed. 🙂
However for me, I would avoid nested method calls:Dim time as string = "2022M4" Dim priorQtr as string = GetPriorQtr(time) BRApi.ErrorLog.LogMessage(si, priorQtr) ' should print 2022Q1 Public Function GetPriorQtr(time As String) As String Dim timeId As Integer = TimeDimHelper.GetIdFromName(time) Dim lastPeriodInPriorQtr As Integer = TimeDimHelper.GetLastPeriodInPriorQuarter(timeId) Dim priorQtrId As Integer = TimeDimHelper.GetQuarterIdFromId(lastPeriodInPriorQtr) Dim priorQtr As String = TimeDimHelper.GetNameFromId(priorQtrId) Return priorQtr End Function
4 Replies
- sameburn
OneStream Employee
A good way to derive a time period based on a time variable is to use the TimeDimHelper class.
You can nest functions like below; to achieve most use cases.
' Declare timePeriod Dim timePeriod As String = "2024M1" ' Derive prior quarter based on time passed in Dim priorQuarterPeriod As String = TimeDimHelper.GetNameFromId(TimeDimHelper.GetQuarterIdFromId(TimeDimHelper.GetLastPeriodInPriorQuarter(TimeDimHelper.GetIdFromName(timePeriod)))) ' Log BRApi.ErrorLog.LogMessage(si, "PriorQuarter Logging: ", priorQuarterPeriod)- RobbSalzmannValued Contributor II
ah! TimeDimHelper. I didn't know that existed. 🙂
However for me, I would avoid nested method calls:Dim time as string = "2022M4" Dim priorQtr as string = GetPriorQtr(time) BRApi.ErrorLog.LogMessage(si, priorQtr) ' should print 2022Q1 Public Function GetPriorQtr(time As String) As String Dim timeId As Integer = TimeDimHelper.GetIdFromName(time) Dim lastPeriodInPriorQtr As Integer = TimeDimHelper.GetLastPeriodInPriorQuarter(timeId) Dim priorQtrId As Integer = TimeDimHelper.GetQuarterIdFromId(lastPeriodInPriorQtr) Dim priorQtr As String = TimeDimHelper.GetNameFromId(priorQtrId) Return priorQtr End Function
- fellow_OnesNew Contributor III
Thank you sameburn RobbSalzmann
- RobbSalzmannValued Contributor II
Hi fellow_Ones
This will do it:public string GetPreviousQuarter(string time) { var parts = time.Split('M'); int year = 0; int month = 0; if (int.TryParse(parts[0], out year) && int.TryParse(parts[1], out month)) { // Determine the current quarter int currentQuarter = (month - 1) / 3 + 1; // Calculate the previous quarter int previousQuarter = currentQuarter - 1; // If the current quarter is Q1, then the previous quarter is Q4 of the previous year if (previousQuarter < 1) { previousQuarter = 4; year -= 1; // Decrement the year as we're moving to the previous year } return $"{year}Q{previousQuarter}"; } else { return $"{time} is not a valid time"; } }Public Function GetPreviousQuarter(time As String) As String Dim parts() As String = time.Split("M"c) Dim year As Integer = 0 Dim month As Integer = 0 If Integer.TryParse(parts(0), year) AndAlso Integer.TryParse(parts(1), month) Then ' Determine the current quarter Dim currentQuarter As Integer = (month - 1) \ 3 + 1 ' Calculate the previous quarter Dim previousQuarter As Integer = currentQuarter - 1 ' If the current quarter is Q1, then the previous quarter is Q4 of the previous year If previousQuarter < 1 Then previousQuarter = 4 year -= 1 ' Decrement the year as we're moving to the previous year End If Return $"{year}Q{previousQuarter}" Else Return $"{time} is not a valid time" End If End FunctionCall it using standard OS time like GetPreviousQuarter("2024M4") will return 2024Q1`
Related Content
- 2 years ago