Forum Discussion
Adding Custom Column To Obtain Prior Month Balance
- 3 years ago
JRParker my bad. I wanted to sort by date upon grouping but then changed my mind... Before I give up and commit a suicide, lets replace function f with the following
f = (tbl as table) as table => [sorted = Table.Sort(tbl, "Date"), // Sort the table by the "Date" column prior_month = {0} & List.RemoveLastN(sorted[Balance], 1), // Create a list of prior month balances by removing the last balance value and appending a 0 at the beginning out = Table.FromColumns(Table.ToColumns(sorted) & {prior_month}, Table.ColumnNames(sorted) & {"Prior Month"}) // Add the prior month balances as a new column named "Prior Month" ] [out]
An issue most likely due to embedding your code into the pre-existing code, or not articulating the data structure. Here is an excerpt of 2 Acct #s:
1) Note the data starts with 3/31/22
2) There may be an issue if the prior month is in a prior year
3 ) Some of the Prior Month results are seemingly correct (highlighted in red) while other months are not
| Entity | Account Number | Description | Date | Balance | Prior Month |
| FVE | 4000-00-00 | SALES 1 | 3/31/2022 | ($2,330.08) | ($5,972.62) |
| FVE | 4000-00-00 | SALES 1 | 4/30/2022 | ($4,890.36) | ($2,330.08) |
| FVE | 4000-00-00 | SALES 1 | 5/31/2022 | ($5,972.62) | ($13,285.10) |
| FVE | 4000-00-00 | SALES 1 | 6/30/2022 | ($13,285.10) | ($14,388.49) |
| FVE | 4000-00-00 | SALES 1 | 7/31/2022 | ($14,388.49) | ($20,713) |
| FVE | 4000-00-00 | SALES 1 | 8/31/2022 | ($20,713.00) | ($32,338.88) |
| FVE | 4000-00-00 | SALES 1 | 9/30/2022 | ($32,338.88) | ($31,558.75) |
| FVE | 4000-00-00 | SALES 1 | 10/31/2022 | ($31,558.75) | ($47,740.27) |
| FVE | 4000-00-00 | SALES 1 | 11/30/2022 | ($47,740.27) | ($57,606.09) |
| FVE | 4000-00-00 | SALES 1 | 12/31/2022 | ($49,812.30) | ($35,934.17) |
| FVE | 4000-00-00 | SALES 1 | 1/31/2023 | ($2,910.00) | $0 |
| FVE | 4000-00-00 | SALES 1 | 2/28/2023 | ($15,823.60) | ($2,910) |
| FVE | 4000-00-00 | SALES 1 | 3/31/2023 | ($25,206.91) | ($15,823.60) |
| FVE | 4000-00-00 | SALES 1 | 4/30/2023 | ($35,934.17) | ($25,206.91) |
| FVE | 4000-00-00 | SALES 1 | 5/31/2023 | ($57,606.09) | ($49,812.30) |
| WESS | 4000 | SALES 3 | 3/31/2022 | ($2,275.00) | ($265,195.40) |
| WESS | 4000 | SALES 3 | 4/30/2022 | ($127,130.40) | ($2,275) |
| WESS | 4000 | SALES 3 | 5/31/2022 | ($265,195.40) | ($448,113.75) |
| WESS | 4000 | SALES 3 | 6/30/2022 | ($448,113.75) | ($518,720.40) |
| WESS | 4000 | SALES 3 | 7/31/2022 | ($518,720.40) | ($748,675.40) |
| WESS | 4000 | SALES 3 | 8/31/2022 | ($748,675.40) | ($938,658.77) |
| WESS | 4000 | SALES 3 | 9/30/2022 | ($938,658.77) | ($1,090,123.77) |
| WESS | 4000 | SALES 3 | 10/31/2022 | ($1,090,123.77) | ($1,253,208.77) |
| WESS | 4000 | SALES 3 | 11/30/2022 | ($1,253,208.77) | ($1,476,318.77) |
| WESS | 4000 | SALES 3 | 12/31/2022 | ($1,476,318.77) | ($783,390) |
| WESS | 4000 | SALES 3 | 1/31/2023 | ($183,245.00) | $0 |
| WESS | 4000 | SALES 3 | 2/28/2023 | ($283,535.00) | ($183,245) |
| WESS | 4000 | SALES 3 | 3/31/2023 | ($360,890.00) | ($283,535) |
| WESS | 4000 | SALES 3 | 4/30/2023 | ($554,170.00) | ($360,890) |
| WESS | 4000 | SALES 3 | 5/31/2023 | ($783,390.00) | ($554,170) |
Sorry, my bad Alien Sx ... your solution is working when filtering the table in Power Query... I'm doing something wrong in the visualizations ... will advise
- AlienSx3 years agoSuper User
JRParker it should work. I just grouped by 3 columns (Entity, Account Number and Description) and worked just fine
- JRParker3 years agoHelper III
Sorry, such a nubie at this... so after and outside the query, I need to group the data as your stated in your original post:
"group your data by Entity and Account Number and then do whatever you want to each group of data. If you have 1 balance per month per every Entity & Account then try this"
I need to explore grouping in Data View and/or Report View.
- JRParker3 years agoHelper III
Almost forgot the bigger objective. Determining the Prior Month was really the first of two steps in my effort to ultimately calculate the "Current Month Activity". In accounting, the Income Statement (not the Balance Sheet) Trial Balance accounts are a cumlative balance starting at the beginning of the fiscal year (in this case the calendar year where January is month 1), and resets at the end of the year. So, with the exception of month 1, the difference between the Balance and Prior Month would be the Current Month Activity. In the case of month 1, the Balance is the Current Month Activity. For example, Balance in month 1 is 1000, Balance in month 2 is 1600, then the Currnet Month Activity for month 1 and month 2 would be 1000 and 600, respectively.
With the Prior Month determined, the logic would be:
IF month =1 THEN Current Month Activity = Balance ELSE Current Month Activity = Balance - Prior Month.
After Current Month Activity was determined, then the Prior Month column was going to be remvoved as no longer needed.
I'm not sure how to do this, particuarly in light of the grouping that needs to be done to get it right. Can you advise?
- JRParker3 years agoHelper III
AlienSx, I don't understand where, when, or how you're grouping to get the results.
This is the Power Query with your code embedded; presumably I did this correctly:
let
Source = #"Trial Balance",
#"Merged Queries" = Table.NestedJoin(Source, {"Account Number"}, #"Account Category", {"Account Number"}, "Account Category", JoinKind.LeftOuter),
#"Expanded Account Category" = Table.ExpandTableColumn(#"Merged Queries", "Account Category", {"Statement"}, {"Account Category.Statement"}),
#"Filtered Rows" = Table.SelectRows(#"Expanded Account Category", each ([Account Category.Statement] = "Income Statement")),
f = (tbl as table) as table =>
[sorted = Table.Sort(tbl, "Date"),
prior_month = {0} & List.RemoveLastN( tbl[Balance], 1),
out = Table.FromColumns( Table.ToColumns(tbl) & {prior_month}, Table.ColumnNames(tbl) & {"Prior Month"})] [out],
gr = Table.Group(#"Filtered Rows", {"Entity", "Account Number", "Description", "Account # - Description" }, {{"all", each f(_)}}),
expand = Table.ExpandTableColumn(gr, "all", {"Date", "Balance", "Prior Month"}, {"Date", "Balance", "Prior Month"}),
#"Changed Type" = Table.TransformColumnTypes(expand,{{"Balance", Currency.Type}, {"Prior Month", Currency.Type}, {"Entity", type text}, {"Date", type date}})
in
#"Changed Type"Below is the default output after the query. Note the prior month values equate to the previous row values , but the previous row isn't necessarily the previous month:
Entity Account Number Date Balance Prior Month FVE 4000-00-00 1/31/2023 $ (2,910.00) $ - FVE 4000-00-00 2/28/2023 $ (15,823.60) $ (2,910.00) FVE 4000-00-00 3/31/2023 $ (25,206.91) $ (15,823.60) FVE 4000-00-00 4/30/2023 $ (35,934.17) $ (25,206.91) FVE 4000-00-00 12/31/2022 $ (49,812.30) $ (35,934.17) FVE 4000-00-00 5/31/2023 $ (57,606.09) $ (49,812.30) FVE 4000-00-00 11/30/2022 $ (47,740.27) $ (57,606.09) FVE 4000-00-00 10/31/2022 $ (31,558.75) $ (47,740.27) FVE 4000-00-00 9/30/2022 $ (32,338.88) $ (31,558.75) FVE 4000-00-00 8/31/2022 $ (20,713.00) $ (32,338.88) FVE 4000-00-00 7/31/2022 $ (14,388.49) $ (20,713.00) FVE 4000-00-00 6/30/2022 $ (13,285.10) $ (14,388.49) FVE 4000-00-00 5/31/2022 $ (5,972.62) $ (13,285.10) FVE 4000-00-00 3/31/2022 $ (2,330.08) $ (5,972.62) FVE 4000-00-00 4/30/2022 $ (4,890.36) $ (2,330.08) This is what it looks like after sorting by Date:
Entity Account Number Date Balance Prior Month FVE 4000-00-00 3/31/2022 $ (2,330.08) $ (5,972.62) FVE 4000-00-00 4/30/2022 $ (4,890.36) $ (2,330.08) FVE 4000-00-00 5/31/2022 $ (5,972.62) $ (13,285.10) FVE 4000-00-00 6/30/2022 $ (13,285.10) $ (14,388.49) FVE 4000-00-00 7/31/2022 $ (14,388.49) $ (20,713.00) FVE 4000-00-00 8/31/2022 $ (20,713.00) $ (32,338.88) FVE 4000-00-00 9/30/2022 $ (32,338.88) $ (31,558.75) FVE 4000-00-00 10/31/2022 $ (31,558.75) $ (47,740.27) FVE 4000-00-00 11/30/2022 $ (47,740.27) $ (57,606.09) FVE 4000-00-00 12/31/2022 $ (49,812.30) $ (35,934.17) FVE 4000-00-00 1/31/2023 $ (2,910.00) $ - FVE 4000-00-00 2/28/2023 $ (15,823.60) $ (2,910.00) FVE 4000-00-00 3/31/2023 $ (25,206.91) $ (15,823.60) FVE 4000-00-00 4/30/2023 $ (35,934.17) $ (25,206.91) FVE 4000-00-00 5/31/2023 $ (57,606.09) $ (49,812.30) Apparently, one needs to due additional grouping (other than the original grouping in the code you provided [gr = Table.Group(#"Filtered Rows", {"Entity", "Account Number", "Description", "Account # - Description" }, {{"all", each f(_)}}),) ].After the Query steps above, still in PQ, I performed a Group By (Advanced) Entity, Account Number, and Description, (New Column Name Entity-Acct, Operation All Rows). The result was the New Column of Tables, which I expanded to include the remaining columns... the results are the same as noted above.Appreciate your patience but there is something I'm not getting.