Betreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen ZeilenDiese Option oder Funktion würde es einfach machen, eine benutzerdefinierte Spaltentransformation zu erstellen, um das von beschriebene Problem zu lösen @hogi in einer der späteren Antworten auf zählen einzigartig
Betreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen ZeilenDie Untersuchung dieses Problems ist im Gange und wir werden Sie informieren, wenn wir zu einer Lösung gelangen.
Betreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen ZeilenEin weiteres Beispiel: Schreiben einer benutzerdefinierten Glättungsfunktion wie eines Savitzky-Golay-Filters, der ausgeschlossene Zeilen ignoriert.Dies kann effizient für die gesamte Spalte auf einmal berechnet werden, wenn die erste Zeile ausgewertet wird. Ich möchte die Werte für die gesamte Spalte bei der ersten Auswertung zwischenspeichern und dann einfach das vorberechnete Ergebnis in jeder Zeile zurückgeben, anstatt es neu zu berechnen jedes Mal.
Betreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen ZeilenJa, das ist mir auch aufgefallen, aber sicher, wenn man es so nutzt. Es scheint, dass es den „konstanten“ Teil zu ernst nimmt, als ich es mir wünschen würde. Wir müssen dies untersuchen, aber wahrscheinlich sind neue Funktionen für die Abhängigkeits-/Wiederholungserkennung erforderlich.
In Fällen wie Ihrem mache ich die Formel normalerweise von einer Tabellenvariablen abhängig und aktualisiere die Tabellenvariable jedes Mal durch die Schleife, um einen neuen Zufallswert zu erhalten.
Betreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen ZeilenHallo @XanGregg ,
Es könnte sein, dass mir etwas fehlt, aber ich konnte As Constant anscheinend nicht dazu bringen, eine Neuauswertung vorzunehmen, wenn die Tabellenformeln erneut ausgeführt werden.Es scheint (wahrscheinlich korrekt) seinen Wert zwischenzuspeichern, solange die Tabelle geöffnet ist. Hier finden Sie ausführlichere Beispiele, die dieses Problem mithilfe einer globalen Variablen lösen.
Mehr sehen... Betreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen ZeilenHaben Sie die Funktion As Constant(x) gesehen? Damit sollte der nur einmal vorkommende Teil der Anfrage behandelt werden.
Local(
{startofweek = As Constant(
Random Uniform(
Col Min( :Timestamp ),
Col Max( :Timestamp ) - In Days( 7 )
)
)},
If( :timestamp > startofweek & :timestamp < startofweek + In Days( 7 ),
1,
0
)
)Betreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen ZeilenVielen Dank für das Beispiel und die zusätzlichen Informationen @ich h . Der Status wurde auf „Wird untersucht“ geändert.
Betreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen Zeilen – Status geändert in: Wird untersuchtBetreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen ZeilenHier sind ein paar mögliche Anwendungsfälle. Ich weiß, dass es noch andere gibt, die ich gerade vergesse.Viele dieser Probleme können bei kleinen Tabellen oder durch die Verwendung mehrerer Spalten oder Tabellenvariablen leicht gelöst werden, aber die Bereitstellung einer Spaltenkontextvariablen würde sie einfacher machen.
- Verwenden Sie einen Zufallswert in der Spaltenformel, damit dieser in einer Simulation ausgetauscht werden kann
// this value should be cached and re-used for all rows,
// but it should change each time the column is recalculated
startofweek = Random Uniform(
Col Min( :Timestamp ),
Col Max( :Timestamp ) - In Days( 7 )
);
If( :Timestamp > startofweek & :Timestamp < startofweek + In Days( 7 ),
1,
0
);
- Die Anzahl der Zeilen seit Beginn der letzten Stichprobe außerhalb der Spezifikation.
- Die Zeit bis zum Ende dieser Kampagne
- Gleitender Durchschnitt der letzten 10 Beispiele für diesen Produktcode
Betreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen ZeilenIch denke, dieser Beitrag könnte das Problem verdeutlichen Erstellen einer statistischen benutzerdefinierten (Formel-)Funktion mit byVar
Betreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen Zeilen – Status geändert in: Informationen erforderlich@ich h Könnten Sie uns ein Beispiel einer Datentabelle mitteilen, die das von Ihnen beschriebene Problem veranschaulicht?
Betreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen Zeilen@hogi – Sie reißen meine Antwort im Fall des technischen Supports hier aus dem Zusammenhang. Ich bezog mich auf Benutzerdefinierte Transformationen denn das ist es, wonach Sie gefragt haben.
Über benutzerdefinierte Funktionen im Allgemeinen habe ich nichts gesagt.
Im Formeleditor selbst gibt es normalerweise Möglichkeiten, einen Spaltenverweis an eine benutzerdefinierte Funktion zu übergeben, indem man ihn beispielsweise in Expr() einschließt. Oder Möglichkeiten für JMP, zu erkennen, dass eine Spalte verwendet werden soll, beispielsweise beim Senden von Nachrichten.
Betreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen ZeilenAutsch – die Antwort ist noch trauriger: *)

