Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Power Query: was macht eigentlich List.Difference() ?
#1
Hallo Ihr Wissenden,

gerade stellt PQ mir mal wieder Rätsel auf. Ich will aus einer Liste alle 0-en entfernen. Laut Beschreibung sollte das mit der Funktion List.Difference() möglich sein. Ist es bei mir aber nicht.

Wie im Screenshot zu sehen, liefert die Funktion aus einer Liste eine Menge an 0 als Ergebnis... warum??

Dabei wird die Liste erstellt aus einer Tabelle, in der die Einträge als Ergebnis von Rechnungen erstellt werden:
Code:
Vergleich = Table.AddColumn(#"Neu+Alt", "Vergleich", each if (Number.Abs(Number.From([DateiDatum]-[ModifyDateandTime]))>1/24/3600 or [Name]=null) then 1+0 else 1-1, Int8.Type)
Somit ist die Liste, die aus der hier erstellten Spalte Vergleich gebildet wird (List = Vergleich[Vergleich]), komplett mit Zahlen gefüllt. Trotzdem mag mir der List.Difference Befehl die Nullen nicht entfernen - Idee dazu?

Gruß und Dank,
RaiSta

Der Screenshot:    
Antworten Top
#2
Zitat:Ich will aus einer Liste alle 0-en entfernen. Laut Beschreibung sollte das mit der Funktion List.Difference() möglich sein.
Das steht in der Doku aber nicht. 
Gibt die Elemente in Liste list1 zurück, die nicht in Liste list2 enthalten sind. Doppelte Werte werden unterstützt.

Teste 
Code:
List.Difference({0,0,0,0},{0})
List.Difference({0,0,0,0},{0,0})
Du suchst eher List.RemoveItems
Antworten Top
#3
Hättest du mal besser erklärt, was du eigentlich willst. 

Entweder alle Zeilen löschen, die in einer Spalte eine 0 enthalten, oder den Inhalt der betreffenden Zellen durch etwas anderes ersetzen?
Antworten Top
#4
(01.09.2022, 19:43)ws-53 schrieb: Hättest du mal besser erklärt, was du eigentlich willst. 

Entweder alle Zeilen löschen, die in einer Spalte eine 0 enthalten, oder den Inhalt der betreffenden Zellen durch etwas anderes ersetzen?

Hmmm, ursprünglich wollte ich im aktuellen Thema das Vorkommen aller '1' in der Vergleichsliste 'vgl' zählen. Da dachte ich mir, es kommen ja nur '1' und '0' vor --> die Anzahl aller '1' ist dann einfach die Summe der Spalte: List.Sum(vgl). Das brachte aber in schöner Regelmäßigkeit die Fehlermeldung, dass die Operation nicht auf 'null' angewandt werden könne.

Laut Konstruktion können da gar keine 'null'- Werte auftreten ... aber, wer weiß, was in 12000 Zeilen alles so an Unmöglichkeiten drin steht, also habe ich auf verschiedene Weisen versucht, 'null' zu entfernen ... ohne Erfolg. Bis ich schließlich auf die Idee kam, in der Liste 'vgl' halt alle '0' und alle 'null' zu entfernen, um danach die Anzahl übrig gebliebener Zeilen zu zählen. Damit erzielte ich aber auch keinen Erfolg, sondern es traten immer irgendwelche rätselhafte Meldungen auf.

Somit kam ich dann in's Forum mit meiner Frage - und jetzt vermute ich, dass PQ einfach mit derart umfangreichen Listen nicht umgehen kann, sodass es hier zu merkwürdigen Meldungen kommt, die aber wohl internen Grenzen bei PQ geschuldet sind. Das ist meine derzeitige Erklärung - vielleicht hat ja jemand eine bessere ... ?

Gruß und Dank
RaiSta
Antworten Top
#5
Zitat:vielleicht hat ja jemand eine bessere ... ?
Ja, aber die willst Du nicht hören
Code:
= List.Count(List.Select ({1,2,3,4,1,3,2,4,0,9,0}, each _ = 1))
Antworten Top
#6
(01.09.2022, 19:15)DeltaX schrieb: Das steht in der Doku aber nicht. 
Gibt die Elemente in Liste list1 zurück, die nicht in Liste list2 enthalten sind. Doppelte Werte werden unterstützt.
[...]
Du suchst eher List.RemoveItems

Hmmm, eine Antwort hatte ich schon geschrieben, scheint aber verschwunden zu sein...?

Jedenfalls Danke für den Hinweis auf List.RemoveItems! Diese Funktion bietet das, was ich mit List.Difference erreichen wollte! Wobei ich die Beschreibung zu List.Difference(List1, List2) dann nicht ganz verstehe (hast Du ja zitiert). Aber offenbar entfernt List.Difference nur das erste Vorkommen von Elementen aus List2 in List1 ... oder? Was verstehe ich da falsch?

Nichts desto trotz scheitert aber auch List.RemoveItems an meiner konkreten Aufgabenstellung: nach Eingabe des Befehls erscheint erst für ne ganze Weile das Windows-Rad (früher war das die Sanduhr...), dann steht da plötzlich lapidar 'Error'. Ein Klick neben Error lässt das Rad wieder lange kreiseln, bevor schließlich eine einfache '1' erscheint. Keine Erklärung des 'Errors' oder was auch immer --> offenbar ist PQ mit 12000 Einträgen in einer Liste überfordert (auch wenn nur 1 oder 0 drin steht). Na ja, dann muss ich mir was anderes überlegen...

Danke für den Hinweis, auch wenn dabei meine Fragen nicht wirklich weniger wurden ... aber anders wurden sie ... 

Gruß und Dank,
RaiSta
Antworten Top
#7
Zitat:Aber offenbar entfernt List.Difference nur das erste Vorkommen von Elementen aus List2 in List1 ... oder? Was verstehe ich da falsch?
Ja, Du verstehst das falsch.

Mit 12.000 Einträgen in einer Liste ist Powerquery nicht überfordert. Mir scheint, die Überforderung liegt woanders. Aber Du musst schon mehr Infos und eine Beispieldatei liefern, so kommen wir nicht weiter.
Antworten Top
#8
(01.09.2022, 20:45)DeltaX schrieb: Ja, aber die willst Du nicht hören
Code:
= List.Count(List.Select ({1,2,3,4,1,3,2,4,0,9,0}, each _ = 1))

Na ja, als Lösungsansatz durchaus einen Versuch wert, aber meine Frage bezog sich mehr darauf, warum PQ kein 'vernünftiges' Ergebnis liefert. Die Vermutung war, dass es mit >12000 Einträgen schlicht überfordert sei - oder ob es _dazu_ bessere Erklärungen gibt.

Nichts desto trotz habe ich Deinen Vorschlag mal umgesetzt. Das Ergebnis ist in den Screenshots anzusehen:
a) zur Zeilenzahl:    
b) Ergebnis der Formel:     

Also scheitert PQ auch mit dieser Formel ... an der Zahl der Elemente?

Gruß und Dank,
RaiSta
Antworten Top
#9
Schöne Bilder
Antworten Top
#10
Zitat:Also scheitert PQ auch mit dieser Formel ... an der Zahl der Elemente?
Die Fehlermeldung ist doch eindeutig. Du willst die Anzahlder Listelemete zählen, die die Zahl 1 enthalten. Somit handelt e sich um eine numerische Zählung. Die Liste enthält aber wohl auch Initialwerte (null), die nicht numerisch sind und somit beiZählung numerischer Werte zum Fehler führen. Wenn du vorher die Inhalte der Liste als Text definierst und dann zählst, wie oft der Text "1" in der Liste enthalten ist, dann sollte es keine Probleme geben.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste