02-22-2024 02:21 PM
Looking for function in the business rules to derive prior quarter based on the year and month value passed from parameter?
Solved! Go to Solution.
02-23-2024 02:36 PM - edited 02-23-2024 04:05 PM
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)
02-23-2024 04:38 PM - edited 02-23-2024 04:40 PM
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
02-23-2024 10:31 AM - edited 02-23-2024 04:41 PM
Hi @Yaseen
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 Function
Call it using standard OS time like GetPreviousQuarter("2024M4") will return 2024Q1`
02-23-2024 02:36 PM - edited 02-23-2024 04:05 PM
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)
02-23-2024 04:38 PM - edited 02-23-2024 04:40 PM
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
02-26-2024 03:57 PM
Thank you @sameburn @RobbSalzmann