单击datatable以过滤其他图表(dc.js)
我需要在单击datatable中的一行时筛选其他图表 是的 但在其他图表中什么也没有发生 您能帮我一下吗?如果表维度是维度。。。 通常填充数据表的数据是原始数据集中的原始行,而不是键/值对 因此,单击datatable以过滤其他图表(dc.js),dc.js,Dc.js,我需要在单击datatable中的一行时筛选其他图表 是的 但在其他图表中什么也没有发生 您能帮我一下吗?如果表维度是维度。。。 通常填充数据表的数据是原始数据集中的原始行,而不是键/值对 因此,d.key可能未定义 我建议你先坚持下去 console.log(d) 进入单击处理程序,查看数据的外观,以确保d.key有效 其次,请记住图表会过滤其维度。因此,您需要将一个值传递给table.filter(),该值是维度的有效键,然后它将过滤掉键不同的所有行。这可能不仅仅是您选择的一行 通常,选择
d.key
可能未定义
我建议你先坚持下去
console.log(d)
进入单击处理程序,查看数据的外观,以确保d.key
有效
其次,请记住图表会过滤其维度。因此,您需要将一个值传递给table.filter()
,该值是维度的有效键,然后它将过滤掉键不同的所有行。这可能不仅仅是您选择的一行
通常,选择表维度是因为它对行的值进行排序的方式。实际上,您可能需要过滤其他维度。但希望这足以让你开始
但是如果表维度是一个组呢?
只有当您的表采用交叉筛选维度作为其维度时,上述技术才会起作用。如果像在注释中链接的小提琴中一样,使用组作为维度,则该对象没有.filter()
方法,因此table.filter()
方法将不起任何作用
如果您只需要筛选单击的一个项目,那么您可以这样做
foodim.filter(d.key)
这是有效果的,但没那么有用
如果您需要dc顺序图表中使用的切换功能,则需要对其进行模拟。并不是那么复杂:
// global
var filterKeys = [];
// inside click event
if(filterKeys.indexOf(d.key)===-1)
filterKeys.push(d.key);
else
filterKeys = filterKeys.filter(k => k != d.key);
if(filterKeys.length === 0)
foodim.filter(null);
else
foodim.filterFunction(function(d) {
return filterKeys.indexOf(d) !== -1;
})
fiddle示例:您好,我的英语很抱歉。关于您的第一个建议,如果我在使用console.log(d.key)进行测试时获得数据的密钥,该密钥对应于datatable维度的密钥。我希望在选择该键时,影响与数据关联的图形,这些图形具有其他维度,但与交叉过滤器关联。一旦我从
d
中选择了一个适合维度的字段,它就对我起了作用。如果看不到工作示例或至少更多的代码+示例数据,很难说你的应用程序出了什么问题。我知道,你在维度中使用了一个组,而组不过滤,维度过滤。我在回答中加了一条注释。
// global
var filterKeys = [];
// inside click event
if(filterKeys.indexOf(d.key)===-1)
filterKeys.push(d.key);
else
filterKeys = filterKeys.filter(k => k != d.key);
if(filterKeys.length === 0)
foodim.filter(null);
else
foodim.filterFunction(function(d) {
return filterKeys.indexOf(d) !== -1;
})