现在用着正常了,谢谢您,辛苦了
请问大神,您文中可以实现展示各个文件夹里文件数量饼图的代码,那请问如何实现展示各个标签的笔记数量饼图呢?
```dataviewjs
let la = ""
let da = ""
let map = dv.index.tags.invMap
for(let i of map.entries())
{
//if(i[1].size>10) {
la += i[0].slice(1)+','
da += i[1].size+','
//}
}
dv.paragraph(`\`\`\`chart
type: pie
labels: [${la}]
series:
- title: none
data: [${da}]
legendPosition: left
labelColors: true
\`\`\``);
```
如果小标签太多了可以取消那个注释,文件数大于一定数量才会显示
就是把那两行的 //
删掉,里面的数字可以视情况改一下
诶嘿,我发现了,你的data那行没有缩进,前面加两个空格就行了
文件数量前面有个空值可能是根目录下有文件,试一下新版的吧
```dataviewjs
let la = ""
let da = ""
for(let i of dv.pages().groupBy(p=>p.file.folder.split("/")[0]))
{
if(i.key=='') la += "/,";
else la += i.key + ",";
da += i.rows.length + ",";
}
dv.paragraph(`\`\`\`chart
type: pie
labels: [${la}]
series:
- title: none
data: [${da}]
width: 50%
legendPosition: left
labelColors: true
\`\`\``);
```
多谢大佬,这个问题已经解决了!
抱歉抱歉,都已经忘了还有一个问题了
```dataviewjs
let y = 2022
let m = Array(12).fill(0).map((v,i)=>{return i});
let d = [31,29,31,30,31,30,31,31,30,31,30,31]
for(let i of m)
{
let n = Array(d[i]).fill(0).map((v,i)=>i+1);
let a = Array(d[i]).fill(0);
for(let j of dv.pages(`""`)
.filter(p=>moment(Number(p.file.cday)).year()==y
&& moment(Number(p.file.cday)).month()==i)
.groupBy(p=>moment(Number(p.file.cday)).date()))
a[j.key-1] = j.rows.length;
if(a.every(p=>p==0))
continue
dv.header(4, i+1+"月");
dv.paragraph(`\`\`\`chart
type: line
labels: [${n}]
series:
- title: 200-笔记
data: [${a}]
labelColors: true
\`\`\``)
}
```
这样看看能不能成吧,dv.pages(
"")
这个里面可以填特定文件夹的
可以了,多谢大神!
ob不愧是前端训练营
我想在dataview中对task做汇总,需要按日记的名字做日期判断,file.name格式是年-月-日_星期,有办法舍弃星期吗?我想只保留年月日然后转换成date做日期比较。
代码是这样的:
TASK from "日记"
WHERE date(file.name) > date("2022-06-06") - dur(1 month) and date(file.name) < date("2022-06-06") and !completed and due <date("2022-06-06")
因为笔记会提前创建,file.cday是不准确的,file.name中的日期是准确的,但是是"2022-06-06_周一"的格式,不能同正常日期比较,所以想把星期一去掉。有没有类似file.name.substring(0,10)的函数可用哪?或者dataviewjs能不能实现类似的功能?我是在Templater中使用的
嗯,我查了下文档,在dataview中的字符串处理函数只有匹配,替换和大小写转换,我对dataview也不太熟练,这第二句的条件着实没看懂,不然用dataviewjs应该可以解决。
我的目的是这样的,如果笔记的日期是2022年6月6号,那么就筛选2022年6月6号前一个月内未完成的任务,如果任务有due日期的话,due日期也需要在2022年6月6号之前。
我现在是这样做的,大体可以实现但是因为笔记会提前创建,file.cday不如笔记标题日期准确,所以一直在尝试用file.name中提取出的日期替换掉file.cday:
TASK from "日记"
WHERE file.cday > date("<% inputDate %>") - dur(1 month) and file.cday < date("<% inputDate %>") and !completed and due <date("<% inputDate %>")
在Template模板中有如下变量定义:let inputDate = tp.file.title.substring(0,10)
我的笔记标题是这个样式的“2022-06-06_周一”,因为多了"_周一"这种星期标识,导致file.name直接通过date转日期的话遇到了问题,不能同正常格式的"2022-06-06"进行日期比较。
这样就可以解决查找一个月内文件的需求了,不过我没有理解这个due日期是什么,所以没办法做出来
```dataviewjs
let files = dv.pages(`#日记`)
.filter(p=>
moment().subtract(1,'month') < moment(p.file.name.split('_')[0]) &&
moment() > moment(p.file.name.split('_')[0])
)
dv.taskList(files.file.tasks)
```