Forum Discussion
Anonymous
1 year agoNot applicable
Performance issue DAX
Is there a way to optimize the performance of below query Sale from Current Inventory Balance NY = VAR CurrentDate = TODAY () VAR InitialValue = [Opening Bal] VAR CurrentYear = YEAR ( Cur...
- 1 year ago
Hi Anonymous
Here are some suggestions to optimize your query:
- Using TODAY() multiple times can be inefficient. Store it in a variable and reuse it.
- Instead of creating a calendar for the entire next year, limit it to the necessary date range.
- Calculate DaysSinceStart only once and reuse it.
Here’s an optimized version (1) of your query, you could try this:
SaleFromCurrentInventoryBalanceNY = VAR CurrentDate = TODAY() VAR InitialValue = [Opening Bal] VAR CurrentYear = YEAR(CurrentDate) VAR EndDate = DATE(CurrentYear + 1, 12, 31) VAR DateRange = CALENDAR(CurrentDate, EndDate) RETURN SUMX( FILTER( ADDCOLUMNS( DateRange, "DaysSinceStart", DATEDIFF(CurrentDate, [Date], DAY), "DailyValueSub", IF( DATEDIFF(CurrentDate, [Date], DAY) < 'Day Range'[Day Range Value], DIVIDE(InitialValue, 'Day Range'[Day Range Value]) ) ), [Date] >= CurrentDate && YEAR([Date]) = CurrentYear + 1 ), [DailyValueSub] )Version 2:
SaleFromCurrentInventoryBalanceNY = VAR CurrentDate = TODAY() VAR InitialValue = [Opening Bal] VAR CurrentYear = YEAR(CurrentDate) VAR EndDate = DATE(CurrentYear + 1, 12, 31) VAR DateRange = CALENDAR(CurrentDate, EndDate) VAR FilteredDates = FILTER( DateRange, [Date] >= CurrentDate && YEAR([Date]) = CurrentYear + 1 ) VAR CalculatedValues = ADDCOLUMNS( FilteredDates, "DaysSinceStart", DATEDIFF(CurrentDate, [Date], DAY), "DailyValueSub", IF( DATEDIFF(CurrentDate, [Date], DAY) < 'Day Range'[Day Range Value], DIVIDE(InitialValue, 'Day Range'[Day Range Value]) ) ) RETURN SUMX( CalculatedValues, [DailyValueSub] )Hope this helps!!
If this solved your problem, please accept it as a solution and a kudos!!
Best Regards,
Shahariar Hafiz
shafiz_p
1 year agoSuper User
Hi Anonymous
Here are some suggestions to optimize your query:
- Using TODAY() multiple times can be inefficient. Store it in a variable and reuse it.
- Instead of creating a calendar for the entire next year, limit it to the necessary date range.
- Calculate DaysSinceStart only once and reuse it.
Here’s an optimized version (1) of your query, you could try this:
SaleFromCurrentInventoryBalanceNY =
VAR CurrentDate = TODAY()
VAR InitialValue = [Opening Bal]
VAR CurrentYear = YEAR(CurrentDate)
VAR EndDate = DATE(CurrentYear + 1, 12, 31)
VAR DateRange = CALENDAR(CurrentDate, EndDate)
RETURN
SUMX(
FILTER(
ADDCOLUMNS(
DateRange,
"DaysSinceStart", DATEDIFF(CurrentDate, [Date], DAY),
"DailyValueSub",
IF(
DATEDIFF(CurrentDate, [Date], DAY) < 'Day Range'[Day Range Value],
DIVIDE(InitialValue, 'Day Range'[Day Range Value])
)
),
[Date] >= CurrentDate && YEAR([Date]) = CurrentYear + 1
),
[DailyValueSub]
)
Version 2:
SaleFromCurrentInventoryBalanceNY =
VAR CurrentDate = TODAY()
VAR InitialValue = [Opening Bal]
VAR CurrentYear = YEAR(CurrentDate)
VAR EndDate = DATE(CurrentYear + 1, 12, 31)
VAR DateRange = CALENDAR(CurrentDate, EndDate)
VAR FilteredDates =
FILTER(
DateRange,
[Date] >= CurrentDate && YEAR([Date]) = CurrentYear + 1
)
VAR CalculatedValues =
ADDCOLUMNS(
FilteredDates,
"DaysSinceStart", DATEDIFF(CurrentDate, [Date], DAY),
"DailyValueSub",
IF(
DATEDIFF(CurrentDate, [Date], DAY) < 'Day Range'[Day Range Value],
DIVIDE(InitialValue, 'Day Range'[Day Range Value])
)
)
RETURN
SUMX(
CalculatedValues,
[DailyValueSub]
)
Hope this helps!!
If this solved your problem, please accept it as a solution and a kudos!!
Best Regards,
Shahariar Hafiz