Datenfilter – Alle auswählen, wenn es keinen alternativen Wert zur Anweisung „wo ist nicht gleich“ gibt (=!)Suchen Sie nach Hilfe, um das Verhalten zu verstehen, oder nach einer besseren Möglichkeit, dies zu skripten.
Schreiben eines Skripts zum Abfangen von Ausnahmen in den Daten. Wenn die Version GP ist, aber aktiv ist nicht X.
Names Default To Here( 1 );
dt = Current Data Table();
df = dt << Data Filter(
Location( {138, 181} ),
Add Filter(
columns( :Active, :Version ),
Where( :Active != "X" ),
Where( :Version == "GP" )
)
);Anschließend erstellt der Rest des Skripts Teilmengen dieser Daten und erstellt aus dieser Teilmenge eine Tabelle.
Das Problem, auf das ich stoße, ist, wenn alle Zeilen Active == X haben.Der Filter wählt alle Zeilen aus.Ich nehme an, das liegt daran, dass keine Alternative zu X gefunden wird, die leer ist (nicht fehlt).Wie geht man damit am besten um?
Ergebnis des obigen Codes:

Betreff: Datenfilter – Alle auswählen, wenn es keinen alternativen Wert zur Anweisung „wo ist nicht gleich“ gibt (=!)Schnelle Notiz.Ich habe Ihren Vorschlag genutzt, um bei einer Analyse zu helfen. Weiter zum nächsten.Deshalb stimmt die Codierung nicht mit dem Screenshot überein.
Betreff: Datenfilter – Alle auswählen, wenn es keinen alternativen Wert zur Anweisung „wo ist nicht gleich“ gibt (=!)Das ist sehr hilfreich. Danke schön.
Am Ende habe ich so etwas wie das Folgende gemacht.
Skriptfrage: Gibt es einen besseren Weg, dies zu tun?Brauchte ich das CLE_TL-Zwischenprodukt?Oder kann es einfach dt << select where << subset in einer Zeile sein?Hat die Erstellung dieses CLE_TL-Objekts einen Vorteil?
names default to here(1);
dt = current data table();
shipPlant = "CLE";
shipMode = "truckloads";
subsetTable = "CLE_truckloads";
//filter
CLE_TL = dt << select where(:TransportPlanningPt == shipPlant & :MODE == shipMode);
//subset
CLE_TL << Subset(
Output Table( subsetTable ),
Selected Rows( 1 ),
Selected columns only( 0 )
);
Betreff: Datenfilter – Alle auswählen, wenn es keinen alternativen Wert zur Anweisung „wo ist nicht gleich“ gibt (=!)OK, es macht Ihre Skripterstellung tatsächlich einfacher. Keine lästige menschliche Interaktion erforderlich!
Die Datentabellennachricht << Wo auswählen (Boolescher Ausdruck) wird alles für Sie tun. Der boolesche Ausdruck kann einfach sein (z :Alter == 12 ) oder komplex (z. B. :Alter == 12 & :Geschlecht == "F" ). Jede Funktion, die ein Ergebnis zurückgibt, das als Boolescher Wert interpretiert werden kann (dh 0 ist falsch, nicht 0 ist wahr), funktioniert. Diese Anforderung bedeutet, dass Sie Abfragefunktionen wie verwenden können Enthält( Quellspalte, „Ziel“ ) für wörtliche Ziele oder Regex (Quellspalte, Regex) für Muster.
Nachdem Sie die gewünschten Zeilen ausgewählt haben, senden Sie die << Teilmenge() Nachricht zum Extrahieren der Daten.
Betreff: Datenfilter – Alle auswählen, wenn es keinen alternativen Wert zur Anweisung „wo ist nicht gleich“ gibt (=!)Für den Benutzer ist keine Schnittstelle erforderlich.Nur ein Anfänger, der nach jedem manuell ausgeführten Schritt Code stiehlt und dann den Code aus diesen Schritten erstellt.Ich gehe davon aus, dass es eine bessere Möglichkeit gibt, die Teilmenge auszuwählen und die Teilmengentabelle zu erstellen.
Betreff: Datenfilter – Alle auswählen, wenn es keinen alternativen Wert zur Anweisung „wo ist nicht gleich“ gibt (=!)Ich überprüfe nur: Warum verwenden Sie ein Datenfilterobjekt? Muss der Benutzer für das Skript interagieren?
Betreff: Datenfilter – Alle auswählen, wenn es keinen alternativen Wert zur Anweisung „wo ist nicht gleich“ gibt (=!)Sie können zunächst prüfen, ob die Bedingung erfüllt werden kann:
target rows = Current Data Table() << Get Rows Where( :Active != "X" );
If( N Row( target Rows ),
...
);