2012-07-20 5 views
5

1つ以上の値を持つ属性にディメンションを作成する方法はありますか?たとえば、D3クロスフィルタ寸法の離散フィルタ

{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"]} 

私の目標は、序数の値を持つ次元に沿ってエントリをフィルタリングすることができるクロスフィルタを作成することです。 "私は項目 'リンゴ'を持つすべてのエントリが欲しいと言うことを許可するフィルタ/ディメンションを書く方法はありますか?

私が考えることができる唯一の回避策は、各アイテムのディメンションを作成することです。同様に:

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

データモデルの変更はどうですか? 、thisを参照してください

[{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

3

を使用してIDごとの合計を計算することができますし、現在のlibの機能を備えた簡単な回避策が表示されていない:私が使用していると思います。

Pablo Navaroが提案しているように、データモデルを単一の値の次元に合わせて変更する際の問題は、他の次元に対して計算された統計が歪まないようにする必要があることです。

マルチプルバリューディメンションで動作するフィルタを見たり、コードベースを掘り下げて1つを提案したいと考えています。