Optimierung einer IF-Anweisung?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe eine Liste spezifischer Werte, die ich in meinem Datensatz identifizieren möchte (spezifische Werte der Spalte :MeasurementGroup).Ich habe eine neue Spalte mit dem Namen „Value of Interest?“ erstellt. mit einer Formel zur Generierung eines Indikators: entweder JA oder NEIN
dt1 << Neue Spalte( „Wert von Interesse?“,
Charakter,
Nominell,
Formel( Wenn(
:MeasurementGroup == "A", "YES",
:MeasurementGroup == "B", "YES",
:MeasurementGroup == "C", "YES",
:MeasurementGroup == "D", "YES",
:MeasurementGroup == "E", "YES",
:MeasurementGroup == "F", "YES",
:MeasurementGroup == "G", "YES",
:MeasurementGroup == "AA", "YES",
:MeasurementGroup == "BB", "YES",
:MeasurementGroup == "CC", "YES",
:MeasurementGroup == "ZZ", "YES",
:MeasurementGroup == "ABC", "YES",
:MeasurementGroup == "DEC", "YES",
:MeasurementGroup == "WSA", "YES",
:MeasurementGroup == "RSS", "YES",
:MeasurementGroup == "DVC", "YES",
:MeasurementGroup == "SFS", "YES",
:MeasurementGroup == "AAZ", "YES",
:MeasurementGroup == "ZZA", "YES",
:MeasurementGroup == "TTT", "YES",
"NEIN") )
);
Meine Datentabelle hat fast 1 Million Zeilen ... und sie scheint sich eine Weile zu bewegen, bevor sie gefüllt wird.Gibt es eine effizientere Möglichkeit, dasselbe Ergebnis zu erzielen?
Jede Hilfe wird sehr geschätzt! Danke
Betreff: Eine IF-Anweisung optimieren?Danke Peter, ich werde diesen Trick von nun an anwenden, wenn ich poste.
Prost,
Brady
Betreff: Eine IF-Anweisung optimieren?Sieht gut aus, Brady!
Übrigens, wenn ich Code poste, kopiere/füge ich die JSL in ein Word-Dokument ein und kopiere/füge sie dann von dort in das Forum ein.Dadurch bleibt das Aussehen des JSL-Editors erhalten.
Zum Beispiel:
dt << Neue Spalte ( „J/N 2“ ,
Formel (
Enthält ( { "A" , "B" , "C" , "D" , „E“ , "F" , "G" , „AA“ , „BB“ , „CC“ , „ZZ“ , "ABC" , „DEZ“ , „WSA“ ,
„RSS“ , „DVC“ , „SFS“ , „AAZ“ , „ZZA“ , „TTT“ } , : Messgruppe
) != 0
) ,
) ;
Betreff: Eine IF-Anweisung optimieren?Hallo JMPBeginner,
**** Bitte sehen Sie sich die beigefügte .jsl-Datei an, um diese Skripte wie vorgesehen anzuzeigen. Ich hatte Probleme damit, meine Beiträge korrekt anzuzeigen, und wenn Sie die unten angezeigten Skripte kopieren/einfügen oder eingeben, bin ich mir nicht sicher, ob sie funktionieren. Wenn ich sie poste, sehen sie falsch aus, aber wenn ich sie bearbeite, sehen sie in Ordnung aus, sodass ich nicht sicher bin, was ich tun soll, außer eine Skriptdatei anzuhängen. Entschuldigen Sie!
*****
Wenn Sie bereit sind, Wertelabels zu verwenden (bei großen Tabellen kann dies auch viel Speicherplatz sparen), haben Sie noch ein paar weitere schnelle Optionen:
1) Ein formelbasierter Ansatz mit der Funktion „Contains()“:
dt << Neue Spalte( "y/n 2",
Formel(
Enthält(
{"A", "B", "C", "D", "E", "F", "G", "AA", "BB", "CC", "ZZ", "ABC", " DEC“, „WSA“, „RSS“, „DVC“, „SFS“, „AAZ“, „ZZA“, „TTT“},
:MeasurementGroup
) != 0
),
<
);
2) Ein nicht formelbasierter Ansatz: JMP arbeitet sehr schnell mit Tabellen; Die Geschwindigkeit dieses Ansatzes hat mich ein wenig schockiert, wenn man bedenkt, dass eine völlig neue Tabelle erstellt und geschlossen werden muss:
dt = Aktuelle Datentabelle();
dt2 = New Table( "mt", unsichtbar );
Spalte( dt2, 1 ) << Datentyp( Zeichen ) << Name festlegen( "MeasurementGroup" ) << Werte festlegen(
{"A", "B", "C", "D", "E", "F", "G", "AA", "BB", "CC", "ZZ", "ABC", " DEC“, „WSA“, „RSS“, „DVC“, „SFS“, „AAZ“, „ZZA“, „TTT“}
);
dt2 << New Column( "y/n", <
dt << New Column( "y/n", <
dt << Update( With( dt2 ), Match Columns( :Measurement Group = :MeasurementGroup ), Add Columns from Update table( None ) );
Column( dt, "y/n" ) << Add Column Properties( value labels( {0, 1}, {"NO", "YES"} ) );
Close( dt2, nosave );
Bei einer Tabelle mit einer Million Zeilen habe ich Laufzeiten von ca. 2,4 Sekunden für die Match-Funktion erhalten. (Der Computer von MS scheint schneller zu sein als meiner 
Die Laufzeiten von Ansatz 1 oben betrugen ~ 0,8 Sekunden, während die Laufzeiten von Ansatz 2 ~ 0,4 Sekunden betrugen.
Prost,
Brady
Betreff: Eine IF-Anweisung optimieren?Jim, danke für die schnelle Antwort! Ich konnte die LOC-Funktion implementieren und eine sofortige Geschwindigkeitsverbesserung feststellen!
MS, vielen Dank, dass Sie dies weiter verbessert und mir die MATCH-Funktion beigebracht haben (und den Geschwindigkeitsvergleich bereitgestellt haben)!
Betreff: Eine IF-Anweisung optimieren?Geben Sie diesem Mann eine Auszeichnung!Das ist toll.
Betreff: Eine IF-Anweisung optimieren?Die Match-Funktion ist für Mehrfachauswahlen wirksam. Ich habe einen Schnelltest gemacht: mit einer Million Zeilen Übereinstimmen , Ort Und Wenn in 2,1 Sek., 6,9 Sek. bzw. 10,2 Sek. abgeschlossen.
dt << Neue Spalte ( „Wert des Interesses“ ,
Charakter ,
Nominell ,
Formel (
Übereinstimmen ( : Messgruppe ,
"A" , "JA" ,
"B" , "JA" ,
"C" , "JA" ,
"D" , "JA" ,
„E“ , "JA" ,
"F" , "JA" ,
"G" , "JA" ,
„AA“ , "JA" ,
„BB“ , "JA" ,
„CC“ , "JA" ,
„ZZ“ , "JA" ,
"ABC" , "JA" ,
„DEZ“ , "JA" ,
„WSA“ , "JA" ,
„RSS“ , "JA" ,
„DVC“ , "JA" ,
„SFS“ , "JA" ,
„AAZ“ , "JA" ,
„ZZA“ , "JA" ,
„TTT“ , "JA" ,
"NEIN"
)
)
) ;
Betreff: Eine IF-Anweisung optimieren?Ich würde versuchen, die Funktion LOC() zu verwenden
if(N Rows(Loc({"A","B","C",...............},MeasurementGroup))>0,"Yes",NO" )