Forum Discussion
DAX help - Accounts Receivable Aging
- 8 years ago
Unfortunately that did not work. But luckily I stumbled on a formula that works. Here it is in case anyone is interested. I'd be happy to hear any suggestions as to improvements to this formula if any exist.
Total AR 0-30 =
VAR EndDate =
MAX ( 'Calendar'[Date] )
RETURN
IF (
MIN ( 'Calendar'[Date] )
<= CALCULATE ( MAX ('TransactionsTable'[PostingDate]), ALL ('TransactionsTable') ),
CALCULATE (
SUM ( 'TransactionsTable'[TransactionAmount] ),
FILTER ( ALL ( 'Calendar'[Date] ), 'Calendar'[Date] <= EndDate ),
KEEPFILTERS (
IFERROR (
DATEDIFF ( CustomerTable[CustomerCheckoutDate], EndDate, DAY ),
( DATEDIFF ( EndDate, CustomerTable[CustomerCheckoutDate], DAY ) ) * -1
)
< 31
)
)
)
can you share anonymized sample rows for the tables used?
is 31 the only age group you cover, or are there others, if so, what are they?
Hello Stachu. Thanks for your reply. Below is some sample data. I have a calendar table that is connected to the table below on the Transaction Date.
Ultimately I would want age groups for every 30 days up to 180 and then 180+. But I figured if I could get 0-30 figured out then I could take it from there to do the other buckets.
| Account # | Item # | Transaction Date | Transaction Amount | CustomerCheckoutDate |
| 1 | 532555 | 3/14/2018 | $ 4,214.00 | 4/4/2018 |
| 1 | 134134 | 3/21/2018 | $ 1,354.00 | 4/4/2018 |
| 1 | 413443 | 2/6/2018 | $ 1,661.00 | 4/4/2018 |
| 1 | 412141 | 4/5/2018 | $ 1,838.00 | 4/4/2018 |
| 2 | 585811 | 2/13/2018 | $ 2,065.00 | 2/22/2018 |
| 2 | 147547 | 2/24/2018 | $ 4,238.00 | 2/22/2018 |
| 2 | 454787 | 2/9/2018 | $ 3,698.00 | 2/22/2018 |
- Stachu8 years agoCommunity Champion
hmm, can you try this?
LessThan31 = VAR DaysOverdue = ADDCOLUMNS ( Transactions, "DaysOverdue", Transactions[CustomerCheckoutDate] - Transactions[Transaction Date] ) VAR LessThan31 = FILTER ( DaysOverdue, [DaysOverdue] < 31 ) RETURN CALCULATE ( SUM ( Transactions[Transaction Amount] ), LessThan31 )I wasn't clear whether you need to calculate the days on row level (current syntax) or grouped per Account/Account&Item, if grouping is possible then Summarize could replace whole Transactions table
Also the problem becones very easy once you add calculated column forTransactions[CustomerCheckoutDate] - Transactions[Transaction Date]
the question is whether it makes sense from aggregation angle
- robarivas8 years agoPost Patron
Unfortunately that did not work. But luckily I stumbled on a formula that works. Here it is in case anyone is interested. I'd be happy to hear any suggestions as to improvements to this formula if any exist.
Total AR 0-30 =
VAR EndDate =
MAX ( 'Calendar'[Date] )
RETURN
IF (
MIN ( 'Calendar'[Date] )
<= CALCULATE ( MAX ('TransactionsTable'[PostingDate]), ALL ('TransactionsTable') ),
CALCULATE (
SUM ( 'TransactionsTable'[TransactionAmount] ),
FILTER ( ALL ( 'Calendar'[Date] ), 'Calendar'[Date] <= EndDate ),
KEEPFILTERS (
IFERROR (
DATEDIFF ( CustomerTable[CustomerCheckoutDate], EndDate, DAY ),
( DATEDIFF ( EndDate, CustomerTable[CustomerCheckoutDate], DAY ) ) * -1
)
< 31
)
)
)- v-huizhn-msft8 years agoMicrosoft Employee
Hi robarivas,
Congratulations, please mark your reply as answer, so more people will benefit from here.
Thanks,
Angelia