Betreff: BerechnenHallo @hcarr01 ,
Ich bin mir nicht sicher, ob ich Ihre Anfrage richtig verstehe, aber wie wäre es mit dem folgenden Skript?
Names Default To Here( 1 );
dt = Current Data Table();
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 ) );
// Add : Matrix of the index
num_colnr_mt = Matrix( Transform Each( {col_name}, dur_cols, Num( Word( -1, col_name ) ) ) )`;
dt << New Column( "DUREE ETAPE1",
Numeric,
Continuous,
Format( ":jou:hh:m", 8 ),
<<SET each="" value=""> :"opé"n & (num_colnr < 2100 ) );
colidx = Loc( dt[Row(), num_colnr] >= :"opé"n & (num_colnr_mt < 2100) ); // Changed
If( N Items( colidx ) > 0,
val = Sum( dt[Row(), dur_cols[colidx]] );
If( Is Missing( val ),
0,
val
);
,
0
);
,
0
)
)
);
</SET>
Wenn Sie den folgenden Code berechnen möchten, müssen Sie eine Matrix verwenden.
"num_colnr < 2100"
Ich hoffe, es hilft.
NeuberechnungVielen Dank für Ihre Hilfe. Der Code funktioniert ordnungsgemäß, es liegt jedoch ein Problem vor.
Das Ziel besteht nicht darin, die Zahlen der Variablen T so zu verwenden, dass T < 2100, da diese Zahl für jedes Objekt eine andere entsprechende Operation hat.
Es wäre notwendig, eine Zuweisung vorzunehmen, bei der wir für jedes Objekt die Operation suchen, die der Zahl 2100 (in der Variablen T) entspricht.
Für jede Zeile wäre es:
Wenn die aktuelle Operation kleiner oder gleich der Operation ist, die der Nummer 2100 entspricht, wird die Summe zu der Operation gemacht, die der Nummer 2100 entspricht.
Beispiel in der ersten Zeile:
Laufender Vorgang: 55
Vorgang entsprechend der Nummer 2100 -> 62
Bilden Sie also die Summe der Zahl, die der Operation 55 entspricht, also die Zahl 1500.
Daher ist „Schrittdauer“ = „Dauer 1500“ = 30
Nur dass die Zahlen nicht unbedingt aufsteigend geordnet sind.
Betreff: BerechnenHallo @hcarr01 ,
Danke für Ihre Antwort.Kann ich mein Verständnis überprüfen?
Beispiel in der zweiten Zeile:
Laufender Vorgang: 60 (Anzahl in Spalte „opé“)
Operation entsprechend der Nummer 2100 -> 62 (in Variable T und opé)
Bilden Sie also die Summe der Zahl, die der Operation 60 entspricht, also die Zahl 1749 (suchen Sie die Zahl 60 in Spalte 1500, 1749, 2100 oder 2500).
Daher ist „Dauer des Schritts“ = „Durée 1749“ = 45
Beispiel in der dritten Reihe:
Laufender Vorgang: 62 (Nummer in der Spalte „opé“)
Vorgang entsprechend der Nummer 2100 -> 62
Bilden Sie also die Summe der Zahl, die der Operation 62 entspricht, also die Zahl 2100.
Daher ist „Schrittdauer“ = 0 (da die aktuelle Operation größer oder gleich der Operation ist, die der Nummer 2100 entspricht).
In Ihrer Frage haben Sie Folgendes beschrieben.
„Schritt 1 entspricht der Nummer 2100, diese Nummer kann jedoch abhängig von den Objekten eine andere entsprechende Operation haben (Beispiel: Objekt 1 -> Nummer 2100 / Operation 62, Objekt 5 -> Nummer 2100 / Operation 74)“.
Wie sieht Objekt 5 aus? Können Sie uns ein Beispiel geben?
Wenn mein Verständnis nicht korrekt ist, lassen Sie es mich bitte wissen.
Betreff: BerechnenIch freue mich, dass Sie das Problem selbst lösen konnten.
NeuberechnungJa, deine Argumentation ist richtig!
Objekt 5 stellt dar, welches Objekt wir untersuchen, und abhängig von den verschiedenen Objekten haben die Operationen und die Zahlen unterschiedliche Entsprechungen.
Ich denke, dieser Code könnte funktionieren:
dt = Current Data Table();<BR />
dur_cols = Filter Each( {col_name}, dt << Get Column Names( "String", Continuous ),
Starts With( col_name, "durée" )
);
num_opé = Filter Each( {col_name}, dt << Get Column Names( "String", Continuous ),
Starts With( col_name, "opé" )
);
// for indexing later
num_colnr = Transform Each( {col_name}, dur_cols, Word( -1, col_name ) );
// Add : Matrix of the index
num_colnr_mt = Matrix( Transform Each( {col_name}, dur_cols, Num( Word( -1, col_name ) ) ) )`;<BR />
dt << New Column( "DUREE",<BR />Numeric,<BR />Continuous,<BR />Format( ":jou:hh:m", 8 ),<BR /><<SET each="" value=""></SET>If( dt[Row(), num_opé ] < :"2100"n,<BR />//colidx = Loc(dt[Row(), num_colnr] > :"opé"n & (num_colnr < 2100 ) );<BR />colidx = Loc( dt[Row(), num_colnr] >= :"opé"n & (dt[Row(), num_colnr] < :"2100"n) ); // Changed<BR />If( N Items( colidx ) > 0,<BR />val = Sum( dt[Row(), dur_cols[colidx]] );<BR />If( Is Missing( val ),<BR />0,<BR />val<BR />);<BR />,<BR />0<BR />);<BR />,<BR />0<BR />)<BR />)<BR />);<BR /> Berechnung
Hallo 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:

Schritt 1 entspricht der Nummer 2100, aber diese Nummer kann abhängig von den Objekten eine andere entsprechende Operation haben (Beispiel: Objekt 1 -> Nummer 2100 / Operation 62, Objekt 5 -> Nummer 2100 / Operation 74)
SCHRITT 1: entspricht der Nummer 2100
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 bis Schritt 1, wobei Sie wissen, 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), sodass die Dauer bis Schritt 1 nur die Dauer ist von Schritt 1749, also Dauer = 45
Ich habe mit diesem Code begonnen:
Names Default To Here( 1 );
dt = Current Data Table();
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 ETAPE1", Numeric, Continuous, Format(":jou:hh:m",8), << Set Each Value(
If( :"T"n < 2100 ,
colidx = Loc(dt[Row(), num_colnr] > :"opé"n & (num_colnr < 2100 ) );
If(N Items(colidx) > 0,
val = Sum(dt[Row(), dur_cols[colidx]]);
If(IsMissing(val),
0
,
val
);
,
0
)
,
0
)
));
Vielen Dank für Ihre Hilfe,
Aufrichtig
InhaltsorganisationDatenzugriffQualitäts- und Verfahrenstechnik