Hi,
I'm trying to write a BQL query for generating a monthly budget report. Besides tracking monthly expenses, I also want to track certain transfers between assets: as an example, I have a company Starbucks card that I can load up with additional money and get a company contribution on top. Ideally I would like to see my expenses, including these transfers as they are technically expenses; additionally any expense happening inside the card shouldn't be captured in the report.
Hopefully this is clearer with an example. Imagine you have the following transactions:
--------------------------------------------------------------------------------------------------------------------
2019-12-01 open Equity:OpeningBalances
2019-12-01 open Assets:Cash:CurrentAccount
2019-12-01 open Assets:CompanyCard:Starbucks
2019-12-01 open Income:CompanyCard:Starbucks
2019-12-01 open Expenses:Coffee
2019-12-02 * "Opening balance"
Assets:Cash:CurrentAccount 100 USD
Equity:OpeningBalances
2019-12-02 * "Loading up Starbucks card"
Assets:Cash:CurrentAccount -20 USD
Assets:CompanyCard:Starbucks
2019-12-02 * "Company tops up with 10%"
Assets:CompanyCard:Starbucks 2 USD
Income:CompanyCard:Starbucks
2019-12-02 * "Buy coffee with the card"
Assets:CompanyCard:Starbucks -10 USD
Expenses:Coffee
2019-12-02 * "Buy coffee without the card"
Assets:Cash:CurrentAccount -5 USD
Expenses:Coffee
---------------------------------------------------------------------------------------------------------------------
Ideally I would like an output like this:
account total
---------------------------- ------
Assets:CompanyCard:Starbucks 20 USD
Expenses:Coffee 5 USD
----------------------------------------------------------------------------------------------------------------------
Basically only the cash transactions are captured - not the company top-up inside the card or any coffee bought with the card.
Is there any way to do this? I've tried several combinations of BQL and this is the closest I've got:
----------------------------------------------------
SELECT account, convert(units(sum(position)), "USD") as total WHERE (account ~ "Assets:CompanyCard:Starbucks" and "Assets:Cash:CurrentAccount" in other_accounts) or account ~ "Expenses";
----------------------------------------------------
But this isn't great as I would like to do this for multiple company cards (IN doesn't do a tree match, only an exact match).
Any advice? Thanks.