Forum Discussion
DAX IF Sum Statement
Hello,
I need help with creating a DAX Formula. I have four columns in my table called "Transactions":
1. Date
2. Fund ID
3. Frequency
4. Dividends
And I need to write a formula that does the following:
- If [Frequency]="M" then sum the [Dividends] Column for the last 30 days
- If [Frequency]="Q" then sum the [Dividends] Column for the last 90 days
- If [Frequency]="A" then sum the [Dividends] Column for the last 365 days
Could someone please help me with this? I am new to DAX and am lost on whether I should use the Calculate formula, IF formula, etc.
hawkeyes12 , let your measures be:
- DividendSum = SUM(YourTable[Dividends])
- HighestDate = MAXX(ALL('Table'[end date 1]),'Table'[end date 1])
- MDividends = CALCULATE([DividendSum], FILTER(YourTable, YourTable[Frequency] = "M" && YourTable[Date] >= [HighestDate] -30))
- QDividends = CALCULATE([DividendSum], FILTER(YourTable, YourTable[Frequency] = "Q" && YourTable[Date] >= [HighestDate] -90))
- ADividends = CALCULATE([DividendSum], FILTER(YourTable, YourTable[Frequency] = "A" && YourTable[Date] >= [HighestDate] -365))
- DividendsUsed = SWITCH(TRUE(), YourTable[Frequency] = "M", [MDividends], YourTable[Frequency] = "Q", QDividends, YourTable[Dividends] = "A", ADividends)
If this solves the problem, kindly mark my response as a solution.
6 Replies
- ahmedoyeResponsive Resident
Hi hawkeyes12 , I like to break down my DAX into pieces to make it easier to write, read and understand. This is what you should write, assuming the dates start counting from today:
- DividendSum = SUM(YourTable[Dividends])
- MDividends = CALCULATE([DividendSum], FILTER(YourTable, YourTable[Frequency] = "M" && YourTable[Date] >= TODAY() -30))
- QDividends = CALCULATE([DividendSum], FILTER(YourTable, YourTable[Frequency] = "Q" && YourTable[Date] >= TODAY() -90))
- ADividends = CALCULATE([DividendSum], FILTER(YourTable, YourTable[Frequency] = "A" && YourTable[Date] >= TODAY() -365))
- DividendsUsed = SWITCH(TRUE(), YourTable[Frequency] = "M", [MDividends], YourTable[Frequency] = "Q", QDividends, YourTable[Dividends] = "A", ADividends)
If this solves the problem, kindly mark my response as a solution.
- hawkeyes12Frequent Visitor
Hi ahmedoye this is very helpful! If the dates don't start counting from today and instead start counting from the most recent date in the [Date] column, how would this change the formula? For example, this calculation will be performed in mid-March and the source file will include data from 2/28/2019 to 2/29/2020. The first date that we would want included in the 30, 90 and 365 day calculation is 2/29/2020.
I am having a very hard time with the date functions so any guidance you may have is very appreciated!- ahmedoyeResponsive Resident
hawkeyes12 , let your measures be:
- DividendSum = SUM(YourTable[Dividends])
- HighestDate = MAXX(ALL('Table'[end date 1]),'Table'[end date 1])
- MDividends = CALCULATE([DividendSum], FILTER(YourTable, YourTable[Frequency] = "M" && YourTable[Date] >= [HighestDate] -30))
- QDividends = CALCULATE([DividendSum], FILTER(YourTable, YourTable[Frequency] = "Q" && YourTable[Date] >= [HighestDate] -90))
- ADividends = CALCULATE([DividendSum], FILTER(YourTable, YourTable[Frequency] = "A" && YourTable[Date] >= [HighestDate] -365))
- DividendsUsed = SWITCH(TRUE(), YourTable[Frequency] = "M", [MDividends], YourTable[Frequency] = "Q", QDividends, YourTable[Dividends] = "A", ADividends)
If this solves the problem, kindly mark my response as a solution.
- Greg_DecklerCommunity Champion
You likely want to use a SWITCH statement. And you will likely want to calculate your value using a SUMX statement with a FILTER although you could also use CALCULATE with a FILTER statement. So either:
SUMX(FILTER('Table',....),[Dividends])
or
CALCULATE(SUM([Dividends]),FILTER(...))
- hawkeyes12Frequent Visitor
Hi - thank you for the response. Could you please explain what you mean by a SWITCH Statement?