*) TS-00063463
Betreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen Zeilen
@ich h schrieb:
Die Formel würde außerdem Zugriff auf die gesamte Spalte und nicht nur auf die aktuelle Zeile benötigen, daher sollte der Spaltenverweis ohne Auswertung übergeben werden.
@Jeff_Perkinson Was TS-00063463 betrifft, lautet die traurige Antwort meiner Meinung nach: noch nicht.
Abgesehen von der Geschwindigkeit sind viele Aufgaben derzeit einfach nicht über benutzerdefinierte Funktionen umsetzbar.
Status: Untersuchen -> klingt vielversprechend 
Ich hoffe, dass es in einer der nächsten Versionen eine Möglichkeit gibt, benutzerdefinierte Funktionen so zu optimieren, dass Spaltenverweise als Parameter akzeptiert werden ...
https://community.jmp.com/t5/Discussions/Column-reference-in-custom-function/mp/265085/highlight/true#M51645
Betreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen ZeilenGenauer gesagt benötige ich diese Funktionalität für benutzerdefinierte Funktionen , die wie folgt hinzugefügt werden:
benutzerdefinierte Funktionen hinzufügen (neue benutzerdefinierte Funktion ())
Benutzerdefinierte Transformationen sind nur eine der Anwendungen dieses wunderbaren Frameworks.
bearbeiten:
z.B
Names Default To Here( 1 );
Add Custom Functions(
New Custom Function(
"COL",
"Median",
Function( {value, byGroup},
Col Median( value, byGroup )
),
<
<FORMULA category=""></FORMULA>
<P><A href="https://community.jmp.com/t5/Discussions/Fast-Way-to-calculate-quot-nested-quot-Col-aggregations-like-MAD/m-p/887467/highlight/true#M104961" target="_blank">https://community.jmp.com/t5/Discussions/Fast-Way-to-calculate-quot-nested-quot-Col-aggregations-like-MAD/mp/887467/highlight/true#M104961</A> </P>
Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen ZeilenEinige integrierte Spaltenformeln wie Col Mean() sind sehr schnell, da sie teure Werte nur einmal berechnen und sie für jede Zeile zurückgeben oder ändern.Bei benutzerdefinierten Formeln ist dies schwieriger zu erreichen, da jede Zeile separat ausgewertet wird.Manchmal kann die Verwendung einer separaten Spalte zum Speichern von Zwischenwerten die Arbeit beschleunigen (z. B. das Speichern der Zeilenindizes, die ein bestimmtes Kriterium erfüllen, anstatt sie für jede Zeile neu zu berechnen), aber das wird chaotisch und schwer nachvollziehbar. Wenn es ein Konzept für einen Spaltenkontext gäbe, bei dem die Auswertung einer Zeile auf die in der vorherigen Zeile berechneten Zwischenwerte zugreifen könnte, könnte ein Skript die Ergebnisse für alle Zeilen gleichzeitig berechnen, diese dann schnell zurückgeben und die Zwischenergebnisse an die nächste weitergeben Reihe. Die Formel würde außerdem Zugriff auf die gesamte Spalte und nicht nur auf die aktuelle Zeile benötigen, daher sollte der Spaltenverweis ohne Auswertung übergeben werden.
Automatisierung und SkripterstellungBetreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen ZeilenEine halbe Lösung – oder sagen wir 1/4:

ist eine sehr nützliche Funktion, die ich vor einiger Zeit aus einer Lösung von gelernt habe @txnelson :
https://community.jmp.com/t5/JMP-Wish-List/Option-or-function-to-evaluate-a-custom-column-formula-at-once/idc-p/695311/highlight/true# M5011
Wenn Sie wissen, dass der einmalige Teil wird stets das gleiche Ergebnis liefern, könnten Sie in Betracht ziehen, es zu verwenden Als Konstante eine benutzerdefinierte Funktion.
(Der folgende Code wurde angepasst von https://community.jmp.com/t5/Discussions/Differentiate-between-entire-column-and-current-row/mp/677710/highlight/true#M86405 von @jthi )
Das Interessante: Es wird nur einmal ausgewertet – und nie wieder (!)
Im Allgemeinen wird dies eine zu extreme Version von „once“ sein 
Jede Möglichkeit, das Verhalten von zu ändern Als Konstante in einer benutzerdefinierten Formel?
Führen Sie es beispielsweise jedes Mal aus row()==1?
Names Default To Here(1);
row_count = 10;
dt = New Table("test",
Add Rows(row_count),
New Column("Die X", set each value(row())),
New Column("Die Y", set each value(Random Integer(1, row_count * 2)))
);
dt << New Column("Formula As Constant", Numeric, Nominal, Formula(
As Constant(print("direct","");x_m = :Die X << get values);
Contains(x_m, :Die Y) > 0;
));
Add Custom Functions(
New Custom Function(
"test",
"myFunc",
Function( {},
As Constant(print("custom","");x_m2 = :Die X << get values);
Contains(x_m2, :Die Y) > 0;
)));
dt << New Column("Formula via Custom Formula", Numeric, Nominal, Formula(test:myFunc()));
Betreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen Zeilen - Status geändert in: BestätigtBetreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen ZeilenMit JMP19 wird es einige Verbesserungen geben:
Beispielsweise wird es möglich sein, Spalte MAD() um Größenordnungen schneller zu berechnen – sogar ohne dazwischenliegende Dummy-Spalten:
Schnelle Möglichkeit zur Berechnung "verschachtelter" Col ... Aggregationen - wie MAD
Betreff: Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen ZeilenDies gilt für die Art von benutzerdefinierten Funktionen, die manuell im Formel-Editor erstellt werden – und mit einem Trick für benutzerdefinierte Funktionen, die über Function() erstellt werden.
Enthält keine „Benutzerdefinierten Funktionen“, die über „Benutzerdefinierte Funktionen hinzufügen“ (neue benutzerdefinierte Funktion ()) erstellt werden.