Betreff: KolonnenformelEine Frage: Warum enthält ENT4 die Dauer ab 2500, ENT2 jedoch nicht die Dauer ab 1749?
Betreff: SpaltenformelEin Fehler in der Datenbank, ich habe die Datenbank aktualisiert!
Danke für die Bemerkung.
Betreff: KolonnenformelSie können dies mit einer Formel tun, aber ich würde es mit Skripten tun. Unten finden Sie ein Beispiel, das zumindest mit Ihren Beispieldaten funktioniert
Names Default To Here(1);
dt = Open("$DOWNLOADS/Test(1).jmp");
// get duration columns
dur_cols = Filter Each({col_name}, dt << Get Column Names("String", Continuous),
Starts With(col_name, "durée")
);
// for indexing later
num_colnr = Transform Each({col_name}, dur_cols, Output("Matrix"), Num(Word(-1, col_name)));
dt << New Column("DUREE TOT", Numeric, Continuous, << Set Each Value(
colidx = Loc(num_colnr > :T); // indices of num colums larger than :T value
If(N Items(colidx) > 0,
val = Sum(dt[Row(), dur_cols[colidx]]);
If(IsMissing(val),
0
,
val
);
,
0
)
));Betreff: SpaltenformelDanke für Ihre Antwort.
Ich habe eine Bemerkung: Es scheint mir, dass Sie in Ihrem Code mit den Elementen der Spalte T vergleichen. Ich habe jedoch vergessen anzugeben, dass die Werte von T in beliebiger Reihenfolge (nicht unbedingt ansteigend) vorliegen können, sodass die Werte Die Operationen sind in aufsteigender Reihenfolge des Fortschritts angeordnet.
Zum Beispiel :
T = 690 / op = 47
T = 550 / op = 55
Und der Fortschritt folgt der Reihenfolge der Operationen!
Zweite Bemerkung: In meiner Datenbank habe ich numerische Werte im Dauerformat für die Dauer T, mit dem Format „h:m:s“.
Betreff: KolonnenformelWenn ich das richtig verstehe, sollte meine Lösung trotzdem funktionieren. Es hängt nur von der Tatsache ab, dass die Spalten :1500, :1749,... in derselben Reihenfolge sind wie die Spalten :duree 1500, :duree 1749,.... Auch wenn JMP Ihnen in Wirklichkeit sauber formatierte Dauerwerte anzeigt (glaube ich), handelt es sich immer noch um Sekunden (Sie können dies überprüfen, indem Sie beispielsweise in den Spalteneinstellungen das Format auf „Beste“ ändern).
Betreff: SpaltenformelIch vermute, dass es ein Problem im Code gibt.
Das Problem läge hier in der Zuweisung der Variablen „colidx“: Wir vergleichen nicht die Zahlen der Variablen T, sondern die diesen Zahlen entsprechenden Operationen (hier die gelben Spalten).
Im obigen Beispiel wäre es für die erste Zeile:
Wenn erste Zeile „:1500“ > erste Zeile „:op“ -> Dauer 1500 hinzufügen
Wenn erste Zeile „:1749“ > erste Zeile „:op“ -> Dauer 1749 hinzufügenWenn erste Zeile „:2100“ > erste Zeile „:op“ -> Dauer 2100 hinzufügen
Wenn erste Zeile „:2500“ > erste Zeile „:op“ -> Dauer 2500 hinzufügen
und tun Sie dies für jede Zeile ...
Betreff: KolonnenformelAlso ändern
colidx = Loc(num_colnr > :T);
Zu
colidx = Loc(num_colnr > :"opé"n);
und nehmen Sie entsprechende Änderungen an Loc (bestimmte Zeilen- statt Spaltennamen verwenden) und num_colnr (es müssen keine Zahlen sein) vor.
Betreff: Spaltenformel
Vielen Dank für Ihre Antwort, ich habe die Zuordnung von „colidx“ bereits wie von Ihnen angegeben geändert.
Allerdings sehe ich nicht, welche Änderungen ich an „und entsprechende Änderungen an Loc (bestimmte Zeilennamen anstelle von Spaltennamen verwenden) und num_colnr (keine Zahlen erforderlich) vornehmen soll“ vornehmen soll.
Können Sie es mir bitte genauer sagen?
Betreff: SpaltenformelIch habe den Wert von num_colnr mit diesem Code geändert, um die für Folgendes benötigten Spalten auszuwählen:
SNames = dt << Get Column Names(String, "Nominal");
For(i=1, i <= N Items(Snames), i++,
sclmn = Column(Snames[i]);
show(sclmn);
);
Mit diesem Code kann ich alle Spalten abrufen, die dem gelben Teil der Datenbank entsprechen.
Allerdings schaffe ich es scheinbar nicht, die entsprechenden Änderungen für den „Loc“ vorzunehmen.
Betreff: KolonnenformelNames Default To Here(1);
dt = Open("$DOWNLOADS/Test (1).jmp");
// get duration columns
dur_cols = Filter Each({col_name}, dt << Get Column Names("String", Continuous),
Starts With(col_name, "durée")
);
// for indexing later
num_colnr = Transform Each({col_name}, dur_cols, Word(-1, col_name));
dt << New Column("DUREE TOT", Numeric, Continuous, << Set Each Value(
colidx = Loc(dt[Row(), num_colnr] > :"opé"n);
If(N Items(colidx) > 0,
val = Sum(dt[Row(), dur_cols[colidx]]);
If(IsMissing(val),
0
,
val
);
,
0
)
));
Abonnieren der Datentabelle
Betreff: SpaltenformelIn meiner Datenbank habe ich 900 verschiedene Spalten (gelbe Spalten), das bedeutet, dass die Zahl „num_colnr“ eine Liste mit vielen Zahlen ist:

