Currently I use Obsidian for my main note taking. I have about 20k notes. I use Dataview and inline properties heavily.
I would like to see if I can duplicate my workflow within Coda, now that there are canvas columns.
I do a lot of querying across all of my notes, filtering using various inline properties. One example is that I have a query that creates a table of Knowledge topics and each Knowledge topic page has queries within that aggregate all of my notes that have that specific Knowledge Topic in their Knowledge Topic property. These could be all type of entities/pages like foods, exercises, articles, books, random thoughts, courses, projects, people, places, apps, plants, media, whatever.
One things I love with this setup is that I can have a single entity/page belong to multiple types/tables. Fennel can be in the food table and the plant table. Or Coda can be in the app table and the knowledge topic table.
I am I correct in my understanding that I would need to put every page/entity into a single master table in Coda to be able to query and filter down across everything? Then I would need to have a column for every possible property amongst all of those pages? Can Coda handle this? Like I said I have about 20k pages and it looks like a little over 200 unique properties between them and I know I’ll be adding more, so maybe 300 properties?
Is there another way?
Could you use a multi-select lookup for ‘tags’ instead? I’ve been working on moving over some of my personal knowledge hub from Obsidian to Coda and I have a top level table where each row acts like an Obsidian page. That table has a tags column where I can choose multiple tags (like plant and food for example).
Tags would just be one property, since each of my pages have tags. Another property might be Knowledge Topics (another multi-select).
Some more property examples: Author, Created Date, Priority, Rating, URL, Workout, Week, Air Quality Index, Foods, Mood, Energy Level, Weight. etc etc. And each of those could be a multi-select, or a number, or a text block, or a lookup, etc.
One idea here would be to emulate something similar to frontmatter/dataview in Obsidian. You could simply have lines at the top of each canvas with those properties written inline (something like #Author: ~~~~) and then when you want to find pages with a specific author, you can pull out that author property with a formula something very roughly like:
PagesTable.[Canvas Column].Filter(CurrentValue.Split(LineBreak()).Filter(CurrentValue.StartsWith('#Author: [search value]').Count() > 0)
This would remove the need for many separate columns for different page properties. Also, if this was a canvas formula in a canvas cell (say on a knowledge topic where you want to find related pages), you could just replace ‘search text’ in my example formula with
thisRow.[Display Column] to get the surrounding page’s name.
Here is a rough example of what I am thinking of. Look into the Science row to see a canvas formula that is looking for pages who have their knowledge topic set to ‘science’ based on the surrounding row’s name:
What do you think?
Taking it even one step further, you can use some fancy formulas to construct an object out of all the properties found on the page and have that to use later when looking for certain pages:
I added a Properties Object column which does this, and you could then find a page with something like
Pages.Filter(CurrentValue.[Properties Object].ParseJSON('$.Rating') = 10).
I’m so happy to see this question because coincidentally, I’ve been trying to achieve something like this too! I used it to apply for the maker fund. There’s still some way to go to getting thy full functionality and it’s a little bit clunky but hopefully you can scope out this implantation and get a feel for how it works.
What it basically allows you to do is use inline tags, then automatically aggregates all tags in another page. In this way, you can organise your thoughts by topic, even if they’re across different notes.
Sharing via mobile, hopefully it allows you to see. I’ll check back in the morninggg
I should add, the content in here is all filler and doesn’t make much sense, but hopefully demonstrates the use case