Verwendung von Variablen im Befehl SendToReport(Dispatch(...)).<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo alle,
Ich schreibe ein JMP-Skript, das ein Fenster mit Kontrollkästchen und Dropdown-Menüs erstellt. Über diese Menüs werden Bedingungen ausgewählt, die dann zum Ausführen von Berichten und zum Generieren von Diagrammen verwendet werden können. Eines der Diagramme, die ich erstelle, weist eine unterschiedliche Anzahl von Zeilen auf, je nachdem, wie viele Kontrollkästchen aktiviert sind. Ich konnte das Diagramm mit allen Linien erfolgreich erstellen, unabhängig davon, welche Kontrollkästchen aktiviert sind. Das Problem, das ich habe, ist mit der Legende. Der erste Datensatz erscheint immer mit Punkten, die sowohl in der Legende als auch auf der Linie angezeigt werden. Bei allen übrigen Datensätzen in diesem Diagramm ist die Linie online in der Legende dargestellt. Um dies zu beheben, doppelklicke ich normalerweise auf die Legende, deaktiviere manuell die Punkte in der Legende, die nicht angezeigt werden sollen, und kopiere dann das Skript, damit dies automatisch geschieht. Wenn das Diagramm 4 Datensätze enthält, sieht das Skript etwa so aus, nachdem ich meine Änderungen an der Legendenbox vorgenommen habe:
SendToReport(
Versenden(
{},
„400“,
LegendBox,
{Position( {-1, -3, -3, -3, 0, 1, 2, 3} )}
)
... //(andere Dispatch()-Befehle)
)
Ich habe andere Befehle für das Diagramm, wie z. B. Namensänderungen der Achsenbeschriftung, sodass dies neben anderen Dispatch()-Befehlen innerhalb des SendToReport()-Befehls erscheint. Das Problem, das ich habe, ist, dass ich die Liste innerhalb des Postion()-Befehls nicht abhängig von der Anzahl der ausgewählten Kontrollkästchen ändern kann. Ich kann die richtige Liste fest codieren, aber dann funktioniert der Code nur für diese Anzahl ausgewählter Kontrollkästchen. Wenn ich zum Beispiel die Liste auf {-1, -3, -3, 0, 1, 2} setze, funktioniert der Code nur dann richtig, wenn ich 3 Kontrollkästchen aktiviert habe. Ich habe eine Variable erstellt, die sich abhängig von der Anzahl der ausgewählten Kontrollkästchen in die richtige Liste ändert (und überprüft, ob sie korrekt zugewiesen wird), aber wenn ich die Variable in die Position()-Funktion einfüge, nimmt der Code nicht die gewünschte Änderung vor Zu. Der folgende Code weist der Variablen PL die richtige Liste zu, je nachdem, wie viele Kontrollkästchen angeklickt werden (die Variablen innerhalb der SUM()-Funktion stellen die Ausgaben der Kontrollkästchen dar).
PL = Wenn(
Summe(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 1, {-1, 0 },
Summe(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 2, {-1, -3, 0, 1},
Summe(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 3, {-1, -3, -3, 0, 1, 2},
Summe(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 4, {-1, -3, -3, -3, 0, 1, 2, 3},
Summe(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 5, {-1, -3, -3, -3, -3, 0, 1, 2, 3, 4},
Summe(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 6, {-1, -3, -3, -3, -3, -3, 0, 1, 2, 3, 4 , 5},
Summe(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 7, {-1, -3, -3, -3, -3, -3, -3, 0, 1, 2, 3, 4, 5, 6},
Summe(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 8, {-1, -3, -3, -3, -3, -3, -3, -3, 0, 1 , 2, 3, 4, 5, 6, 7},
);
Ich habe überprüft, dass dieser Code der Variablen die richtige Liste zuweist. Wenn ich die Variable wie folgt einfüge, wird die Punktbeschriftung nicht wie gewünscht aus dem Legendenfeld entfernt, und wenn ich das Skript des von mir generierten Diagramms kopiere, fehlt der Befehl Dispatch() in das Legendenfeld .
Versenden(
{},
„400“,
LegendBox,
{Position( PL )}
)
Ich habe Variablen schon früher auf ähnliche Weise verwendet, aber ich verweise immer auf eine Zahl in der Liste, anstatt zu versuchen, eine ganze Liste einzufügen (z. B. PL[1]). Ich habe viele Variationen davon ausprobiert, aber bisher hat keine davon funktioniert (PL[], {PL}, {PL[]}).
Bitte helfen Sie mir herauszufinden, was ich falsch mache. Bitte teilen Sie mir mit, wenn etwas unklar ist, und ich kann Ihnen weitere Einzelheiten mitteilen, die zur Beantwortung der Frage erforderlich sind. Dies ist im Großen und Ganzen ein sehr kleines Problem, aber es macht mich wahnsinnig und es fällt mir schwer, darüber hinwegzukommen, ohne eine Lösung zu finden. Helfen!
Betreff: Verwendung von Variablen im Befehl SendToReport(Dispatch(...)).Gern geschehen!
Betreff: Verwendung von Variablen im Befehl SendToReport(Dispatch(...)).Danke für deine Antwort, Ian. Ich verstand, was los war, bis msTBD auftauchte. Ich gehe davon aus, dass dies die Variable ist, die sich abhängig von den ausgewählten Kontrollkästchen ändert, aber ich kann nicht erkennen, wo die Anzahl der Kontrollkästchen eine Rolle spielt.
Betreff: Verwendung von Variablen im Befehl SendToReport(Dispatch(...)).Hallo Philip,
Diese Lösung hat bei mir funktioniert! Vielen Dank für Ihre Hilfe!!
Betreff: Verwendung von Variablen im Befehl SendToReport(Dispatch(...)). jbakri21
Zusätzlich zu Ians Vorschlag. Hier ist ein anderer Ansatz.
Erstens, wenn Sie wie Sie eine IF-Anweisung haben, würde ich stattdessen Choose() verwenden. Die Argumente der Bedingungen sind eine Folge von ganzen Zahlen, beginnend bei 1, daher sind die Gleichheitsklauseln ( expr==1, expr==2, expr==3) integriert. (Weitere Informationen finden Sie in der JSL-Syntaxreferenz.)
Dies wäre jedoch Ihre neue bedingte Anweisung:
PL = Wählen ( Summe (IW27, II09, II44, II08, II42, IW29, CC23, IW24),
{- 1 , 0 }, // 1
{- 1 , - 3 , 0 , 1 }, // 2
{- 1 , - 3 , - 3 , 0 , 1 , 2 }, // 3
{- 1 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 }, // 4
{- 1 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 }, // 5
{- 1 , - 3 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 , 5 }, // 6
{- 1 , - 3 , - 3 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 , 5 , 6 }, // 7
{- 1 , - 3 , - 3 , - 3 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }, // 8
) ;
Um PL in einer anderen JSL-Anweisung zu verwenden, wie Sie es mit Dispatch() versuchen, muss die Parametervariable in Expr() eingeschlossen werden. Also,
Versenden(
{},
„400“,
LegendBox,
{Position( Ausdruck ( PL) )}
)
Dadurch können Sie die Inhalte von PL bewerten (oder erweitern), Vor das Ganze wird ausgewertet. Damit dies funktioniert, müssen Sie dann die gesamte Diagrammfunktion mit Eval( Eval Expr()) umschließen. Ein vollständiges Beispiel finden Sie unten:
dt = Offen ( „$SAMPLE_DATA/Australian Tourism.JMP“ );
PL = { 0 , - 1 , 1 , - 1 , 2 , - 1 };
//PL = {-1, 0, -1, 1, -1, 2};
Bewertung (
Evaluierungsexpr (
dt << Graph Builder (
Systemsteuerung anzeigen( 0 ),
Variablen(
X( :Datum ),
Y( : Name ( „Umsatz ($'000)“ ) ),
Y( : Name ( „Bettenauslastung (%)“ ) ),
Y( : Name ( „Durchschnittliche Aufenthaltsdauer (Tage)“ ) )
),
Elemente( Position( 1 , 1 ), Punkte( X, Y, Legende( 4 ) ), Smoother( X, Y, Legend( 3 ) ) ),
Elemente( Position( 1 , 2 ), Punkte( X, Y, Legende( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Elemente( Position( 1 , 3 ), Punkte( X, Y, Legende( 6 ) ), Smoother( X, Y, Legend( 5 ) ) ),
SendToReport(
Versenden( {}, „Grafiktitel“ , TextEditBox, {Text festlegen( „Tourismustrends“ )} ),
Versenden( {}, „400“ , LegendBox, {Position( Ausdruck (PL))})
)
)
)
);
Hoffe das hilft!
Betreff: Verwendung von Variablen im Befehl SendToReport(Dispatch(...)).(Anpassung eines einfacheren Beispiels aus dem Scripting Index) Sie müssen wahrscheinlich diesen Ansatz (oder vielleicht eine leichte Variante) verwenden:
Namen standardmäßig hier ( 1 ) ;
//Diese Meldung gilt für alle Anzeigefeldobjekte
Offen ( „$SAMPLE_DATA/Big Class.jmp“ ) ;
biv = bivariat ( j ( : Gewicht ) , X ( : Höhe ) ) ;
rbiv = biv << Bericht ;
MS = 5 ;
addMarkers = Ausdruck ( rbiv << Versenden ( {} , „Bivar-Grundstück“ , FrameBox , { Markierungsgröße ( msTBD )} ) ) ;
SubstituteInto ( addMarkers , Ausdruck ( msTBD ) , MS ) ;
addMarkers ;