Farbe auf IndikatorenHallo zusammen,
Ich versuche, in JMP einen Bericht zu erstellen, der es mir ermöglicht, Abweichungen in bestimmten Prozessen zu erkennen.
Ich untersuche beispielsweise 6 Elemente in meinem Prozess und hätte gerne einen Indikator mit Farben:
- wenn 5 aufeinanderfolgende Punkte (oder mehr) größer als 3 Sigma sind: rote Farbe
- wenn 3 aufeinanderfolgende Punkte (oder mehr) größer als 3 Sigma sind: gelbe Farbe
- sonst grüne Farbe
Und dann möchte ich in einem Bericht pro Element je nach Farben der Indikatoren so etwas anzeigen können:

Wie könnte ich etwas Ähnliches auf JMP haben?
Vielen Dank für Ihre Antwort.
Automatisierung und SkriptingBetreff: Farbe auf den IndikatorenBefindet sich jedes „Element“ in einer separaten Spalte?
Sind Ihre Daten in sequenzieller Reihenfolge"
Wie viele verschiedene „Artikel“ gibt es?
Soll der Bericht in jeder Zeile nur drei verschiedene Elemente enthalten?
Betreff: Farbe auf den IndikatorenWenn Sie eine Tabelle haben möchten, verwenden Sie eine Datentabelle und färben Sie die Zellen ein. Im Graph Builder können Sie möglicherweise eine Heatmap verwenden. Wenn Sie es skripten möchten, haben Sie viele verschiedene Optionen, mit denen Sie die Hintergrundfarbe festlegen können.
Betreff: Farbe auf den IndikatorenSteht jedes „Element“ in einer eigenen Spalte? Ja, ein Element pro Spalte
Sind Ihre Daten in sequenzieller Reihenfolge? Ja, sie können in sequenzieller Reihenfolge sortiert werden.
Wie viele verschiedene „Artikel“ gibt es? Sehr viele... .
Soll der Bericht nur 3 verschiedene Elemente in jeder Zeile des Berichts enthalten? Ja
Betreff: Farbe auf den IndikatorenEine einfache Möglichkeit ist etwa diese
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(6),
Compress File When Saved(1),
New Column("item",
Character,
"Nominal",
Set Values({"ITEM1", "ITEM2", "ITEM3", "ITEM4", "ITEM5", "ITEM6"})
),
New Column("status",
Character,
"Nominal",
Set Values({"Green", "Green", "Red", "Yellow", "Green", "Red"})
)
);
lub = Lineup Box(N Col(3));
For Each Row(dt,
Eval(EvalExpr(
lub << Append(
Text Box(:item, << Background Color(Expr(:status)))
)
));
);
nw = New Window("",
lub
);

