Intro
This article is a continuation of Budgeting in O3PM.
We now explore how to achieve budgeting in Obsidian using the powerful Dataview plugin.
While Bases is an inbuilt visual tool, Dataview gives us unmatched flexibility to structure, filter, and process budget data in more advanced ways.
Budgeting with Dataview in O3PM
Dataview in a Nutshell
Dataview is a popular community plugin that turns your Obsidian vault into a queryable database. With over 3 million downloads and a thriving ecosystem, it’s a good choice for power users. That is until the release of its successor Datacore.
Unlike Bases, Dataview recognizes both frontmatter properties and inline fields. Inline fields are especially helpful when you want flexibility in formatting or annotating your data.
weight:: 80kg
- Had something extra and a lot to drink. Shouldn’t take this increase too serious.
The double colons (::
) tell Dataview that this is a queryable field.
Step 1: Gathering
Sources
Typical sources of budget information are estimates, offers, and invoices. Once received, we extract the relevant data and store it in our vault.
Like in Budget with Bases listed with all their pros and cons, we have two choices to document the budget information:
- Inside the object note
- In a separate “cost” note
For Dataview, I recommend a separate cost note. Why? Because in addition to Bases’ direct data-queries, Dataview offers relational data querying.
Properties
Here’s a set of properties I’ve found useful across multiple projects:
net
— Cost amountresponsible
— Person in charge of the entrysource
— Origin of cost: estimate, offer, invoicestatus
— Status of the cost (e.g. planned or paid)account
— Financial account for bookingcategory
— Cost category (e.g. external services, material)section
— Optional sub-cluster (e.g. building, team, phase)transfer_date
— When the cost is expected to hit the budget
You’re free to rename these properties, just make sure your queries reflect the changes.
Example: Cost Properties in Object Note
net: -10000
responsible: "[[@ Person 1]]"
source: "[[Estimate - Installation - Component 1]]"
status: "[[DONE]]"
account: "[[Account - Sample Project]]"
category: "[[External Costs]]"
section: "[[Deliverable Car X1]]"
transfer-date: 2025
Step 2: Querying
In lieu to Bases, we have a bit more flexibility in Dataview.
The Query
table without ID
cost_info.section AS Section,
cost_info.status AS Status,
file.link AS "Cost Carrier",
replace(cost_info.net + " €", ".", ",") AS Amount,
short as "Descr.",
cost_info AS "Cost Info",
cost_info.source as Source,
cost_info.account AS Account
FROM [[PRJT - Sample Project]]
WHERE cost_info
Explanation
table without ID
— Creates a plain table without unique row IDs.cost_info.section AS Section
— Grabs thesection
property from the nestedcost_info
object.file.link AS "Cost Carrier"
— Links to the file containing the budget entry.replace(...)
— Formats the amount and adds a € sign with German-style decimal commas.short
— An additional description or label field, if available.cost_info
— Displays the full cost object for reference.FROM [[PRJT - Sample Project]]
— Limits the query to files tagged with this project.WHERE cost_info
— Ensures only files with cost info are shown.
Output
The Query generates a simple table, that is ready for the Interface-Step.

Step 3: Interfacing
As noted in The Basics of Interfaces, interfaces are important. Even the cleanest cost report is useless if you can’t share it efficiently with others.
Dataview doesn’t have native fancy copy or export functions like Bases, but it does have its interface options.
Copy and paste
Dataview tables can be copied via good old Ctrl + C
and pasted into your spreadsheet app.
Copy
Select the table

Copy the content

Paste
Paste the content into a spreadsheet.

Ctrl + V
preserves formatting

Ctrl + Shift + V
pastes plain text
In either case, some cleanup is necessary.
Cleanup
Simply by copying a Dataview table over into a spreadsheet leads to list-values being put into separate cells.
To circumvent this, we need some manual labor to clean up the tables by copying values into single cells and formating the table:

Table to CSV Exporter
If we want to export larger or more tables, the Obsidian community also offers here a solution: The Table to CSV Exporter plugin
The plugin adds a new command: “Export table to CSV file”. This will only work when your currently active pane is in reading mode. When the command is executed a .csv
file is written according to the settings in your vault’s main folder. This CSV file contains the data of the first table in the reading mode of the note.
The plugin works on mobile, too.


Note: It may have issues with €
signs, so some post-export cleanup or query modifications might be needed.
Outro
Dataview brings depth and flexibility to budgeting in O3PM.
While it requires a bit more setup than Bases, it pays off in precision, custom views, and dynamic queries.
By storing your budget data close to your work, and using Dataview to extract insight, you stay in control of both the big picture and the fine details — without leaving Obsidian.
If you want to see a live setup, check out the O3PM Sample Vault on GitHub
Leave a Reply