Google द्वारा विज़ुअलाइजेशन एपीआई का उपयोग करके समूह का उपयोग करके फ़ॉर्मेटिंग को बनाए रखें, मैं अपने कच्चे डेटा के आधार पर उप-टेबल बनाने के लिए google.visualization.data.group का उपयोग करता हूं। मेरा कच्चा डेटा मूल्य के अलावा कुछ और प्रदर्शित करने के लिए {v: "यूएस", f: "United States"} की चाल का उपयोग करता है, लेकिन जब मैं समेकन फ़ंक्शन का उपयोग करता हूं, तो फ़ॉर्मेटिंग केवल "यूएस" भाग को छोड़कर समाप्त हो जाती है।Google विज़ुअलाइजेशन एपीआई
क्या मूल स्वरूपण को बनाए रखने का कोई तरीका है, या समूह समेकन का उपयोग करके बनाए गए डेटाटेबल्स पर इसे वापस जोड़ने का कोई आसान तरीका है?
नमूना डेटा:
[2010, {v:"MA", f:"Morocco"}, {v:"002", f:"Africa"}, {v:"002", f:"Northern Africa"}, 21.12724],
[2010, {v:"AW", f:"Aruba"}, {v:"019", f:"Americas "}, {v:"019", f:"Caribbean"}, 0.98],
[2010, {v:"AF", f:"Afghanistan"}, {v:"142", f:"Asia"}, {v:"142", f:"Southern Asia"}, 0.9861],
[2010, {v:"AO", f:"Angola"}, {v:"002", f:"Africa"}, {v:"002", f:"Middle Africa"}, 5.11774],
एकत्रीकरण फंक्शन:
var countryData = google.visualization.data.group(
rawData,
[0, 1],
[{'column': 4, 'aggregation': google.visualization.data.sum, 'type': 'number'}]
);
संपादित करें:
आगे सोचा, यह शायद असंभव समूह के प्रारूप के साथ के बाद से वहाँ कोई गारंटी नहीं है कि के लिए प्रारूप प्रत्येक मान सुसंगत रहेगा। इसे ध्यान में रखते हुए, यह एक ऐसा फ़ंक्शन लिखने के लिए शायद बेहतर (या केवल संभव) है जो मेरे डेटा के प्रत्येक कॉलम में स्वरूप जोड़ देगा। तो सवाल बन जाता है, "मैं यह कैसे करता हूं?"
मैं वास्तव में अकेले अपरिवर्तित मूल्यों के रूप में अपना कच्चा डेटा नहीं बनाऊंगा, और फिर प्रत्येक मान के लिए प्रारूपों को देखने के लिए अतिरिक्त तालिकाओं का निर्माण नहीं करूंगा। इसके लिए एक अतिरिक्त 2 टेबल (उन क्षेत्रों के लिए एक जो 28 पंक्तियां हैं, एक के लिए 240 पंक्तियों से अधिक देशों के लिए) की आवश्यकता होगी, और उसके बाद समूहित तालिका में प्रत्येक मान को देखने के लिए दो कार्य बनाएंगे (जिसमें 30+ वर्ष का डेटा होगा, अर्थ हजारों लाइनें) मूल्य जोड़ना।
यह वास्तव में एक जटिल समाधान की तरह लगता है।
क्या संशोधक कार्यों के साथ ऐसा करने का कोई तरीका है? क्या मैं तालिका में प्रत्येक मान को {v: "यूएस", एफ: "संयुक्त राज्य"} स्वरूपित ऑब्जेक्ट के रूप में वापस करने के लिए एक फ़ंक्शन लिख सकता हूं? या क्या कॉलम फॉर्मेटर लिखने का एक आसान तरीका है जो मेरी मूल तालिका में उपयुक्त मान को देखेगा और उस प्रारूप को अपनाएगा? जो मेरे लिए कम से कम सिरदर्द का कारण बनता है (जिसे इसे लिखना है), और उपयोगकर्ताओं के लिए (जिन्हें इसे लोड करना है)?
संपादित करें 2:
ऐसा लगता है कि मैं कुछ इस तरह का उपयोग कर नई तालिका के लिए एक फ़ॉर्मेटर बनाने के लिए सक्षम होना चाहिए:
function (dt, row) {
return {
v: (dt.getValue(row, 1)/1000000),
f: (dt.getValue(row, 1)/1000000) + 'M'
}
}
लेकिन मुद्दा बन जाता है कि जब मैं संख्या के साथ काम नहीं कर रहा हूँ प्रारूप, मुझे कुछ प्रकार की लुकअप टेबल बनाना होगा जो मूल्य लेगा, इसे लुकअप टेबल में देखें, और उसके बाद उपयुक्त प्रारूप वापस करें। ऐसा लगता है कि मुझे पूरी तालिका, पंक्ति से पंक्ति, जो हजारों लाइनों के माध्यम से लूप करना पड़ सकता है।
मैं कल्पना नहीं कर सकता कि कुछ ब्रूट फोर्स लूपिंग और मूल्यों को असाइन किए बिना ऐसा करने का कोई आसान तरीका नहीं है।
संपादित करें 3:
तो मैंने कुछ मुश्किल कोशिश की। प्रत्येक पंक्ति को मान/प्रारूप के रूप में सेट करने के बजाय, मैंने स्ट्रिंग के रूप में मान/प्रारूप भाग बनाया, और उसके बाद ऑब्जेक्ट का मूल्यांकन करने के लिए प्रयुक्त eval() को समूहित करने के बाद। यह बहुत अच्छा काम किया।
[2010, "{v: 'MA', f: 'Morocco'}", 21.13],
[2010, "{v: 'AW', f: 'Aruba'}", 0.98],
[2010, "{v: 'AF', f: 'Afghanistan'}", 0.99],
[2010, "{v: 'AO', f: 'Angola'}", 5.12],
यहाँ नए कोड है:: यहाँ डेटा है
var countryCount = countryData.getColumnRange(0).count;
for (var i = 0; i <= countryCount; i++) {
countryData.setValue(i, 1, eval('(' + countryData.getValue(i,1) + ')'));
};
मुद्दा है कि जब मैं उत्पादन यह एक Google DataTable करने के लिए, यह पता चलता {v: 'एई', च: ' संयुक्त अरब अमीरात '} तथ्य ठीक से eval साथ परिणाम की जाँच के बावजूद मुझे देता है:
>>> eval('(' + countryData.getValue(i,1) + ')')
Object v="AE" f="United Arab Emirates"
तो क्या मैं गलत यहाँ कर रहा हूँ?