Betreff: Farbe auf den IndikatorenVielen Dank für die Antwort. Ich versuche eine ähnliche Tabelle mit roten, gelben und grünen Indikatoren zu erstellen.
Mein Ziel ist es zu schaffen:
- wenn 5 aufeinanderfolgende Punkte (oder mehr) rot sind (über 3 Sigma), dann ist die Farbe des letzten Punktes rot
- wenn 3 aufeinanderfolgende Punkte (oder mehr) rot sind (über 3 Sigma), so ist die Farbe des letzten Punktes gelb
- sonst grüne Farbe
Im Anhang finden Sie eine Tabelle, die als Beispiel dient. Ich habe das folgende Skript erstellt, jedoch ohne Erfolg:
dt = current data table();
// Créez une nouvelle colonne pour l'indicateur
dt << New Column("Indicateur", Character, Nominal);
// Boucle pour calculer l'indicateur ligne par ligne
For(i = 1, i <= N Rows(5), i++,
// Récupérer les 5 dernières valeurs de l'indicateur
last_five = dt:status[i,5]; //
// Comptez le nombre de "rouge"
count_rouge = N Items( last_five == "rouge");
// Attribuer une couleur en fonction des règles
If(count_rouge == 5,
dt:Indicateur Global[i] = "rouge"; // 5 rouges
,
If(count_rouge >= 3,
dt:Indicateur Global[i] = "jaune"; // 3 ou plus rouges
,
dt:Indicateur Global[i] = "vert"; // Sinon vert
);
);
);Betreff: Farbe auf den IndikatorenIch denke, dieser Code macht, was Sie wollen:
dt = New Table( "testcolors", Add Rows( 15 ),
New Column( "Article", Character, "Nominal",
Set Values( {"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A"}
) ),
New Column( "Item", Numeric, "Continuous", Format( "Best", 12 ),
Set Values( [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] )
),
New Column( "status", Character, "Nominal",
Set Values(
{"red", "red", "red", "green", "green", "red", "red", "red", "red",
"red", "red", "green", "red", "red", "red"}
)
),
// Créez une nouvelle colonne pour l'indicateur
New Column("Indicateur", Character, Nominal)
);
one_color = "xyz";
icolor = 0;
for (i = 1, i <= nrows(dt), i++,
one_color = dt:status[i];
if (one_color == "red",
icolor++;
// else
,
if (icolor >= 5,
dt:Indicateur << Color Cells( "Red", i-1 );
icolor = 0;
// else
,
icolor >= 3,
dt:Indicateur << Color Cells( "Yellow", i-1 );
icolor = 0;
);
);
);
// Handle the last row
if (icolor >= 5,
dt:Indicateur << Color Cells( "Red", i-1 );
// else
,
icolor >= 3,
dt:Indicateur << Color Cells( "Yellow", i-1 );
);

Betreff: Farbe auf den IndikatorenIch bin immer noch verwirrt. Angesichts der von Ihnen bereitgestellten Datentabelle, die anscheinend die Ergebnisse Ihrer Berechnung enthält, können Sie die Zellen für Ihre Spalte „Indiceur“ jedoch problemlos einfärben.

