2012-07-20 11 views
5

क्या एक विशेषता पर आयाम बनाने का कोई तरीका है जिसमें एक या अधिक मान हैं? उदाहरण के लिएडी 3 क्रॉसफिल्टर आयामों के लिए असतत फ़िल्टर

{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

अपना डेटा मॉडल बदलने के बारे में क्या? मुझे लगता है कि का उपयोग कर:

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

का उपयोग कर आईडी द्वारा योग की गणना कर सकता है और मौजूदा lib सुविधाओं के साथ एक आसान तरीके को नहीं देखते हैं, this देखते हैं।

पाब्लो नवारो द्वारा प्रस्तावित एक मूल्य आयाम फिट करने के लिए डेटामोडेल को बदलने में समस्या यह है कि आपको यह सुनिश्चित करने की आवश्यकता है कि अन्य आयामों के लिए गणना की गई आंकड़े विकृत नहीं हैं (डबल गिनती, सही करने का मतलब है ....)

एकाधिक मूल्य आयाम पर काम कर रहे फ़िल्टर को देखने की उम्मीद है, या कोडबेज में खोने के लिए कुछ और समय देने के लिए ...