DC.JS rowChart 中以错误的顺序应用了 rowscap 和过滤器

rowscap and filter applied in wrong order in DC.JS rowChart

还在使用DC.JS获取一些为我们的工具性能编写的分析工具。非常感谢您提供这个图书馆。

我正在尝试显示对于给定的一组数据,哪些配方设置时间最差。只要您展示整个团队,一切都会很好。当您在 rowChart 上使用 .rowscap 仅显示指定的 topN 时,会发生以下情况:

该图表将显示正确数量的柱,它们甚至被正确排序,但该图表首先选择了前 N 个未过滤的柱,然后对它们进行了排序。我希望它从有序列表中选择 topN,而不是相反。有关演示,请参见 jsfiddle。 (http://jsfiddle.net/za8ksj45/24/)

in the fiddle, the longest setup time belongs to recipeD.
But if you have more than two recipes selected before recipeD
it is dropped of the right (top2) chart.

line 099-110: reductio definition
line 120-140: removal of empty bins (works okay)

(这与 Gordon 之前帮助解决的问题 () 非常相似,我重新使用了该解决方案中的代码。当我将它与reductio.js 图书馆。)

我想我没有在某处返回 reductio 组的值部分,但一直无法弄清楚。任何帮助将不胜感激。

问题是,当您在函数中对组进行 .slice(0,n) 删除空箱时,该组没有排序,因此您实际上得到了随机的 2 组,而不是前 2 组.这在未过滤的视图中实际上很清楚,因为 "top2" 视图显示 "all" 视图中的第 2 和第 3 组,而不是实际的前 2 组(至少对我而言)。

前面的示例之所以有效,是因为默认情况下 Crossfilter 的标准组是排序的,但是对于像您使用 Reductio 生成的复杂组的情况,它应该按什么排序?它不可能知道,所以 Reductio 根本不会弄乱排序,我想这意味着它是按值 属性 排序的,它是一个对象。

您需要添加一行以平均排序您的 FactsByRecipe 组,我认为它应该可以解决您的问题:

FactsByRecipe.order(function(d) { return d.avg; });

请注意,Crossfilter 组只能有一个排序,因此如果您想为该组中的多个 属性 显示 "top X",则需要创建另一个包装器(就像删除空垃圾桶包装器一样)但是让 "top" 函数按照你想要的顺序重新排序组。

祝你好运!