6

I have just started working with crossfilter and d3.js ... I'm trying some snippets given in the API reference... I Have the following data

var payments = crossfilter([
  {date: "2011-11-14T16:17:54Z", quantity: 2, total: 190, tip: 100, type: "tab"},
  {date: "2011-11-14T16:20:19Z", quantity: 2, total: 190, tip: 100, type: "tab"},
  {date: "2011-11-14T16:28:54Z", quantity: 1, total: 300, tip: 200, type: "visa"},
  {date: "2011-11-14T16:30:43Z", quantity: 2, total: 90, tip: 0, type: "tab"},
  {date: "2011-11-14T16:48:46Z", quantity: 2, total: 90, tip: 0, type: "tab"},
  {date: "2011-11-14T16:53:41Z", quantity: 2, total: 90, tip: 0, type: "tab"},
  {date: "2011-11-14T16:54:06Z", quantity: 1, total: 100, tip: 0, type: "cash"},
  {date: "2011-11-14T16:58:03Z", quantity: 2, total: 90, tip: 0, type: "tab"},
  {date: "2011-11-14T17:07:21Z", quantity: 2, total: 90, tip: 0, type: "tab"},
  {date: "2011-11-14T17:22:59Z", quantity: 2, total: 90, tip: 0, type: "tab"},
  {date: "2011-11-14T17:25:45Z", quantity: 2, total: 200, tip: 0, type: "cash"},
  {date: "2011-11-14T17:29:52Z", quantity: 1, total: 200, tip: 100, type: "visa"}
]);

I can create dimension via type as

var paymentsByTotal = payments.dimension(function(d) { return d.type; });

My question is that how can i filter an array of strings. I tried:

paymentsByTotal.filterRange(["cash","visa"]);

But I didn't get the expected result!

Any suggestions?

4

3 に答える 3

3

Crossfilter.js のマスター ブランチのソースコードでは、フィルターの結合に対する準備がありません。コードはJason Davies の union ブランチから取得する必要があります。

paymentsByTotal.filter("cash","visa");次に、目的の出力を実行して取得できるはずです。

于 2012-11-01T09:46:12.950 に答える
1

値の配列があり、各項目に明示的なロジック (つまり ) を指定したくない場合は、d === "visa"sai のfilterFunctionソリューションを拡張して、値が配列に含まれているかどうかを確認できます。フィルタリングするアイテムの配列が大きい場合や変更される可能性がある場合は、このようにすると作業が簡単になります。

var items = ['Visa', 'Cash'];
paymentsByTotal.filterFunction(function(d) { return items.indexOf(d) > -1;});
于 2013-12-17T11:06:35.167 に答える