Behalten Sie die Formatierung mithilfe der Gruppierung nach Aggregation in der Google Visualization API bei

9

Mit der Google Visualization API verwende ich google.visualization.data.group, um basierend auf meinen Rohdaten Untertabellen zu erstellen. Meine Rohdaten verwenden den Trick von {v: "US", f: "Vereinigte Staaten"}, um etwas anderes als den Wert anzuzeigen, aber wenn ich die Aggregationsfunktion verwende, wird die Formatierung eliminiert und es bleibt nur der "US" -Teil übrig / p>

Gibt es eine Möglichkeit, die ursprüngliche Formatierung beizubehalten, oder eine einfache Möglichkeit, sie auf DataTables hinzuzufügen, die mit der Gruppenaggregation erstellt wurden?

Beispieldaten:

%Vor%

Aggregationsfunktion:

%Vor%

Bearbeiten:

Bei näherer Betrachtung ist es wahrscheinlich unmöglich, mit dem Format zu gruppieren, da es keine Garantie gibt, dass das Format für jeden Wert konsistent ist. In Anbetracht dessen ist es wahrscheinlich besser (oder nur möglich), eine Funktion zu schreiben, die die Formate zu jeder Spalte meiner Daten hinzufügt. Die Frage wird also: "Wie zum Teufel mache ich das?"

Ich würde meine Rohdaten lieber nicht nur als unformatierte Werte erstellen, sondern auch als zusätzliche Tabellen, um nach den Formaten für jeden Wert zu suchen. Dies würde zusätzliche 2 Tabellen erfordern (eine für Regionen, die 28 Zeilen umfasst, eine für Länder mit mehr als 240 Zeilen) und dann zwei Funktionen erstellen, um jeden Wert in der gruppierten Tabelle zu durchsuchen (mit mehr als 30 Jahren Daten). was bedeutet Tausende von Zeilen) Hinzufügen der Werte.

Das scheint eine wirklich komplexe Lösung zu sein.

Gibt es eine Möglichkeit, dies mit Modifier-Funktionen zu tun? Kann ich eine Funktion schreiben, die jeden Wert in der Tabelle als {v: "US", f: "United States"} formatiertes Objekt zurückgibt? Oder gibt es eine einfache Möglichkeit, einen Spaltenformatierer zu schreiben, der den passenden Wert in meiner ursprünglichen Tabelle sucht und dieses Format annimmt? Was würde sowohl für mich (wer muss es schreiben) als auch für die Benutzer (die es laden müssen) die geringsten Kopfschmerzen verursachen?

EDIT 2:

Es sieht so aus, als ob ich in der Lage sein sollte, einen Formatierer für die neue Tabelle zu erstellen, etwa so:

%Vor%

Aber das Problem wird, dass ich, da ich mich nicht mit Zahlenformaten beschäftige, eine Art Nachschlagetabelle erstellen müsste, die den Wert aufnimmt, in einer Nachschlagetabelle nachschaut und dann das entsprechende Format zurückgibt. Es sieht auch so aus, als ob ich die ganze Tabelle Zeile für Zeile durchlaufen muss, was tausende von Zeilen ist.

Ich kann mir nicht vorstellen, dass es keinen einfachen Weg gibt, dies ohne eine Brute-Force-Schleife und das Zuweisen von Werten zu tun.

EDIT 3:

Also habe ich etwas Schwieriges versucht. Anstatt jede Zeile als Wert / Format festzulegen, habe ich den Wert / Format-Teil als String erstellt und nach der Gruppierung von used eval () die Objekte ausgewertet. Das hat super funktioniert. Hier sind die Daten:

%Vor%

Hier ist der neue Code:

%Vor%

Das Problem ist, dass wenn ich dies auf eine Google DataTable ausstelle, {v: 'AE', f: 'Vereinigte Arabische Emirate}} angezeigt wird, obwohl ich das Ergebnis mit eval richtig überprüfe:

%Vor%

Also, was mache ich hier falsch?

    
jmac 28.12.2012, 00:06
quelle

2 Antworten

1

Ich bin gerade selbst auf dieses Problem gestoßen. Ich entschied mich, einen Modifikator zu verwenden, um den Wert auf den formatierten Wert zu ändern, der die ursprüngliche dataTable verwendet, um die formatierten Werte zu finden. Das ist nicht besonders effizient, aber es funktioniert und Computer sind schnell.

Erstellen Sie zuerst eine Suchfunktion:

%Vor%

Dann rufe das in einem Modifier auf, indem du deinen ursprünglichen Gruppenruf änderst:

%Vor%

Update: Es scheint, dass Sie den Wert und den formatierten Wert beibehalten müssen. In meinem Fall der Anzeige von Kreisdiagrammen ist es mir nicht wichtig, den ursprünglichen Wert beizubehalten. Ich denke, das wird nicht für dich funktionieren, aber ich werde diese Antwort hier für andere hinterlassen, die einen einfacheren Fall haben wie ich.

Ich habe noch ein paar Minuten damit verbracht und hier ist eine Alternative, die den formatierten Wert kopieren wird, während der ursprüngliche Zellenwert beibehalten wird.

Erstellen Sie eine Kopierfunktion, die die Suchfunktion verwendet:

%Vor%

Rufen Sie es in Ihrem Fall einmal für jede Spalte auf, die Sie kopieren möchten.

%Vor%

Ihre Quellen- und Zielspalten sind gleich, aber in einigen Fällen können sie unterschiedlich sein.

Im Idealfall wäre das alles automatisch passiert.

    
andykellr 11.02.2015, 16:49
quelle
4

Okay, ich habe das herausgefunden (wie ungeheuer komplex es war).

Ich habe einen neuen Ansatz versucht. Ich formatierte meine Daten neu und erstellte dann eine Funktion, um einen Wert / Format basierend auf einem Teiler innerhalb dieser Zeichenfolge zurückzugeben. Meine Daten sehen nun so aus:

%Vor%

Ich benutze das, um den Teiler für die Spalte 1 zu erhalten:

%Vor%

Und dann benutze ich diese Funktion, um den String zu teilen:

%Vor%

Das Problem ist, dass ich Spalte 1 meiner Daten als "String" definiere, aber Firebug sagt mir, dass das Objekt, das von der Funktion splitFormat () zurückgegeben wird, ein Objekt ist (da es ein Array ist, nehme ich an). Selbst wenn ich die ursprüngliche Datentabelle mit einer v: und f: Komponente einfüge, möchte sie keinen zurückgegebenen Array-Objektwert akzeptieren, da FireBug mir den folgenden hilfreichen Ratschlag gibt:

%Vor%

Das Problem besteht darin, dass Sie zwar eine DataTable mithilfe der Syntax {v:, f:} definieren können, diese Syntax jedoch nicht in die Tabelle zurückgeben kann, da der Wert für diese Spalte als Zeichenfolge festgelegt ist. Stattdessen habe ich die Eigenschaft "setFormattedValue" der DataTable verwendet, um das Problem zu beheben:

%Vor%

Dies gab mir die richtigen Werte für beide, auch wenn es für große Datenmengen etwas aufwändig ist. Wenn jemand einen einfacheren Weg kennt, dies zu tun, wäre ich mehr als glücklich, es zu hören.

    
jmac 07.01.2013 02:14
quelle