interaktive DiagrammeHat jemand Ideen, wie man interaktive Berichte erstellt?
Im Bericht möchte ich Diagramme mit mehreren Linien in jedem Diagramm einbinden. Auf der linken Seite des Fensters möchte ich eine Liste der Linien haben. Wenn ich auf eine Linie aus der Liste klicke, soll die ausgewählte Linie im Diagramm hervorgehoben werden, während die übrigen Linien ausgeblendet werden.
Datenexploration und -visualisierungBetreff: Interaktive DiagrammeEine Legende auf der linken Seite kann etwas knifflig sein, aber wenn die rechte Seite in Ordnung ist, sollte ein einfacher Graph-Builder ausreichen

https://www.jmp.com/support/help/en/18.0/#page/jmp/graph-builder.shtml#
Betreff: Interaktive DiagrammeHallo! Ich habe eine For-Schleife verwendet, um mit dem Graph Builder mehrere Diagramme zu erstellen. Jetzt möchte ich alle diese Diagramme auf einem einzigen Blatt gruppieren und eine interaktive Benutzeroberfläche erstellen, über die Benutzer mit allen Diagrammen gleichzeitig interagieren können. Gibt es eine Möglichkeit, dies zu erreichen? Vielen Dank!
Betreff: Interaktive DiagrammeEs ist eine gute Idee, nur den grundlegenden Diagrammersteller zu verwenden. Ich möchte sie alle, nachdem ich sie erstellt habe, einfach untereinander zusammenfügen.
Betreff: Interaktive DiagrammeEs werden noch ein paar weitere Informationen benötigt. Sie können diese beispielsweise in einer V-Listbox sammeln und dann in einem neuen Fenster anzeigen.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = V List Box();
For(i = 1, i <= 3, i++,
gb_collector << Append(
dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
)
);
nw = New Window("",
gb_collector
);
Wenn Sie eine For-Schleife verwenden, gehe ich davon aus, dass Sie Skripting verwenden. Haben Sie den Skripting-Leitfaden gelesen (z. B. https://www.jmp.com/support/help/en/18.0/#page/jmp/examples-of-creating-a-dashboard-from-two-reports.shtml# ).
Betreff: Interaktive DiagrammeIch würde gerne die Tab-Page-Box-Methode mit der For-Schleife kombinieren, aber das funktioniert nicht.
Hier ist mein Teil des Skripts:
Neues Fenster("Mein Dashboard",
H Splitterbox(
Größe (1000, 1000),
//Schleife für jeden Parameter
Für (i = 1, i <= N Elemente (numPar), i++,
// Spaltenfelder für Diagramme aller Chargen, Ist-Daten und Differenz
col1 = Col Box(""),
col2 = Col Box(""),
col3 = Col Box(""),
// Registerkarte Seitenfeld für jeden Parameter
Registerkarte Seitenfeld (
Titel(numPar[i] || " vs. Zeitpunkt"),
// Alle Batches plotten
gb = Graph Builder(
Größe (500, 500),
Variablen(X(:Zeitpunkt Monate), Y(:Ergebnis), Overlay(:Stapel)),
Elemente(Punkte(X, Y))
),
// Lokaler Filter: Setze den Batch nur auf die Batches, die sich in cyc mit einem Ref befinden, nicht auf alle anderen Batches
gb << Lokaler Datenfilter(
unsichtbar,
Filter hinzufügen(Spalten(:Komponente, :Stapel, :Quelltabelle),
Wobei (:Komponente == numPar[i]),
Wobei (:Batch == {cyc, bat}),
Wobei (:Quelltabelle == dt_name)
)
),
dt << Auswahl löschen(),
//Entfernen Sie die Filteranzeige aus dem Diagramm
gb << Systemsteuerung anzeigen(0),
// Bericht zum Ändern des Plots
gbb = Bericht(gb)[GraphBuilderBox(1)],
// Lineare Regression hinzufügen
gbb << Element hinzufügen(1, 1, {Typ("Anpassungslinie"), X, Y, Anpassungskonfidenz(0), Gleichung(0)}),
// Y-Achse festlegen
minval = min(:Ergebnis[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc & :Quelltabelle == dt_name | :Batch == bat & :Komponente == numPar[i] & :Quelltabelle == dt_name)]) * 0,95,
maxval = max(:Ergebnis[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc & :Quelltabelle == dt_name | :Batch == bat & :Komponente == numPar[i] & :Quelltabelle == dt_name)]) * 1,05,
maxvalts = max(:Zeitpunkt Monate[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc & :Quelltabelle == dt_name | :Batch == bat & :Komponente == numPar[i] & :Quelltabelle == dt_name)]) * 1,05,
gbb[AchsenBox(1)] << min(-0.1),
gbb[AchsenBox(1)] << max(maxvalts),
gbb[AchsenBox(2)] << min(minval),
gbb[AchsenBox(2)] << max(maxval),
gbb[Achsenbox(2)] << inc((maxval - minval) / 10),
// Beschriftung der Y-Achse festlegen
unitList = Assoziatives Array(:Ergebniseinheit[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc & :Quelltabelle == dt_name | :Batch == bat & :Komponente == numPar[i] & :Quelltabelle == dt_name)]) << Entfernen("") << Schlüssel abrufen,
Wenn (N Elemente(unitList) == 1,
gbb[Textbearbeitungsfeld(4)] << Text festlegen(numPar[i] || " [" || unitList[1] || "]")
,
gbb[Textbearbeitungsfeld(4)] << Text festlegen(numPar[i])
),
// Diagrammtitel festlegen
gbb[Text Edit Box(1)] << Setze Text(numPar[i] || " vs. Zeitpunkt"),
// Anhängen
gbba = Bericht(gb),
col1 << Anhängen(gbba),
< )
)
),
< );
Betreff: Interaktive DiagrammeNames Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = Tab Box(<< Set Style("Horizontal Spread"));
For(i = 1, i <= 3, i++,
gb_collector << Add("Title",
dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
)
);
nw = New Window("",
gb_collector
);Betreff: Interaktive DiagrammeWelche JMP-Version hast du? Funktioniert es in deinem JMP? Weil ich mit dem obigen Skript nicht die erwartete Ausgabe habe
Betreff: Interaktive DiagrammeIch weiß nicht, was Ihre erwartete Ausgabe ist, und ich habe Ihre Daten nicht. Das Skript verwendet Tab Box, um Ergebnisse aus der For-Schleife zu sammeln

