2012-05-15 3 views
16

Ich denke, dass die API-Erklärung der Crossfilter-Bibliothek für jemanden geschrieben ist, der über meine Fähigkeiten hinausgeht, aber ich weiß auch, dass es mein Problem lösen wird.Crossfilter verwenden, um Ergebnisse dynamisch in JavaScript zurückzugeben

Um es einfach zu machen, werde ich die API Page's Beispieldaten für diese Frage verweisen.

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"} 
]); 

Ich bin in der Lage Aufzeichnungen zurück, die einen bestimmten Schlüssel übereinstimmen (Menge, total, etc.), aber ich verstehe nicht, wie die Ergebnisse zurück, die eine Kombination von Schlüssel/Wert-Paaren entsprechen. Zum Beispiel, wie würde ich die Ergebnismenge zurückgeben, die Ergebnisse mit einer Menge größer als 1, insgesamt gleich 90, eine Spitze gleich 0 und eine Art von Tab? Hier bin ich völlig verloren.

Wie immer würde jede Hilfe geschätzt werden.

Antwort

26

Sie könnten für jedes Attribut eine Dimension erstellen und dann die Filtermethode jeder Dimension mit den entsprechenden Filterkriterien aufrufen, die Sie angegeben haben.

Die Effekte sind kumulativ, so dass die letzte Zeile das Ergebnis aller Werte aller Filter aller Dimensionen ist.

2

Ich fand die obige Antwort präzise aber ungenau für mich als Anfänger, d. H. Ich habe keine oder unerwartete Ergebnisse (keine Respektlosigkeit slo-jo, aber ich schreibe aus einer Anfängerperspektive, da ich ein Crossfilter Nube bin). Die Probleme sind die Notwendigkeit, Filter vor dem Aufruf einiger Filter zu löschen (Sie müssen den Datensatz mit mehr Vielfalt z. B. verschiedene Tipps, Summen usw. erweitern, um zu sehen, was ich meine). Die Ausgabe an die Konsole hilft mir.

Hier ist, was mein Verständnis hilft:

var data = [ 
    {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: 222, total: 990, 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: 5, 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: 990, 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"} 
]; 



<script type="text/javascript"> 

// questions: For instance, how would I return the result set that matched results with a quantity more than 1, a total equal 90, a tip equal 0 and a type of tab? 
// create dimensions for each attribute 
var payments_by_quantity = payments.dimension(function(d){return d.quantity}); 
    payments_by_total = payments.dimension(function(d){return d.total}), 
    payments_by_tip = payments.dimension(function(d){return d.tip}), 
    payments_by_type = payments.dimension(function(d){return d.type}); 

//need top(Infinity) to print out contents of filtered items 
var morethan1 = payments_by_quantity.filter([1, Infinity]).top(Infinity); 
console.log("morethan1",morethan1); 

var tot_eq_90 = payments_by_total.filter(90).top(Infinity); 
console.log("tot_eq_90",tot_eq_90); 

// clear filters. If not, the result below will still be filtered by totals = 90 
payments_by_total.filterAll(); 

console.log("top1= biggest paymt qty:", payments_by_quantity.top(1)); 
payments_by_total.filterAll(); 
console.log("top2= biggest paymt qty:", payments_by_quantity.top(2)); 
payments_by_total.filterAll(); 

console.log("bottom paymt tip:", payments_by_tip.bottom(1)); 

var tip_eq_0 = payments_by_tip.filter(0).top(Infinity); 
console.log("tip_eq_0",tip_eq_0); 
payments_by_total.filterAll(); 

var typetab = payments_by_type.filter("tab").top(Infinity); 
console.log("typetab",typetab); 
payments_by_total.filterAll(); 

var typetab_i = payments_by_type.top(Infinity); 
console.log("typetab+i",typetab_i); 
Verwandte Themen