微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用2个子组创建2个折线图 按键过滤通过其他字段过滤

如何解决如何使用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)));

Fork of your fiddle

请注意,这两个行图不会互相过滤,因为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'))

New version of fiddle

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。