[Dataview] Table of Notes Schedule - Multiple Notes Per Row - Much Confusion

What I’m trying to do

I’m trying to use dataview to create a table exactly like this one:

The notes all feature the following yaml:

type: post
postdate: 2023-06-01
person: Kaovanny
channel: SLSI
scheduled: false

Essentially I want to make a table of notes sorted vertically by post date and horizontally by channel. I’ve had an immense amount of trouble with this, but I feel like I’m probably missing something obvious. As best I can tell dataview should be able to do this easily.

Things I have tried

The best I’ve been able to do is reference one channel at a time.

LIST rows.file.link FROM #post
WHERE channel = "SLS"
GROUP BY postdate

I was considering doing this and using a columns plugin to achieve a similar result, but that just seems really inelegant and messy.

Any and all help would be greatly appreciated!

1 Like

My clumsy way of creating a table below. Not what you want. Hope someone else can provide an elegant solution for you.

date: 2023-06-01
SLSYT: Pride Tribute
SLSI: post pride tribute 1
SLIL: post sli 1
SLSTT: post pride tribute 1

WHERE file.name = this.file.name

1 Like

The trick to this kind of output is that to find something common to group by, aka postdate, and then for each of the columns select the relevant entries in the rows array.

This results in a query like the following:

  join(filter(rows, (r) => r.channel = "SLSYT").file.link, ", ") as "SLSYT",
  join(filter(rows, (r) => r.channel = "SLSI").file.link, ", ") as "SLSI",
  join(filter(rows, (r) => r.channel = "SLII").file.link, ", ") as "SLII",
  join(filter(rows, (r) => r.channel = "SLSTT").file.link, ", ") as "SLSTT"
WHERE channel AND postdate
GROUP BY postdate

From a similar test run in my test vault I got this output:

If you leave out the join(), you’ll get lists of each result (most often possibly with only one item)

1 Like

Thanks for writing this up! I just tried it out and it works perfectly!

I had been diving into the dataviewjs to try and figure this out. This is so much simpler and makes so much since! There are actually many tables I’d like to make of this style, so knowing this pattern is extremely helpful.


Thank you again for the help with that! It has worked out perfectly. If you have time, I’d love if you could help me tweak it just a little bit.

I’ve run into a small issue where I’d like some posts to appear in more then one column on the table. I’ve tried sever different syntax variants of contains instead of r.channel = “lorem” to no avail. The YAML it would be referencing would be:

channel: [SLSTT, SLSIG] as well as the usual channel: SLSIG etc. Basically some posts will be cross posted to other channels and I wanted to have it update to reflect that by adding additional values to the channel key in the YAML instead of having to make a whole new note.

Everything I’ve tried keeps spitting errors. If you have the time I’d love to get your thoughts. Also, if it’s a wildly difficult thing to do, I can live without that feature.


This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.