Using dataview, I’m trying to generate a table of pages that have open tasks and display the number of incomplete tasks per page. I am having a lot of trouble getting this to work.
Things I have tried
I have reviewed dataview’s documentation, watched youtube videos, etc., went through the snippet showcase, but cannot find anyone who has done this. Is this even possible?
Not the prettiest way to write this, but the below filters a page’s task list to uncompleted tasks and then uses length on the filtered list to count them.
TABLE length(filter(file.tasks, (t) => !t.completed)) AS "Uncompleted"
WHERE file.tasks AND length(file.tasks) > 0 AND length(filter(file.tasks, (t) => !t.completed)) > 0
I am not sure all the parts of the WHERE line are necessary - the part after the last AND is the one that is limiting the table to show only pages with some incomplete tasks, but if you get an error or an unexpected result you can use only some of the pieces as you investigate.
Any recommendations on where to dig in deeper on the filter functions and other functions within Dataview? I’ve looked at the docs, but they are pretty unhelpful with these more advanced functions. Most videos I’ve watched cover all the basics of DV without a lot of in-depth or more complex queries…
Yeah, the second argument to “filter” looks pretty weird doesn’t it?! It is called an “arrow function” in Jacascript, and exists in a lot of other programming languages also. I think the Dataview Query Language “filter” is inspired by the Array method “filter” in Javascript so looking up intros to “filter array Javascript” or “arrow functions” might get you lots more tutorials and examples. Note that you will have to do some mental translation: Javascript’s “Array filter” syntax is name-of-array.filter(arrow-function) while Dataview’s is filter(name-of-array, arrow-function) like I did above. I almost always check back to the Dataview documentation page for how to write these functions down.