D3 Crossfilter尺寸的离散过滤器

时间:2012-07-20 02:03:07

标签: d3.js crossfilter

有没有办法在具有一个或多个值的属性上创建维度?例如

{quantity: 2, total: 190, tip: 100, items: ["apple","sandwich"],
{quantity: 2, total: 190, tip: 100, items: ["ice-cream"]},
{quantity: 1, total: 300, tip: 200, items: ["apple", "coffee"]}

我的目标是创建一个可以过滤掉具有序数值的维度的条目的交叉过滤器。有没有办法我写一个过滤器/尺寸,让我说'#34;我希望所有条目都包含项目' apple'"?

我能想到的唯一解决方法是为每个项目创建一个维度。像这样:

var paymentsByApple = payments.dimension(function(d) { return $.inArray("apple", d.items); });
var paymentsByCoffee = payments.dimension(function(d) { return $.inArray("coffee", d.items); });
// and one for every possible item

主要问题是我不想枚举和硬编码所有不同的对象。而且,我最终可能会有很多可能的不同项目。有更聪明的方法吗?

提前致谢!

2 个答案:

答案 0 :(得分:3)

在此处遇到同样的问题,并且看不到当前lib功能的简单解决方法,请参阅this

根据Pablo Navaro的建议更改数据模型以适合单个值维度的问题是,您需要确保为其他维度计算的统计数据不会失真(重复计数,更正方法,......)< / p>

希望看到一个过滤器处理多个值维度,或者有更多时间深入挖掘代码库以提出一个...

答案 1 :(得分:2)

如何更改数据模型?我认为使用:

[{id: 1, quantity: 1, total: 100, tip:  50, item: "apple"},
 {id: 1, quantity: 1, total:  90, tip:  50, item: "sandwich"},
 {id: 2, quantity: 1, total: 190, tip: 100, item: "ice-cream"},
 {id: 3, quantity: 1, total: 300, tip: 100, item: "apple"}, 
 {id: 3, quantity: 1, total: 300, tip: 100, item: "coffee"}]

也许您可以使用reduceSum

按ID计算总计