Forum Discussion
Replicating COUNTIFS Excel formulars in PowerBI
Hi,
I have an excel file with basic countifs excel formulars that i'm trying to build in Power BI and struggling with writing the excel formula in DAX.
I want to replicate the summarised table and transposed table (shown below) in Power BI. An example of the Raw data is also below.
Explaining the formular's:
[Spend>=$200] = counting the number of clients that spent $200 or more during the previous month and current mont
[Spend<$80] = counting the number of clients that spent $200 or more 2 months back and previous month but spent
[%Risk] = Divide the current months [Spend<$80] by the previous months [Spend>=$200]
September Example:
The summarised table excel forumlars:
[Spend>=$200] =COUNTIFS(Table2[Aug-22],">=200",Table2[Sep-22],">=200") which gives us 3
[Spend<$80] =COUNTIFS(Table2[Jul-22],">=200",Table2[Aug-22],">=200",Table2[Sep-22],"<80") which gives us 1
[%Risk] =Sept-22 [Spend<$80] / Aug-22 [Spend>=$200] which gives us 1/3 = 33%
Summarised table using formulars on transposed table
| Apr-22 | May-22 | Jun-22 | Jul-22 | Aug-22 | Sep-22 | Oct-22 | |
| Spend>=$200 | 0 | 4 | 3 | 2 | 3 | 3 | 1 |
| Spend <$80 | 0 | 0 | 2 | 1 | 0 | 1 | 2 |
| Risk | 0% | 0% | 50% | 33% | 0% | 33% | 67% |
The transposed table based on Raw data (Table 2)
| Name | Apr-22 | May-22 | Jun-22 | Jul-22 | Aug-22 | Sep-22 | Oct-22 |
| Client A | $1,000 | $1,000 | $1,000 | $1,000 | $1,000 | $1,000 | $1,000 |
| Client B | $100 | $200 | $300 | $400 | $80 | $60 | $0 |
| Client C | $200 | $200 | $70 | $200 | $200 | $60 | $60 |
| Client D | $300 | $300 | $300 | $70 | $300 | $60 | $60 |
| Client E | $400 | $70 | $70 | $400 | $400 | $400 | $60 |
| Client F | $500 | $500 | $70 | $70 | $500 | $500 | $70 |
Raw Data looks like this
| Client Name | Order Month | Spend$ |
| Client A | Apr-22 | $1,000 |
| Client B | Apr-22 | $100 |
| Client C | Apr-22 | $200 |
| Client D | Apr-22 | $300 |
| Client E | Apr-22 | $400 |
| Client F | Apr-22 | $500 |
| Client A | Aug-22 | $1,000 |
| Client B | Aug-22 | $80 |
| Client C | Aug-22 | $200 |
| Client D | Aug-22 | $300 |
| Client E | Aug-22 | $400 |
| Client F | Aug-22 | $500 |
| Client A | Jul-22 | $1,000 |
| Client B | Jul-22 | $400 |
| Client C | Jul-22 | $200 |
| Client D | Jul-22 | $70 |
| Client E | Jul-22 | $400 |
| Client F | Jul-22 | $70 |
| Client A | Jun-22 | $1,000 |
| Client B | Jun-22 | $300 |
| Client C | Jun-22 | $70 |
| Client D | Jun-22 | $300 |
| Client E | Jun-22 | $70 |
| Client F | Jun-22 | $70 |
| Client A | May-22 | $1,000 |
| Client B | May-22 | $200 |
| Client C | May-22 | $200 |
| Client D | May-22 | $300 |
| Client E | May-22 | $70 |
| Client F | May-22 | $500 |
| Client A | Oct-22 | $1,000 |
| Client B | Oct-22 | $0 |
| Client C | Oct-22 | $60 |
| Client D | Oct-22 | $60 |
| Client E | Oct-22 | $60 |
| Client F | Oct-22 | $70 |
| Client A | Sep-22 | $1,000 |
| Client B | Sep-22 | $60 |
| Client C | Sep-22 | $60 |
| Client D | Sep-22 | $60 |
| Client E | Sep-22 | $400 |
| Client F | Sep-22 | $500 |
Any help would be appreciated
Thanks
Joe
Try these measures:
Spend = SUM ( ClientSpend[Spend$] )Spend over $200 = VAR vTableBase = ADDCOLUMNS ( VALUES ( ClientSpend[Client Name] ), "@AmountCurrent", [Spend], "@AmountLastMonth", CALCULATE ( [Spend], DATEADD ( DimDate[Date], -1, MONTH ) ) ) VAR vTableFilter = FILTER ( vTableBase, [@AmountCurrent] >= 200 && [@AmountLastMonth] >= 200 ) VAR vResult = COUNTROWS ( vTableFilter ) RETURN vResultSpend under $80 = VAR vTableBase = ADDCOLUMNS ( VALUES ( ClientSpend[Client Name] ), "@AmountCurrent", [Spend], "@AmountLastMonth", CALCULATE ( [Spend], DATEADD ( DimDate[Date], -1, MONTH ) ), "@AmountTwoMonthsAgo", CALCULATE ( [Spend], DATEADD ( DimDate[Date], -2, MONTH ) ) ) VAR vTableFilter = FILTER ( vTableBase, [@AmountCurrent] < 80 && [@AmountLastMonth] >= 200 && [@AmountTwoMonthsAgo] >= 200 ) VAR vResult = COUNTROWS ( vTableFilter ) RETURN vResultRisk = VAR vNumerator = [Spend under $80] VAR vDenominator = CALCULATE ( [Spend over $200], DATEADD ( DimDate[Date], -1, MONTH ) ) VAR vResult = DIVIDE ( vNumerator, vDenominator ) RETURN vResultIn the second matrix, enable "Switch values to rows" to display measures as rows:
2 Replies
- DataInsightsSuper User
Try these measures:
Spend = SUM ( ClientSpend[Spend$] )Spend over $200 = VAR vTableBase = ADDCOLUMNS ( VALUES ( ClientSpend[Client Name] ), "@AmountCurrent", [Spend], "@AmountLastMonth", CALCULATE ( [Spend], DATEADD ( DimDate[Date], -1, MONTH ) ) ) VAR vTableFilter = FILTER ( vTableBase, [@AmountCurrent] >= 200 && [@AmountLastMonth] >= 200 ) VAR vResult = COUNTROWS ( vTableFilter ) RETURN vResultSpend under $80 = VAR vTableBase = ADDCOLUMNS ( VALUES ( ClientSpend[Client Name] ), "@AmountCurrent", [Spend], "@AmountLastMonth", CALCULATE ( [Spend], DATEADD ( DimDate[Date], -1, MONTH ) ), "@AmountTwoMonthsAgo", CALCULATE ( [Spend], DATEADD ( DimDate[Date], -2, MONTH ) ) ) VAR vTableFilter = FILTER ( vTableBase, [@AmountCurrent] < 80 && [@AmountLastMonth] >= 200 && [@AmountTwoMonthsAgo] >= 200 ) VAR vResult = COUNTROWS ( vTableFilter ) RETURN vResultRisk = VAR vNumerator = [Spend under $80] VAR vDenominator = CALCULATE ( [Spend over $200], DATEADD ( DimDate[Date], -1, MONTH ) ) VAR vResult = DIVIDE ( vNumerator, vDenominator ) RETURN vResultIn the second matrix, enable "Switch values to rows" to display measures as rows:
- JJiso20Frequent Visitor
Thanks this is perfect! the help is much appreciated.