DataviewJS 数据透视表

genre: 汇总 YAML

要点:

  • 数据重组赋值给新建对象的属性
  • 不同 groupBy 构成不同组合
  • 不要忘记 groupBy 后用 rows 指代每个组
  • 以及用 dv.array() 将普通 JS 数组转为 Dataview 数组
档 1 文本
---
撰写文章:
  - 小红
文章排版:
  - 小明
---
档 2 文本
---
撰写文章:
  - 小明
文章排版:
  - 小红
---
档 3 文本
---
撰写文章:
  - 小明
  - 小红
文章排版:
  - 小红
---

代码 1:人员负责项目·带筛选
// tar 筛选人员,handle 筛选工作
let tar = '小明'; dv.header(4, `${tar}负责项目`)
let handle = ['撰写文章', '文章排版']
let files = dv.pages(`"文件目录"`)
let tdata = []
files.map(p=> handle.map(w=> { if (p[w].includes(tar))
    return tdata.push({ work: w, link: p.file.link })
})); tdata = dv.array(tdata).groupBy(p=> p.work)  // group
dv.table(['负责', '项目'], tdata.map(p=> [p.key, p.rows.link]))  // 输出
  • JS 方法:.map().includes().push().groupBy()
效果(一 tar 一表)


代码 2:项目人员负责·不筛选
let files = dv.pages(`"文件目录"`)
let tdata = []
files.map(p=> { for (let prop in p) { for (let i = 0; i < p[prop].length; i++) {
    tdata.push({ work: prop, worker: p[prop][i], link: p.file.link })
}}}); tdata = dv.array(tdata).groupBy(p=> p.link)  // group
for (let p of tdata) { dv.header(4, p.key);
    dv.table(['人员', '负责'], p.rows.groupBy(p=> p.worker).map(p=> [p.key, p.rows.work]))  // 再 group
}
效果(一张表)

相关:Dataviewjs的奇技淫巧 #191Dataviewjs的奇技淫巧 #222
通过排列组合本话题代码,及参考相关帖子代码,可实现各种自定义数据透视表。

2 个赞