Ooker
April 28, 2022, 9:36am
1
Say I have the notes GoalA, GoalB, GoalC, GoalD, TaskX, TaskY, TaskZ like this:
GoalA:
toTask:: [[TaskX]]
toTask:: [[TaskZ]]
field:: yes
GoalB:
toTask:: [[TaskX]]
field:: no
GoalC:
toTask:: [[TaskX]]
field:: yes
GoalD:
toTask:: [[TaskY]]
field:: yes
TaskX:
key:: ok
TaskY:
key:: ok
TaskZ:
key:: not ok
Is there a way to query all tasks (1) which have key value ok and (2) whose goals have field value yes? And the second column would be only the goals with yes. The output would be:
|File |Goals|
|-----|-----|
|TaskX|GoalA|
| |GoalC|
|TaskY|GoalD|
And what if the restraining information for the goals are not a particular field value, but the folder they are contained, or the string they start with?
This question is a next step of this one: Note A and B have `key::[[X]]`. I query X. How can I display A and B in the query?
Craig
April 28, 2022, 2:39pm
2
If I understood your query correctly, I think you need to use the filter() command.
You can read more about it in the docs: Functions - Dataview
2 Likes
Hi!
@Craig ’s solution is right.
But the condition key = "ok" is missing.
## Filtering field in goal
```dataview
TABLE
file.inlinks,
file.inlinks.field,
filter(file.inlinks, (i) => i.field = "yes") AS Goals
FROM "tasks-folder-path"
WHERE key = "ok"
WHERE filter(file.inlinks, (i) => i.field = "yes")
SORT file.link ASC
```
---
## Filtering goal folder
```dataview
TABLE
file.inlinks,
file.inlinks.file.folder,
filter(file.inlinks, (i) => i.file.folder = "goal-folder-path") AS Goals
FROM "tasks-folder-path"
WHERE key = "ok"
WHERE filter(file.inlinks, (i) => i.file.folder = "goal-folder-path")
SORT file.link ASC
```
---
## Filtering goal name
```dataview
TABLE
file.inlinks,
file.inlinks.file.name,
filter(file.inlinks, (i) => startswith(i.file.name, "Ooker")) AS Goals
FROM "tasks-folder-path"
WHERE key = "ok"
WHERE filter(file.inlinks, (i) => startswith(i.file.name, "Ooker"))
SORT file.link ASC
```
Note: the first two columns are for test purposes… to see the values before the filter
3 Likes
Ooker
April 29, 2022, 6:20am
4
thank you.
WHERE filter(file.inlinks, (i) => i.field = "yes")
In my understanding, filter() returns an array/list. Why does WHERE accept that?
Craig
April 29, 2022, 1:26pm
5
WHERE evaluates the expression and looks for something that looks true or false. In the case of filter(), if the returned list has any values then it considers it a true result; if the list is empty it considers it a false result.
Because of this, the WHERE clause will filter out any pages where no backlinked pages have field=yes.
2 Likes
Mat_35
April 29, 2022, 2:40pm
6
Practically this method allow to convert the markdown table in dataview?
system
Closed
May 6, 2022, 2:40pm
7
This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.