names default to here(1);
dt=current data table();
dt << New Column("Indicateur", Character, Nominal);
:indicateur << color cells("red",dt<<GET rows="" where=""></GET>
<P>oder können einen separaten Bericht erstellen</P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="txnelson_1-1736426542617.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="txnelson_1-1736426542617.png" style="width: 119px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="txnelson_1-1736426542617.png" style="width: 119px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="txnelson_1-1736426542617.png" style="width: 119px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="txnelson_1-1736426542617.png" style="width: 119px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="txnelson_1-1736426542617.png" style="width: 119px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="txnelson_1-1736426542617.png" style="width: 119px;"><span class="lia-inline-image-display-wrapper" image-alt="txnelson_1-1736426542617.png" style="width: 119px;"><img src="https://us.v-cdn.net/6038925/uploads/images/71760iF5D0EC4B9B8E8098/txnelson_1-1736426542617.png" role="button" title="txnelson_1-1736426542617.png" alt="txnelson_1-1736426542617.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P>
<CODE class=" language-jsl">nw=new window("colors", lub=lineupbox(ncol(3)));
For Each Row(dt,
Eval(EvalExpr(
lub << Append(
Text Box("Item" || char(:item), << Background Color(Expr(:status)))
)
));
);Betreff: Farbe auf den IndikatorenHallo, danke für die Antwort, es funktioniert gut auf dieser Testbasis!
Ich versuche, dieses Skript zu verallgemeinern, wenn ich mehrere Artikel habe. Pro Artikel werden Farbindikatoren erstellt.
Ich verwende das folgende Skript, erhalte jedoch nicht das richtige Endergebnis:
dt = current data table();
// Créez une nouvelle colonne pour l'indicateur
dt << New Column("Indicateur", Character, Nominal)
one_color = "xyz";
icolor = 0;
Summarize(dt, unique_objects = by(:Article));
m_obs = dt[0, "Article"];
For each( {unique_objects}, m_obs,
for (i = 1, i <= nrows(dt), i++,
one_color = dt:status[i];
if (one_color == "red",
icolor++;
// else
,
if (icolor >= 5,
dt:Indicateur << Color Cells( "Red", i-1 );
icolor = 0;
// else
,
icolor >= 3,
dt:Indicateur << Color Cells( "Yellow", i-1 );
icolor = 0;
);
);
);
// Handle the last row
if (icolor >= 5,
dt:Indicateur << Color Cells( "Red", i-1 );
// else
,
icolor >= 3,
dt:Indicateur << Color Cells( "Yellow", i-1 );
);
);Das erhaltene Ergebnis:

Zeile 18 sollte die Farbe Gelb haben, da es für Artikel B 3 aufeinanderfolgende rote Punkte gibt...
Betreff: Farbe auf den IndikatorenHier ist mein Ansatz

names default to here(1);
dt = current data table();
// Créez une nouvelle colonne pour l'indicateur
dt << New Column("Indicateur", Character, Nominal);
one_color = "xyz";
icolor = 0;
For Each Row(
// If the value of Article has changed set icolor to 0
If( Lag( :Article ) != :Article,
icolor = 0
);
// If status is red, increment icolor else set it back to zero
If( :status == "red",
icolor++,
icolor = 0
);
// Check for the number of icolor
// Set the value for the cell to the appropriate color
// When a color is specified remove no longer correct cell colors
// for previous rows
If(
icolor >= 5,
dt:Indicateur << color cells("red",row());
dt:Indicateur << color cells("",row()-1);
If( icolor == 5,
dt:Indicateur << color cells("",row()-2);
);,
icolor >= 3,
dt:Indicateur << color cells("yellow",row());
dt:Indicateur << color cells("",row()-1);
);
);Betreff: Farbe auf den IndikatorenVielen Dank für Ihre Antwort.
Es funktioniert, aber nicht genau so, wie es sollte.
Ich habe versucht, Änderungen an der zweiten if-Schleife vorzunehmen, kann aber keine Lösung finden.
Unten ist das genaue Ergebnis, das ich erreichen möchte:

Betreff: Farbe auf den IndikatorenIn meinem letzten Skript ging ich davon aus, dass nur die letzte Zeile einer Reihe die berechnete Farbe behalten soll. Um Ihre neueste Spezifikation zu erreichen, habe ich einfach die Zeilen auskommentiert, die die Farben zurücksetzen, wenn das Skript feststellt, dass es nicht die letzte Zeile der Reihe ist.

names default to here(1);
dt = current data table();
// Créez une nouvelle colonne pour l'indicateur
dt << New Column("Indicateur", Character, Nominal);
one_color = "xyz";
icolor = 0;
For Each Row(
// If the value of Article has changed set icolor to 0
If( Lag( :Article ) != :Article,
icolor = 0
);
// If status is red, increment icolor else set it back to zero
If( :status == "red",
icolor++,
icolor = 0
);
// Check for the number of icolor
// Set the value for the cell to the appropriate color
// When a color is specified remove no longer correct cell colors
// for previous rows
If(
icolor >= 5,
dt:Indicateur << color cells("red",row());
//dt:Indicateur << color cells("",row()-1);
/*If( icolor == 5,
dt:Indicateur << color cells("",row()-2);
);*/,
icolor >= 3,
dt:Indicateur << color cells("yellow",row());
//dt:Indicateur << color cells("",row()-1);
);
);Betreff: Farbe auf den IndikatorenIch bin mir nicht sicher, wie das mit der ursprünglichen Frage zusammenhängt, aber es gibt eine etwas andere Möglichkeit zum Erstellen der Indikatorspalte
dt = Current Data Table();
dt << New Column("Color", Character, Nominal,
Set Property(
"Value Colors",
{"Green" = "Green", "Red" = "Red", "Yellow" = "Yellow"}
),
Color Cell By Value,
Formula(
is_red = :status == "red";
If(Row() == 1,
red_count = is_red;
);
If(:Article != Lag(:Article, 1) | is_red == 0,
red_count = is_red;
,
red_count = red_count + is_red;
);
If(red_count >= 5,
"Red";
, red_count >= 3,
"Yellow"
,
"Green"
);
)
);