Cost Centre Feature Suggestion

mark's Avatar


20 Jan, 2021 08:41 AM

I was on a Financial Independence Zoom meet up yesterday evening and saw how the organiser had graphed their expenses for the year using broad categories such as Fixed Costs and Variable Costs. I don’t think this is a feature supported in Money Dance right now, so I’m making the feature suggestion below. Please chime in if there is a way to do this already.

I am calling this the Cost Centre concept, where you choose arbitrary groups of categories to report/graph by. This isn’t a case of using the ‘root’ or parent categories as using these limits you to reporting according to the structural organisation of the categories. For example, travel insurance could be categorised under a parent category of insurance or of holidays - but not both! The reports group by parent categories only. Using cost centres we can form loose groups of categories allowing for different aggregations of the transactions: (this a more flexible group-by for those with a SQL background)

Fixed Expenses - eg mortgage, energy, water, professional memberships, etc.
Variable Expenses - eg groceries, clothing, gym membership, going out
One-Off Expenses - eg bathroom renovation, new boiler, new computer
Holidays - eg flights, hotels, spending money, travel insurance, car hire

As an example, we could then graph by month for the year based on four cost centres and then year on year see how well we’re succeeding at driving down the totals for each cost centre - if that’s your goal!

Money Dance has the great advantage that income/expense categories can be very granular and this is how I get most value from the software. However, I would find the ability to see a report/graph by cost centre as described above extremely useful for year end reporting.

I don’t think the cost centre concept can currently be modelled using either the existing app feature set or plug-ins. If this can already be done, then great! If not, please take this as a suggestion for a future version of Money Dance.