Wenn ich das JSL-Skript ausführe, das Sie mit mir geteilt haben, erhalte ich diese Art von Fehler:

Während num_colnr, wie oben abgebildet, eine Liste von Zahlen ist
Betreff: SpaltenformelUnd Hinzufügen von „Num“, um es in eine numerische Zahl umzuwandeln:
num_colnr = Transform Each({col_name}, dur_cols, Num(Word(-1, col_name)));
show(num_colnr);Ich erhalte diese Art von Fehler:

Betreff: KolonnenformelGibt es in Ihrer Datentabelle eine Spalte mit dem Namen „711“? Ich verstehe diese Fehlermeldung nicht, da sie auf Französisch ist, und ich gehe davon aus, dass sie mit dieser identisch ist
Expecting a number or list of numbers at row 1 in access or evaluation of 'dt[ /*###*/Row(),num_colnr]', <BR />Bad Argument("1500"), dt[/*###*/Row(), num_colnr]
at line 14 in C:\Users\jarmo\Documents\Script.jsl
was bedeuten könnte, dass die Spalte mit dem Namen „711“ fehlt.
Betreff: Spaltenformel
Ja, das ist meine erste Kolumne (unter all den gelb gefärbten Kolumnen):
Betreff: KolonnenformelOk, vielleicht deutet es dann darauf hin, dass eine (oder mehrere) dieser Spalten fehlen und nicht wirklich sagen, welche. Vielleicht ist meine Logik, wie ich diese aus den Duree-Spalten bekomme, falsch
Betreff: SpaltenformelJa, wahrscheinlich hast du recht, ich werde auf meiner Seite schauen.
Vielen Dank für Ihre wertvolle Hilfe!
SpaltenformelHallo zusammen,
Ich möchte eine Formel für mehrere Spalten in meiner Datenbank erstellen. Das ist nicht so einfach zu verstehen, ich erkläre mein Ziel an einem Beispiel:

Grauer Teil:
Hier gibt es 4 verschiedene Objekttypen (ENT1,..,ENT4). Jedem der Objekte ist eine Fortschrittsnummer (Spalte T) zugeordnet. Diese Nummern sind mit genau definierten Vorgängen verknüpft.
Gelber Teil:
Diese Zellen zeigen an, welche „Zahlen“ jedes Objekt durchläuft, und verknüpfen diese Zahl mit Operationen. Wenn die Zellen leer sind, bedeutet dies, dass das Objekt dieser Operation nicht unterzogen wird.
Das Ziel ist:
- Addieren Sie die Dauer und wissen Sie, dass das Objekt Fortschritte gemacht hat (Beispiel: Das ENT2-Objekt befindet sich an der Nummer 1749, daher interessiert uns nicht, was es zuvor im Jahr 1500 getan hat.)
- Nehmen wir das ENT2-Objekt, wir müssten die Dauer 2100 und die Dauer 2500 addieren, da dies die Zahlen sind, die dieses Objekt durchlaufen muss.
Vielen Dank für Ihre Hilfe,
Aufrichtig
Automatisierung und Skripterstellung