在DC.JS rowChart中以错误的顺序应用rowscap和filter

时间:2015-04-16 16:50:11

标签: dc.js crossfilter

仍然使用DC.JS来获取为我们的工具性能编写的一些分析工具。非常感谢有这个图书馆。

我试图显示给定数据集的哪个配方设置时间最差。只要你展示整个团队,一切都很有效。当您仅使用rowChart上的.rowscap显示指定的topN时,会发生以下情况:

图表将显示正确数量的条形图,它们甚至可以正确排序,但图表首先选择了topN未过滤的条形图,然后对它们进行排序。我希望它从有序列表中选择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之前帮助解决的问题(dc.js rowChart topN without zeros)非常相似,我重用了该解决方案中的代码。当我将其与reductio.js库。)

我认为我没有在某处返回reductio组的值部分,但却无法弄明白。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

问题是,当你.slice(0,n)你的函数中的组删除空箱时,该组没有被排序,所以你有效地得到一个随机的2组,而不是前2组。从未经过滤的观点来看,这实际上很明显,因为" top2"视图显示来自"所有"的第2和第3组查看,而不是实际的前2名(至少对我而言)。

之前的示例有效,因为默认情况下会对Crossfilter的标准组进行排序,但是对于像Reductio一样生成的复杂组,它应该按什么排序?它根本无法知道,所以Reductio根本不会搞乱排序,我想这意味着它是由value属性排序的,这是一个对象。

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

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

请注意,Crossfilter组只能有一个排序,所以如果你想要显示" top X"对于该组的多个属性,您需要创建另一个包装器(如删除空箱包装器),但要使用" top"函数按您想要的顺序重新排序组。

祝你好运!