汇总行
在电子表格中,我们可以对列数据进行运算,如求和、未平均值等。下面我们来看一下如何在 Dataview 查询的结果中实现对列数据的求和。
//'''dataviewjs
const query = `TABLE praying, training, situps, steps
FROM "10 Example Data/dailys"
WHERE file.day.month = 2`
const nameOfTotalRow = "Sums";
let DQL = await dv.tryQuery(query);
const sums = [nameOfTotalRow];
// 如果在 DQL 查询语句中添加了 `WITHOUT ID`,这里就需要改成从 `0` 开始遍历
for (let i = 1; i < DQL.headers.length; i++) {
let sum = 0;
const dataType = getDatatypeOfColumn(i, DQL.values)
// 只有数字和持续时间的数据类型才会被计算
if (!["number", "duration"].includes(dataType)) {
sums.push("")
continue;
}
// 计算每一列的总和
for (let k = 0; k < DQL.values.length; k++) {
// 行 `k`, 列 `i` 的值
let currentValue = DQL.values[k][i];
if (currentValue) sum += currentValue
}
if (!sum) sum = ""
sums.push(dataType === "duration" ? dv.luxon.Duration.fromMillis(sum) : sum);
}
function getDatatypeOfColumn(columnNo, values) {
let i = 0;
let datatype;
while (i < DQL.values[0].length && (!datatype || datatype === "null")) {
datatype = dv.func.typeof(DQL.values[i][columnNo])
i++;
}
return datatype;
}
// 添加分隔线
let hrArray = Array(DQL.headers.length).fill('<hr style="padding:0; margin:0 -10px;">');
DQL.values.push(hrArray)
DQL.values.push(sums)
dv.table(DQL.headers, DQL.values)
//'''dataviewjs
显示效果:


浙公网安备 33010602011771号