如何解决如何使用2个子组创建2个折线图 按键过滤通过其他字段过滤
我有这个数据集
function getPermissionsList() {
const fileId = "<FILE,FOLDER OR SHARED DRIVE ID HERE>"; // ID of your shared drive
// THIS IS IMPORTANT! The default value is false,so the call won't
// work with shared drives unless you change this via optional arguments
const args = {
supportsAllDrives: true
};
// Use advanced service to get the permissions list for the shared drive
let pList = Drive.Permissions.list(fileId,args);
//Put email and role in an array
let editors = pList.items;
var arr = [];
for (var i = 0; i < editors.length; i++) {
let email = editors[i].emailAddress;
let role = editors[i].role;
arr.push([email,role]);
}
Logger.log(arr);
}
我需要创建两个折线图:
- 第一个包含subgroup1_1和subgroup1_2的行图,已包含在group1中;
- 第二行图表,其中包含subgroup2_1和subgroup2_2,已包含在group2中。
请帮助,代码已附加-https://jsfiddle.net/spectr747/827s3m59/25/
解决方法
dc.js或交叉过滤器中没有内置内容可以按照您描述的方式进行分组。
但是构造一个fake group可以很容易地过滤掉组返回的垃圾箱,只显示与前缀匹配的垃圾箱。
按键过滤
这是一个伪造组的构造函数,该伪造组通过键过滤垃圾箱:
function filter_keys(source_group,f) {
return {
all:function () {
return source_group.all().filter(function(d) {
return f(d.key);
});
}
};
}
像这样使用它:
rowChart_2
// ...
.group(filter_keys(bGroup,k => /^subgroup1/.test(k)));
rowChart_3
// ...
.group(filter_keys(bGroup,k => /^subgroup2/.test(k)));
请注意,这两个行图不会互相过滤,因为a group does not observe its own dimension's groups。如果希望它们彼此过滤,则可以使用具有相同定义的两个维(但是当另一个被过滤时,一个维将完全降为零)。
通过其他字段过滤
在我写完上述答案后,我注意到您想用另一个字段来拆分,而不是通过匹配键串。
这有点复杂,但是您可以为维度创建一个复合键:
bDim = ndx.dimension(function (d){ return [d.col1,d.col2]; });
键的第一个数组元素是我们要分割的列,第二个是我们要显示的键。
然后构造一个伪造的组,该组将按第一个键进行过滤并将其删除:
function filter_by_key_part(source_group,k) {
return {
all:function () {
return source_group.all()
.filter(({key: [k1,k2]}) => k1 === k)
.map(({key: [k1,k2],value}) => ({key: k2,value}))
}
};
}
像这样使用它:
rowChart_2
// ...
.group(filter_by_key_part(bGroup,'group1'))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。