Betreff: Interaktive DiagrammeIch habe diese Ausgabe, wenn ich das obige Skript ausführe. Es ist nicht dasselbe wie Sie
Betreff: Interaktive DiagrammeSie scheinen es in JMP18 geändert zu haben. In JMP17.2 schien dies zu funktionieren
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = Tab Box(<< Set Style("Horizontal Spread"));
For(i = 1, i <= 3, i++,
tab = Tab Page Box("",
gb = dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
);
tab << Title("Title " || Char(i));
gb << title(Char(i));
gb_collector << Append(tab)
);
nw = New Window("",
gb_collector
);Betreff: Interaktive DiagrammeEin weiteres Problem, das ich ansprechen möchte, ist, dass die Diagramme unverhältnismäßig groß werden, wenn ich eine große Anzahl von Registerkarten (z. B. 20) mit langen Titeln habe, wodurch es schwierig wird, sie klar zu erkennen. Ich möchte die Diagramme auf einen kleineren Maßstab verkleinern, dabei aber die großen Titel und Registerkarten beibehalten. Ist es möglich, das Diagramm links mit leerem Platz rechts zu positionieren?
Betreff: Interaktive DiagrammeIch bin mir nicht sicher, was Sie mit „Graph links mit leerem Platz rechts“ meinen. Erstellen Sie das Diagramm manuell, ändern Sie die Größe ein wenig, kopieren Sie das Skript und es wird Ihnen sagen, wie Sie die Größe des Diagramms erhöhen können. Tab Box hat auch Überlauf und andere Optionen, die Sie im Skriptindex finden können.

