Korzystając z interfejsu Google Visualization API, używam google.visualization.data.group do tworzenia podfolderów na podstawie moich nieprzetworzonych danych. Moje nieprzetworzone dane używają triku {v: "US", f: "Stany Zjednoczone"}, aby wyświetlić coś innego niż wartość, ale kiedy używam funkcji agregacji, formatowanie jest eliminowane pozostawiając tylko część "US".Zachowaj formatowanie za pomocą grup według agregacji w interfejsie Google Visualization API
Czy istnieje sposób na zachowanie oryginalnego formatowania lub łatwy sposób dodania go ponownie do DataTables utworzonego przy użyciu agregacji grupowej?
dane próbki:
[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],
Agregacja Funkcja:
var countryData = google.visualization.data.group(
rawData,
[0, 1],
[{'column': 4, 'aggregation': google.visualization.data.sum, 'type': 'number'}]
);
Edit:
Na głębszego zastanowienia, to chyba niemożliwe do grupy z formatem, ponieważ nie ma gwarancji, że format każda wartość będzie spójna. Mając to na uwadze, prawdopodobnie lepiej (lub możliwe) napisać funkcję, która doda formaty do każdej kolumny moich danych. Więc pytanie brzmi: "Jak do cholery mam to zrobić?"
Wolałbym raczej nie tworzyć moich surowych danych jako niesformatowane wartości samodzielnie, a następnie dodatkowe tabele do wyszukiwania formatów dla każdej wartości. Wymagałoby to dodatkowych 2 tabel (jedna dla regionów, które ma 28 wierszy, jedna dla krajów, które ma ponad 240 wierszy), a następnie tworząc dwie funkcje, aby przejrzeć każdą wartość w zgrupowanej tabeli (która będzie miała ponad 30 lat danych, co oznacza tysiące linii) dodając wartości.
To wydaje się być naprawdę skomplikowanym rozwiązaniem.
Czy jest jakiś sposób, aby to zrobić z funkcjami modyfikatora? Czy mogę napisać funkcję zwracającą każdą wartość w tabeli jako obiekt w formacie {v: "US", f: "United States"}? Czy istnieje prosty sposób na napisanie formantu kolumn, który wyszuka odpowiednią wartość w mojej oryginalnej tabeli i przyjmie ten format? Co spowodowałoby najmniej bóle głowy zarówno dla mnie (kto musi to napisać), jak i dla użytkowników (którzy muszą go załadować)?
EDIT 2:
Wygląda na to, powinienem być w stanie stworzyć formatowania dla nowej tabeli za pomocą czegoś takiego:
function (dt, row) {
return {
v: (dt.getValue(row, 1)/1000000),
f: (dt.getValue(row, 1)/1000000) + 'M'
}
}
Ale problem staje się, że skoro nie mam do czynienia z liczbą formatów, musiałbym utworzyć tabelę odnośników, która pobierze wartość, wyszuka ją w tabeli odnośników, a następnie zwróci odpowiedni format. Wygląda też na to, że mogę przechodzić przez całą tabelę, wiersz po wierszu, czyli tysiące linii.
Nie mogę sobie wyobrazić, że nie ma łatwego sposobu na zrobienie tego bez pętli z brutalną siłą i przypisywania wartości.
EDIT 3:
Więc próbowałem coś trudne. Zamiast ustawiać każdy wiersz jako wartość/format, utworzyłem część wartość/format jako ciąg, a następnie po grupowaniu użyłem eval() do oceny obiektów. To działało świetnie.Oto dane:
[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],
tutaj jest nowy kod:
var countryCount = countryData.getColumnRange(0).count;
for (var i = 0; i <= countryCount; i++) {
countryData.setValue(i, 1, eval('(' + countryData.getValue(i,1) + ')'));
};
Kwestia jest taka, że kiedy wyjście to do Google DataTable, pokazuje {V: 'AE', f: ' zjednoczone Emiraty Arabskie} pomimo faktu, że sprawdzanie wynik z eval właściwie daje mi:
>>> eval('(' + countryData.getValue(i,1) + ')')
Object v="AE" f="United Arab Emirates"
Więc co robię źle tutaj?