PS if it’s not supported does anyone have a view on whether a new plug-in could do this?

  1. 1 Posted by dwg on 20 Jan, 2021 09:30 AM

    dwg's Avatar

    I'm a fellow user.

    You threw me when you said cost centre.

    Cost centres are used in business, each department or group would be a separate cost centre, rather than a grouping of expense types.

    Moneydance does not allow for the arbitrary grouping of expenses under a heading, it is all based on the category structure. This is what would be needed to make it work within the existing framework.

    To do it today you would have to create a custom report (graph) for each grouping that you want. So you could certain get the data it is just not the presentation you want.

    I do not see why such a report could not be created by an extension, there have been reports created by extensions over the years.

  2. 2 Posted by mark on 20 Jan, 2021 12:09 PM

    mark's Avatar

    Point taken on the use of Cost Centre as a name for this feature.

    A more accurate description would be an ability to classify expense (and income) categories.

    This would allow for two types of classification that adds flexibility to the rigid requirement presently to report upon the category parent/child structure:

    Functional Classification - eg house, car, etc. (which is what we have today, except unrestricted by parent/child relationships)

    Natural Classification - eg fixed, variable, one-off as per my original post.

  3. 3 Posted by harold on 11 Feb, 2021 02:20 AM

    harold's Avatar

    Hi, wouldn't tags be helpful here: Fixed and Variable?

  4. 4 Posted by mark on 10 Apr, 2021 10:37 AM

    mark's Avatar

    Hi @harold, if I could apply a tag at the category level rather than at the transaction level that would indeed offer a solution. My understanding is that tags are a transaction level attribute.

  5. 5 Posted by Stuart Beesley ... on 10 Apr, 2021 10:53 AM

    Stuart Beesley (Mr Toolbox)'s Avatar

    Use ‘fixed’ in the category name and then filter?
    Use fixed as the root category

  6. 6 Posted by mark on 10 Apr, 2021 12:02 PM

    mark's Avatar

    Hi Stuart, thanks for your suggestions. I'd go with the first option with a symbol suffix I think. I'm having a look at your extension scripts now, thanks for making them available.

  7. 7 Posted by Stuart Beesley ... on 10 Apr, 2021 12:14 PM

    Stuart Beesley (Mr Toolbox)'s Avatar

    ... sounds like you need extract_data... dump to csv and open in excel.... depending on demand I could consider extra filters

  8. 8 Posted by Stuart Beesley ... on 10 Apr, 2021 12:14 PM

    Stuart Beesley (Mr Toolbox)'s Avatar

    Mike Bray also has a new report writer extension tool too...

  9. 9 Posted by mark on 10 Apr, 2021 09:10 PM

    mark's Avatar

    Cheers Stuart, I've been playing with your extract_data python script most of today since your last comment.

    I've added a filter by category option to the python script, I can send you the code if you like. This has been useful to find out how the 'other transaction' part of the api is working.

    I've now discovered that each category has a comments field and I can use this to store a classification and export the category comment against the transaction split category in the csv output.

  10. 10 Posted by Stuart Beesley ... on 10 Apr, 2021 09:18 PM

    Stuart Beesley (Mr Toolbox)'s Avatar

    Well done. By all means send me your version.

  11. 11 Posted by mark on 16 Apr, 2021 04:13 PM

    mark's Avatar

    Stuart, this is my updated version of with the addition of a category filter for extraction of account register transactions. Feel free to merge into your codebase if you wish.

    It filters only for Account.AccountType.EXPENSE and Account.AccountType.INCOME.

  12. 12 Posted by mark on 16 Apr, 2021 04:15 PM

    mark's Avatar

    PY file didn't attach to my last message.

  13. 13 Posted by Stuart Beesley ... on 17 Apr, 2021 01:01 PM

    Stuart Beesley (Mr Toolbox)'s Avatar

    Hi Mark,

    I like the code change and especially as it's 'sympathetic' to my code.. So a nice addition, and I have incorporated it..... I almost made no changes, but I think there might be a slight (rare-iso) issue... When on a split record (your file line 6899-6905), we need to check self (txn), and potentially the parent (ParentTxn) rather than .getOtherTxn() - (I agree it's a brain twister)... I have amended this section. Could you take a look and confirm you agree? Perhaps you could run your version and mine on your dataset filtering the same data and confirm it's OK/the same? If so, and it works for you, I will release the amended / updated code....


  14. 14 Posted by mark on 18 Apr, 2021 12:31 PM

    mark's Avatar

    Hi Stuart

    Thanks for incorporating my changes, I aimed to be as consistent with your style and placement as I could :-)

    I compared the number of rows outtputted by your code and by my code and they agree for seven scenarios covering category matching that included single-entry splits and multiple-entry splits.

    I'm not sure why you're also checking whether the Parent Txn has a category account type of income/expense though. This is new to me so I'm probably missing something, but I thought that Parent Transactions are the source side of the entry and so the AccountType must be a Bank Account, Credit Card, etc? If a refund is processed resulting in a negative value against an expense category this is still registered on the Split Txn side, rather than the Parent Txn being of income/expense type and the value being made positive - I ran a check to confirm for my own satisfaction.

    As a further check, I removed from your code the additional conditionals that include the check against Parent Txn (in two places):

    isCategory(parentAccount) and categoriesFilter_EAR in (parentAccount.getFullAccountName().upper().strip()))

    and re-ran the seven scenarios - the row counts were consistent with my earlier results. This makes me wonder whether my dataset is missing some types of transactions that yours has.

    Can you help me with understanding under what circumstances a ParentTxn passed into isCategory can return true?


  15. 15 Posted by Stuart Beesley ... on 18 Apr, 2021 01:56 PM

    Stuart Beesley (Mr Toolbox)'s Avatar

    Hi Mark. As you probably know, categories are actually accounts. Thus you can actually have a category to category txn. In this case the parent would hold a category.

    Now, I agree that the program pre filters txns for selected accounts, so probably a parent will never have a category using this filter. But future proofing in case we decide to also pre filter select categories too.

    Given either side of a txn can be a category, it’s best to code for it in all scenarios whether receiving a split or a parent on a filtered txn. But it is also possible that you may not encounter this.


  16. 16 Posted by Stuart Beesley ... on 18 Apr, 2021 01:58 PM

    Stuart Beesley (Mr Toolbox)'s Avatar

    Ps. To test. You can go to the register for a category and enter a (parent) txn with a category set to an account; even with multiple splits. This would therefore be a parent which is a category and splits that are accounts. (In theory).

  17. 17 Posted by mark on 18 Apr, 2021 04:23 PM

    mark's Avatar

    What you say makes sense Stuart, thanks.

    I'm aware that categories are classed as accounts but hadn't considered that transactions could be made directly between categories, or indeed what sort of scenario this type of transaction would be used for in practice.

    Partly because for me it's not immediately obvious that such transactions can be made through the UI. I've now added an expense category to the side bar which has given access to the registry for that category and have now added a category to category transaction. Will try a test later with splits.

    Do you know what category to category transactions are used for in practice? This functionality seems a bit hidden away to me, unless I've missed somewhere else they can be accessed through the UI.

  18. 18 Posted by mark on 18 Apr, 2021 04:30 PM

    mark's Avatar

    My last post seems to have got lost and hasn't added to the thread.

    Thanks for the explanation Stuart, what you say makes sense to me.

    I hadn't thought that category to category transactions were a 'thing' in Money Dance. I've added an expense category to the sidebar and can now add a category-to-category transaction which I'll have a go testing with splits later on. Seems a bit hidden away this capability, is it achievable elsewhere in the UI?

    Do you know what category-to-category transactions would be used for in practice?

  19. 19 Posted by Stuart Beesley ... on 18 Apr, 2021 04:45 PM

    Stuart Beesley (Mr Toolbox)'s Avatar

    Tools>Categories> highlight one > right click > Open in new window.
    Create new Txn.
    At this point if you use a category of an Account, then you will have a parent which is a category and a split which is an account.
    Or just use a category, and thus you have a cat to cat txn.

    IMHO - this can be dangerous as you can get 'lost' txns and they are difficult to find.

    However, I do use them. I create a sub account under my main bank account called 'allocations' and I use cat>>cat txns to 'move' / 'allocate' costs from one category to another. The total always nets to zero. Hence, I can report on the account and / or include the sub account and include/exclude the allocations...

  20. 20 Posted by mark on 18 Apr, 2021 05:51 PM

    mark's Avatar

    Interesting, thanks!

  21. 21 Posted by dwg on 18 Apr, 2021 09:18 PM

    dwg's Avatar

    I'm a fellow user.

    For what it is worth I do use category to category transfers. As Stuart said categories are really just a type of account, and Also to note as Moneydance is based on Double Entry accounting every transaction is just movement of funds between two accounts.

    There are two situations I have used category to category transfers.

    The first is for older versions of Moneydance where the Tax date was only used in very few reports. I would use accounting accrual techniques along with categories to ensure transactions were reported during the period when I needed them to rather than when they were actually paid.

    Another time I use them are with things like funds and annual tax statements. The figures in the Tax statement are embedded in the data throughout the year, hence they have no value as far as the accounts are concerned but I pass them through the accounts in Moneydance using category to category transfers, so I can generate a Income and Expense report that contains needed information for Tax time.

    I do the same thing with capital gains as well.

    Moneydance has the flexibility to do this, but I concede you have to understand what is going on to keep everything in order.

  22. 22 Posted by mark on 27 Apr, 2021 01:39 PM

    mark's Avatar

    Thanks @dwg. Would be great for Money Dance documentation to outline these advanced (to me) use-cases you're employing.

  23. System closed this discussion on 27 Jul, 2021 01:40 PM.

Comments are currently closed for this discussion. You can start a new one.

Keyboard shortcuts


? Show this help
ESC Blurs the current field

Comment Form

r Focus the comment reply box
^ + ↩ Submit the comment

You can use Command ⌘ instead of Control ^ on Mac