Betreff: Interaktive DiagrammeIch versuche herauszufinden, ob es eine Möglichkeit gibt, die Diagramme wie in diesem Screenshot anzuordnen. Zum Beispiel zuerst das erste Diagramm und dann die anderen beiden zusammen.
Betreff: Interaktive DiagrammeSie können beispielsweise V-Listbox, H-Listbox, Tab-Box und Tab-Page-Box auf viele verschiedene Arten kombinieren, um das gewünschte Layout zu erhalten.
Sie finden zahlreiche Informationen im Scripting Guide https://www.jmp.com/support/help/en/18.0/#page/jmp/construct-display-boxes-for-new-windows.shtml
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb_expr = Expr(dt << Graph Builder(
Show Control Panel(0),
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
));
nw = New Window("",
V List Box(
gb_expr,
H List Box(
gb_expr,
gb_expr
)
)
);Betreff: Interaktive DiagrammeNamen werden standardmäßig hier verwendet (1);
dt = Öffnen( "$SAMPLE_DATA/Big Class.jmp" );
gb_collector = Tab-Box ("Dashboard");
Für (i = 1, i <= 20, i++,
// Spaltenbox zur Darstellung aller Chargen
col1 = Col Box( "Alle Stapel" || Char( i ) );
//Erstellen Sie das erste Graph Builder-Diagramm
gb = Ausdruck(
dt << Graph Builder(
unsichtbar,
Variablen (X (: Gewicht), Y (: Größe), Overlay (: Geschlecht),
Elemente(Punkte(X, Y, Legende(9)), Anpassungslinie(X, Y, Legende(11)))
)
);
col1 << Anhängen( gb );
//Erstellen Sie eine Spaltenbox für die beiden Graph Builder-Plots
col2 = Col Box( "Tatsächliche Daten " || Char( i ) );
// Zwei Graph Builder-Plots erstellen und an col2 anhängen
Für (j = 1, j <= 2, j++,
gbb = Ausdruck(
dt << Graph Builder(
unsichtbar,
Variablen (X (: Gewicht), Y (: Größe), Overlay (: Geschlecht),
Elemente(Punkte(X, Y, Legende(9)), Anpassungslinie(X, Y, Legende(11)))
)
);
col2 << Anhängen( gbb );
);
// Erstelle eine Registerkarte für col1 und col2 und hänge sie an gb_collector an
tab = Tab Page Box( " Irgendwas Irgendwas ",
V-Listenfeld (
Spalte1,
H List Box( col2 ) // Die beiden Diagramme nebeneinander platzieren
)
);
gb_collector << Anhängen( Tab );
// Titel für gb festlegen
gb << Titel ("dxfkgbdlk,xfhglihxfd");
);
gb_collector << Dockable( 1 );
gb_collector << Überlauf aktivieren ( 1 );
nw = Neues Fenster( "Dashboard",
gb_collector
);
Ich versuche, das obige Beispiel in meinem Skript zu verwenden. Aber ich bekomme keine Ausgabe. Hier ist mein Skript:
Aktuelle Datentabelle (dt);
dt << Neue Spalte("Zeitpunkt Monate", Formel(Runden(:Zeitpunkt Tage/30.438), 2));
gb_collector = Registerkartenbox();
Für (i = 1, i <= N Elemente (numPar), i++,
// Spaltenbox zur Darstellung aller Chargen
col1 = Col Box( "" );
// Spaltenfeld zur Darstellung der Ist-Daten
col2 = Col Box( "" );
// Spaltenfeld zur Darstellung der Differenz
col3 = Col Box( "" );
//tab = Registerkarte Seitenfeld("",
gb = dt << Graph Builder(
//unsichtbar,
Größe(700, 400),
Variablen(X(:Zeitpunkt Monate), Y(:Ergebnis), Overlay(:Stapel)),
Elemente(Punkte(X, Y))
);
// Lokaler Filter: Setze den Batch nur auf die Batches, die sich in cyc mit einem Ref befinden, nicht auf alle anderen Batches
gb << Lokaler Datenfilter(
unsichtbar,
Filter hinzufügen(Spalten(:Komponente, :Stapel, :Quelltabelle),
Wobei (:Komponente == numPar[i]),
Wobei (:Batch == {cyc, bat}),
Wobei (:Quelltabelle == dt_name)
)
);
dt << Auswahl löschen();
//Entfernen Sie die Filteranzeige aus dem Diagramm
gb << Systemsteuerung anzeigen(0);
// Bericht zum Ändern des Plots
gbb = Bericht(gb)[GraphBuilderBox(1)];
// Lineare Regression hinzufügen
gbb << Element hinzufügen(1, 1, {Typ("Anpassungslinie"), X, Y, Anpassungskonfidenz(0), Gleichung(0)});
// Y-Achse festlegen
minval = min(:Ergebnis[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc & :Quelltabelle == dt_name | :Batch == bat & :Komponente == numPar[i] & :Quelltabelle == dt_name)]) * 0,95;
maxval = max(:Ergebnis[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc & :Quelltabelle == dt_name | :Batch == bat & :Komponente == numPar[i] & :Quelltabelle == dt_name)]) * 1,05;
maxvalts = max(:Zeitpunkt Monate[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc & :Quelltabelle == dt_name | :Batch == bat & :Komponente == numPar[i] & :Quelltabelle == dt_name)]) * 1,05;
gbb[AchsenBox(1)] << min(-0.1);
gbb[AchsenBox(1)] << max(maxvalts);
gbb[AchsenBox(2)] << min(minval);
gbb[AchsenBox(2)] << max(maxval);
gbb[Achsenbox(2)] << inc((maxval - minval) / 10);
// Beschriftung der Y-Achse festlegen
unitList = Assoziatives Array(:Ergebniseinheit[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc & :Quelltabelle == dt_name | :Batch == bat & :Komponente == numPar[i] & :Quelltabelle == dt_name)]) << Entfernen("") << Schlüssel abrufen;
Wenn (N Elemente(Einheitenliste) == 1,
gbb[Textbearbeitungsfeld(4)] << Text festlegen(numPar[i] || " [" || unitList[1] || "]")
,
gbb[Textbearbeitungsfeld(4)] << Text festlegen(numPar[i])
);
// Diagrammtitel festlegen
gbb[Text Edit Box(1)] << Text festlegen(numPar[i] || " vs. Zeitpunkt");
// Anhängen
//gbba = Bericht(gb),
col1 << Anhängen(gb);
//Filter << schließen;
gb << Fenster schließen;
// Innerhalb der Schleife durch Parameter werden nun auch Batches durchlaufen
Für (k = 1, k <= N Elemente (cyc), k++,
prüfen = dt << Zeilen abrufen, wobei (:Komponente == numPar[i] & :Batch == cyc[k] & :Quelltabelle == dt_name | :Batch == bat[k] & :Komponente == numPar[i] & :Quelltabelle == dt_name);
if(N items(check) > 0, // Prüfung erstellen, um zu sehen, ob Parameter für aktuelle Charge vorhanden sind
// Basisplot erstellen
gb = Graph Builder(
//unsichtbar,
Größe (700, 400),
Variablen (X (: Zeitpunkt Monate), Y (: Ergebnis), Overlay (: Stapel),
Elemente(Punkte(X, Y), )
);
gb << Lokaler Datenfilter (unsichtbar, Filter hinzufügen (Spalten (: Komponente,: Stapel,: Quelltabelle), wobei (: Komponente == numPar[i]), wobei (: Stapel == {cyc[k], bat[k]}), wobei (: Quelltabelle == dt_name)));
dt << Auswahl löschen();
//Entfernen Sie die Filteranzeige aus dem Diagramm
gb << Systemsteuerung anzeigen( 0 );
// Bericht zum Ändern des Plots
gbb = Bericht( gb )[GraphBuilderBox( 1 )];
// Lineare Regression hinzufügen
gbb << Element hinzufügen( 1, 1, {Typ( "Anpassungslinie" ), X, Y, Anpassungskonfidenz( 0 ), Gleichung( 0 )} );
// Y-Achse festlegen
minval = min(:Ergebnis[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc[k] & :Quelltabelle == dt_name | :Batch == bat[k] & :Komponente == numPar[i] & :Quelltabelle == dt_name)])*0,95;
maxval = max(:Ergebnis[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc[k] & :Quelltabelle == dt_name| :Batch == bat[k] & :Komponente == numPar[i] & :Quelltabelle == dt_name)])*1,05;
maxvalts = max(:Zeitpunkt Monate[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc[k] & :Quelltabelle == dt_name| :Batch == bat[k] & :Komponente == numPar[i] & :Quelltabelle == dt_name)])*1,05;
gbb[AchsenBox(1)] << min(-0.1);
gbb[AchsenBox(1)] << max(maxvalts);
gbb[AchsenBox(2)] << min(minval);
gbb[AchsenBox(2)] << max(maxval);
gbb[AchsenBox(2)] << inc((maxval-minval)/10);
// Beschriftung der Y-Achse festlegen
unitList = Assoziatives Array( :Ergebniseinheit[dt << Zeilen abrufen wobei(:Komponente == numPar[i] & :Batch == cyc[k] & :Quelltabelle == dt_name | :Batch == bat[k] & :Komponente == numPar[i] & :Quelltabelle == dt_name)] ) << Entfernen( "" ) << Schlüssel abrufen;
Wenn (N Elemente (unitList) == 1,
gbb[Textbearbeitungsfeld( 4 )] << Text festlegen( numPar[i] || " [" || unitList[1] || "]" )
);
Wenn (N Elemente (Einheitenliste) != 1,
gbb[Text Editierfeld( 4 )] << Text festlegen( numPar[i] )
);
// Set graph titel
gbb[Text Edit Box( 1 )] << Text festlegen( numPar[i] || " vs. Zeitpunkt ");
// Anhängen
//gbba = Report( gbb );
col2 << Anhängen( gbb );
//Filter << schließen;
gb << Fenster schließen;
// Zweites Diagramm starten
gb2 = Graph Builder(
//unsichtbar,
Größe (700, 400),
Variablen (X (Zeitpunkt Monate), Y (: Differenz), Farbe (: Charge)),
Elemente (Punkte (X, Y))
);
gb2 << Lokaler Datenfilter (unsichtbar, Filter hinzufügen (Spalten (: Komponente, : Stapel, : Quelltabelle), Wobei (: Komponente == numPar[i]), Wobei (: Stapel == cyc[k]), Wobei (: Quelltabelle == dt5_name)));
dt4 << Auswahl löschen();
//Entfernen Sie die Filteranzeige aus dem Diagramm
gb2 << Systemsteuerung anzeigen( 0 );
// Bericht zum Ändern des Plots
gbb2 = Bericht( gb2 )[GraphBuilderBox( 1 )];
gbb2 << Element hinzufügen( 1, 1, {Typ( "Linie" ), X, Y} );
// Den HC-Wert ermitteln
l_idx = dt4 << Zeilen abrufen, wobei (dt4:Component == numPar[i] & :Batch == cyc[k]);
ul = min(dt4:HC[l_idx]);
wenn(Ismissing(ul),
wenn (min (: Differenz [dt << Zeilen abrufen, wobei (: Komponente == numPar [i] &: Batch == cyc [k] &: Quelltabelle == dt5_name)]) == 0,
Mindestwert = -5;
maxval = 5,
minval = min(:Differenz[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc[k] & :Quelltabelle == dt5_name)])*0,95;
maxval = max(:Differenz[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc[k] & :Quelltabelle == dt5_name)])*1,05;
),
minval = min(:Differenz[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc[k] & :Quelltabelle == dt5_name)],-ul)*1,05;
maxval = max(:Differenz[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc[k] & :Quelltabelle == dt5_name)], ul)*1,05;
);
if(!ismissing(ul), //wenn kein HC-Wert vorhanden ist, keine Grenzwertlinie erstellen
gbb2[Achsenbox(2)] << Referenzlinie hinzufügen(ul,"solid", schwarz, char(round(ul,2)));
gbb2[Achsenbox(2)] << Referenzlinie hinzufügen(-ul,"solid", schwarz, char(round(-ul,2)));
);
gbb2[AxisBox(2)] << Referenzlinie hinzufügen(0,"Gestrichelt");
gbb2[AchsenBox(2)] << min(minval);
gbb2[AchsenBox(2)] << max(maxval);
gbb2[AchsenBox(2)] << inc((maxval-minval)/10);
//Anhängen
//gbba2 = Bericht( gbb2 );
col3 << Anhängen( gbba2 );
//Filter << schließen;
gb2 << Fenster schließen;
);
);
//);
tab = Registerkarte Seitenfeld(numPar[i],
V-Listenfeld (
Spalte 1
H List Box( col2,col3 ) // Die beiden Diagramme nebeneinander platzieren
)
);
Registerkarte << Titel (AnzahlPar[i]);
//gb << Titel(Char(1));
gb_collector << Anhängen(Tabulator);
);
gb_collector << Dockable( 1 );
gb_collector << Überlauf aktivieren ( 1 );
nw = Neues Fenster("Mein Dashboard",
gb_collector
);
können Sie mir bitte helfen, herauszufinden, wie das geht?
Betreff: Interaktive DiagrammeSie müssen einen Schritt zurücktreten und erklären, was Sie möchten: Geben Sie im besten Fall Beispieldaten an oder verwenden Sie einen der Beispieldatensätze von JMP, um in einem möglichst kleinen Beispiel zu erklären, was Sie möchten.
Betreff: Interaktive DiagrammeNames Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb_collector = Tab Box("Dashboard");
For(i = 1, i <= 20, i++,
// Column box for plot of all batches
col1 = Col Box("All Batches" || Char(i));
// Create the first Graph Builder plot
gb = Expr(
dt << Graph Builder(
invisible,
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
);
col1 << Append(gb);
// Create a column box for the two Graph Builder plots
col2 = Col Box("Actual Data " || Char(i));
// Create and append two Graph Builder plots to col2
For(j = 1, j <= 2, j++,
gbb = Expr(
dt << Graph Builder(
invisible,
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
)
);
col2 << Append(gbb);
);
// Create a tab for col1 and col2 and append it to gb_collector
tab = Tab Page Box(
" Something Something ",
V List Box(
col1,
H List Box(col2) // Placing the two plots next to each other
)
);
gb_collector << Append(tab);
// Set title for gb
gb << title("Title");
);
gb_collector << Dockable(1);
gb_collector << Set Overflow Enabled(1);
nw = New Window("Dashboard", gb_collector);
Here is the example that i use and i am trying to follow the same structure in my own script.Betreff: Interaktive DiagrammeAktuelle Datentabelle (dt);
dt << Neue Spalte("Zeitpunkt Monate", Formel(Runden(:Zeitpunkt Tage/30.438), 2));
gb_collector = Registerkartenbox();
Für (i = 1, i <= N Elemente (numPar), i++,
// Spaltenbox zur Darstellung aller Chargen
col1 = Col Box( "" );
// Spaltenfeld zur Darstellung der Ist-Daten
col2 = Col Box( "" );
// Spaltenfeld zur Darstellung der Differenz
col3 = Col Box( "" );
//tab = Registerkarte Seitenfeld("",
gb = dt << Graph Builder(
//unsichtbar,
Größe (700, 400),
Variablen(X(:Zeitpunkt Monate), Y(:Ergebnis), Overlay(:Stapel)),
Elemente(Punkte(X, Y))
);
// Lokaler Filter: Setze den Batch nur auf die Batches, die sich in cyc mit einem Ref befinden, nicht auf alle anderen Batches
gb << Lokaler Datenfilter(
unsichtbar,
Filter hinzufügen(Spalten(:Komponente, :Stapel, :Quelltabelle),
Wobei (:Komponente == numPar[i]),
Wobei (:Batch == {cyc, bat}),
Wobei (:Quelltabelle == dt_name)
)
);
dt << Auswahl löschen();
//Entfernen Sie die Filteranzeige aus dem Diagramm
gb << Systemsteuerung anzeigen(0);
// Bericht zum Ändern des Plots
gbb = Bericht(gb)[GraphBuilderBox(1)];
// Lineare Regression hinzufügen
gbb << Element hinzufügen(1, 1, {Typ("Anpassungslinie"), X, Y, Anpassungskonfidenz(0), Gleichung(0)});
// Y-Achse festlegen
minval = min(:Ergebnis[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc & :Quelltabelle == dt_name | :Batch == bat & :Komponente == numPar[i] & :Quelltabelle == dt_name)]) * 0,95;
maxval = max(:Ergebnis[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc & :Quelltabelle == dt_name | :Batch == bat & :Komponente == numPar[i] & :Quelltabelle == dt_name)]) * 1,05;
maxvalts = max(:Zeitpunkt Monate[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc & :Quelltabelle == dt_name | :Batch == bat & :Komponente == numPar[i] & :Quelltabelle == dt_name)]) * 1,05;
gbb[AchsenBox(1)] << min(-0.1);
gbb[AchsenBox(1)] << max(maxvalts);
gbb[AchsenBox(2)] << min(minval);
gbb[AchsenBox(2)] << max(maxval);
gbb[Achsenbox(2)] << inc((maxval - minval) / 10);
// Beschriftung der Y-Achse festlegen
unitList = Assoziatives Array(:Ergebniseinheit[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc & :Quelltabelle == dt_name | :Batch == bat & :Komponente == numPar[i] & :Quelltabelle == dt_name)]) << Entfernen("") << Schlüssel abrufen;
Wenn (N Elemente(Einheitenliste) == 1,
gbb[Textbearbeitungsfeld(4)] << Text festlegen(numPar[i] || " [" || unitList[1] || "]")
,
gbb[Textbearbeitungsfeld(4)] << Text festlegen(numPar[i])
);
// Diagrammtitel festlegen
gbb[Text Edit Box(1)] << Text festlegen(numPar[i] || " vs. Zeitpunkt");
// Anhängen
//gbba = Bericht(gb),
col1 << Anhängen(gb);
//Filter << schließen;
gb << Fenster schließen;
// Innerhalb der Schleife durch Parameter werden nun auch Batches durchlaufen
Für (k = 1, k <= N Elemente (cyc), k++,
prüfen = dt << Zeilen abrufen, wobei (:Komponente == numPar[i] & :Batch == cyc[k] & :Quelltabelle == dt_name | :Batch == bat[k] & :Komponente == numPar[i] & :Quelltabelle == dt_name);
if(N items(check) > 0, // Prüfung erstellen, um zu sehen, ob Parameter für aktuelle Charge vorhanden sind
// Basisplot erstellen
gb = Graph Builder(
//unsichtbar,
Größe (700, 400),
Variablen (X (: Zeitpunkt Monate), Y (: Ergebnis), Overlay (: Stapel),
Elemente(Punkte(X, Y), )
);
gb << Lokaler Datenfilter (unsichtbar, Filter hinzufügen (Spalten (: Komponente,: Stapel,: Quelltabelle), wobei (: Komponente == numPar[i]), wobei (: Stapel == {cyc[k], bat[k]}), wobei (: Quelltabelle == dt_name)));
dt << Auswahl löschen();
//Entfernen Sie die Filteranzeige aus dem Diagramm
gb << Systemsteuerung anzeigen( 0 );
// Bericht zum Ändern des Plots
gbb = Bericht( gb )[GraphBuilderBox( 1 )];
// Lineare Regression hinzufügen
gbb << Element hinzufügen( 1, 1, {Typ( "Anpassungslinie" ), X, Y, Anpassungskonfidenz( 0 ), Gleichung( 0 )} );
// Y-Achse festlegen
minval = min(:Ergebnis[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc[k] & :Quelltabelle == dt_name | :Batch == bat[k] & :Komponente == numPar[i] & :Quelltabelle == dt_name)])*0,95;
maxval = max(:Ergebnis[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc[k] & :Quelltabelle == dt_name| :Batch == bat[k] & :Komponente == numPar[i] & :Quelltabelle == dt_name)])*1,05;
maxvalts = max(:Zeitpunkt Monate[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc[k] & :Quelltabelle == dt_name| :Batch == bat[k] & :Komponente == numPar[i] & :Quelltabelle == dt_name)])*1,05;
gbb[AchsenBox(1)] << min(-0.1);
gbb[AchsenBox(1)] << max(maxvalts);
gbb[AchsenBox(2)] << min(minval);
gbb[AchsenBox(2)] << max(maxval);
gbb[AchsenBox(2)] << inc((maxval-minval)/10);
// Beschriftung der Y-Achse festlegen
unitList = Assoziatives Array( :Ergebniseinheit[dt << Zeilen abrufen wobei(:Komponente == numPar[i] & :Batch == cyc[k] & :Quelltabelle == dt_name | :Batch == bat[k] & :Komponente == numPar[i] & :Quelltabelle == dt_name)] ) << Entfernen( "" ) << Schlüssel abrufen;
Wenn (N Elemente (unitList) == 1,
gbb[Textbearbeitungsfeld( 4 )] << Text festlegen( numPar[i] || " [" || unitList[1] || "]" )
);
Wenn (N Elemente (Einheitenliste) != 1,
gbb[Text Editierfeld( 4 )] << Text festlegen( numPar[i] )
);
// Set graph titel
gbb[Text Edit Box( 1 )] << Text festlegen( numPar[i] || " vs. Zeitpunkt ");
// Anhängen
//gbba = Report( gbb );
col2 << Anhängen( gbb );
//Filter << schließen;
gb << Fenster schließen;
// Zweites Diagramm starten
gb2 = Graph Builder(
//unsichtbar,
Größe (700, 400),
Variablen (X (Zeitpunkt Monate), Y (: Differenz), Farbe (: Charge)),
Elemente (Punkte (X, Y))
);
gb2 << Lokaler Datenfilter (unsichtbar, Filter hinzufügen (Spalten (: Komponente, : Stapel, : Quelltabelle), Wobei (: Komponente == numPar[i]), Wobei (: Stapel == cyc[k]), Wobei (: Quelltabelle == dt5_name)));
dt4 << Auswahl löschen();
//Entfernen Sie die Filteranzeige aus dem Diagramm
gb2 << Systemsteuerung anzeigen( 0 );
// Bericht zum Ändern des Plots
gbb2 = Bericht( gb2 )[GraphBuilderBox( 1 )];
gbb2 << Element hinzufügen( 1, 1, {Typ( "Linie" ), X, Y} );
// Den HC-Wert ermitteln
l_idx = dt4 << Zeilen abrufen, wobei (dt4:Component == numPar[i] & :Batch == cyc[k]);
ul = min(dt4:HC[l_idx]);
wenn(Ismissing(ul),
wenn (min (: Differenz [dt << Zeilen abrufen, wobei (: Komponente == numPar [i] &: Stapel == cyc [k] &: Quelltabelle == dt5_name)]) == 0,
Mindestwert = -5;
maxval = 5,
minval = min(:Differenz[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc[k] & :Quelltabelle == dt5_name)])*0,95;
maxval = max(:Differenz[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc[k] & :Quelltabelle == dt5_name)])*1,05;
),
minval = min(:Differenz[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc[k] & :Quelltabelle == dt5_name)],-ul)*1,05;
maxval = max(:Differenz[dt << Zeilen abrufen, wobei(:Komponente == numPar[i] & :Batch == cyc[k] & :Quelltabelle == dt5_name)], ul)*1,05;
);
if(!ismissing(ul), //wenn kein HC-Wert vorhanden ist, keine Grenzwertlinie erstellen
gbb2[AxisBox(2)] << Referenzlinie hinzufügen(ul,"solid", schwarz, char(round(ul,2)));
gbb2[Achsenbox(2)] << Referenzlinie hinzufügen(-ul,"solid", schwarz, char(round(-ul,2)));
);
gbb2[AxisBox(2)] << Referenzlinie hinzufügen(0,"Gestrichelt");
gbb2[AchsenBox(2)] << min(minval);
gbb2[AchsenBox(2)] << max(maxval);
gbb2[Achsenbox(2)] << inc((maxval-minval)/10);
//Anhängen
//gbba2 = Bericht( gbb2 );
col3 << Anhängen( gbba2 );
//Filter << schließen;
gb2 << Fenster schließen;
);
);
//);
tab = Registerkarte Seitenfeld(numPar[i],
V-Listenfeld (
Spalte 1
H List Box( col2,col3 ) // Die beiden Diagramme nebeneinander platzieren
)
);
Registerkarte << Titel (AnzahlPar[i]);
//gb << Titel(Char(1));
gb_collector << Anhängen(Tabulator);
);
gb_collector << Dockbar( 1 );
gb_collector << Überlauf aktivieren ( 1 );
nw = Neues Fenster("Mein Dashboard",
gb_collector
);
Hier ist mein Skript.
Anbei ein Screenshot meines aktuellen Dashboards, das 8 Diagramme enthält. Hier sind meine spezifischen Anforderungen für die Organisation dieser Diagramme:
- Erstes Diagramm behalten : Ich möchte das erste Diagramm so behalten, wie es ist.
- Zweites Diagramm entfernen : Das zweite Diagramm sollte aus dem Dashboard entfernt werden.
- Die letzten sechs Diagramme paaren : Die letzten sechs Diagramme sollten so gepaart werden, dass jedes Paar nebeneinander angezeigt wird. Insbesondere sollten die Diagramme wie folgt organisiert werden:
- Das dritte und vierte Diagramm sollten nebeneinander angezeigt werden.
- Das fünfte und sechste Diagramm sollten nebeneinander angezeigt werden.
- Das siebte und das achte Diagramm sollten nebeneinander angezeigt werden.
Zusammenfassend sollte das endgültige Layout das erste Diagramm enthalten, gefolgt von drei Diagrammpaaren, wobei die Paare nebeneinander angezeigt werden.
Betreff: Interaktive DiagrammeDiese beiden Skripte sind völlig unterschiedlich (verwenden Sie außerdem JSL-Formatierung für JSL-Code, da dieser viel einfacher zu lesen ist). Wofür verwenden Sie Col Box? Welche Schleifen führen Sie durch (i und j)? Wodurch wird bestimmt, welche Informationen jedes der Diagramme enthält? Sollten sie miteinander interagieren?