Hey @AutomationNation ,
Give this formula a try. It should return the end-of-month balances for each of your accounts for the last 12 months:
=let(
months_,12,
query_by_col_name_,
LAMBDA(data_, query_, headers_,
QUERY({data_},
LAMBDA(query_text_, data_row1_,
REDUCE(query_text_, FILTER(data_row1_, ISTEXT(data_row1_)),
LAMBDA(query_text_result_, data_col_name_, REGEXREPLACE(query_text_result_, "`" & data_col_name_ & "`", "Col" & MATCH(data_col_name_, data_row1_, 0)))))
(query_, ARRAY_CONSTRAIN(data_, 1, COLUMNS(data_))), headers_)),
hidden_accts_,iferror(query_by_col_name_(Accounts!E:ZZ,"select `Account` where `Hide` = 'Hide' label `Account` '' ",1),""),
liability_accts_,iferror(
query_by_col_name_(Accounts!E:ZZ,"select `Account` where `Class` = 'Liability' label `Account` '' ",1),
query_by_col_name_('Balance History'!A:ZZ,"select `Account` where `Class` = 'Liability' label `Account` '' ",1)),
balance_history_,
query_by_col_name_('Balance History'!A:ZZ,
"select `Date`, `Account`, `Balance`, `Month`
where `Month` > date '"&TEXT(eomonth(today(),-months_-1),"yyyy-MM-dd")&"'
and `Month` <= date '"&TEXT(eomonth(today(),-1),"yyyy-MM-dd")&"'
"&ifna(join(" ",arrayformula(" and `Account` <> """&hidden_accts_&""" ")),"")&"
order by `Date` desc, `Time` desc",1),
balance_table_,
query(
sortn(
{choosecols(balance_history_,1,2),
choosecols(balance_history_,3)*if(ifna(match(choosecols(balance_history_,2),liability_accts_,0),FALSE),-1,1),
eomonth(choosecols(balance_history_,4),0)},9^9,2,4,FALSE,2,TRUE),
"select Col2, max(Col3) group by Col2 pivot Col4",1),
{balance_table_;BYCOL(balance_table_,LAMBDA(col_,if(col_=CHOOSECOLS(balance_table_,1),"Total",sum(col_))))})
You can change the 12
in the second line to however many months of data you want to return.