Power Query: was macht eigentlich List.Difference() ?
#11
(01.09.2022, 22:01)DeltaX schrieb: Ja, Du verstehst das falsch.

Du hattest empfohlen, mal zu testen, was passiert mit
Code:
List.Difference({0,0,0,0},{0})          --> {0,0,0}
List.Difference({0,0,0,0},{0,0})        --> {0,0}
Das heißt, in beiden Fällen hat PQ genau ein Element aus List2 aus der zuerst angegebenen List1 entfernt. Was habe ich daran falsch verstanden?

Zum Thema 'Beispieldatei' bin ich am Überlegen, wie ich das sinnvoll realisieren kann.

Gruß und Dank
RaiSta
Antworten Top
#12
Bei mir läuft folgender Code problemlos:

Code:
let
    Source = Folder.Files("C:\Users\myname"),
    #"Removed Columns" = Table.RemoveColumns(Source,{"Folder Path", "Extension"}),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Date created", "DateiDatum"}, {"Date modified", "ModfyDateandTime"}}),
    Vergleich = Table.AddColumn(#"Renamed Columns", "Vergleich", each if Number.From([DateiDatum]) - Number.From([ModfyDateandTime]) > 1/24/3600 or [Name] = null then 1 else 1-1),
    #"Grouped Rows" = Table.Group(Vergleich, {"Vergleich"}, {{"Anzahl", each Table.RowCount(_), Int64.Type}})
in
    #"Grouped Rows"

Das ist:
     0 = 257.602
     1 =  29.807

0 ergit sich z.B. daraus, dass Dateien kopiert wurden, denn dann erhalten diese das aktuelle Datum als Erstellungsdatum und behalten das alte Änderungsdatum.
Antworten Top
#13
(01.09.2022, 22:59)ws-53 schrieb: 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.

Dem muss ich widersprechen. Mit dem von Dir vorgeschlagenen Befehl
Code:
= List.Count(List.Select ({1,2,3,4,1,3,2,4,0,9,0}, each _ = 1))
kann ich problemlos auch null oder Texte befragen, ergibt keinen Unterschied
Code:
= List.Count(List.Select ({1,2,3,4,1,3,2,4,0,9,0}, each _ = 1))          --> 2
Code:
= List.Count(List.Select ({1,2,null,4,1,3,2,"Vier",0,9,0}, each _ =1))   --> 2

Somit sollte dieser Befehl unempfindlich gegen null oder Text in der Liste sein.

Die Fehlermeldung kann ich mir folglich nicht erklären. Meine Interpretation war ja ursprünglich genau, wie Du geschrieben hast. Daher habe ich nach Wegen gesucht, null zwangsweise zu entfernen.

Auch in der Tabelle habe ich mir die Spalte "Vergleich" angesehen. PQ meint aber, dass die Spalte ausschließlich 0 und 1 enthält (beim Klick auf das Dreieck am oberen rechten Eck über der Spalte, wo man einzelne Inhalte selektieren kann --> da steht nur 'alle auswählen', '1', '0'. Kein null, nix sonst. Daher behaupte ich dass die Spalte nur 1 oder 0 enthält).

Aber ich bin dabei, eine Beispieldatei zu erstellen, die ich ohne Verletzung der Compliance hochladen kann. Mal sehen. Vielleicht auch erst morgen, Zugriff auf das Dateisystem via VPN ist echt laaaahm...

Gruß und Dank,
RaiSta
Antworten Top
#14
Gemäß Doku ist List.Difference nicht zur Beantwortung deiner Frage geeignet.

https://docs.microsoft.com/de-de/powerqu...difference
Antworten Top
#15
Ich gebe Raista mal Recht, wer hätte das gedacht 05
WS-53 schrieb: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.
Raista schrieb:Dem muss ich widersprechen
Aber ich muss Raista gleich widersprechen.
Raista schrieb:Mit dem von Dir (Anm.: gemeint ist WS-53) vorgeschlagenen Befehl
Code:
= List.Count(List.Select ({1,2,3,4,1,3,2,4,0,9,0}, each _ = 1))
Der Vorschlag kam von mir  21

Raista schrieb:PQ meint aber, dass die Spalte ausschließlich 0 und 1 enthält (beim Klick auf das Dreieck am oberen rechten Eck über der Spalte, wo man einzelne Inhalte selektieren kann --> da steht nur 'alle auswählen', '1', '0'. Kein null, nix sonst. Daher behaupte ich dass die Spalte nur 1 oder 0 enthält).
Da werden nicht unbedingt alle Einträge angezeigt. Das ist eine Vorschau basierend auf den ersten 1000 (je nachdem was eingestellt ist) Datensätzen.

Aber Obacht
Code:
= {0,"1",2,3,4,9,0,1,2,null}
enthält nur eine 1 bzw. eine "1"

Aber ich bleibe dabei, Beispieldaten ...
Antworten Top
#16
(02.09.2022, 08:13)DeltaX schrieb: Der Vorschlag kam von mir  21
Bitte untertänigst um Entschuldigung, dass ich den Vorschlag dem falschen Urheber unterstellt hatte ... hoffe, dass es auch angesichts der gestrigen ... äh heutigen Uhrzeit verziehen werden kann, dass es falsch zugeordnet wurde... 20 22
Zitat:Da werden nicht unbedingt alle Einträge angezeigt. Das ist eine Vorschau basierend auf den ersten 1000 ... Datensätzen
Nun, dann teilt PQ aber mit, dass nicht alles angezeigt wird. Wenn ich dann 'weitere laden' anklicke, dauerts ne Weile und dann wird ergänzt. Werden dabei dann nicht alle Datensätze berücksichtigt?

Jedenfalls muss ich hier nix ergänzen, PQ zeigt sofort nur die beiden Einträge (0, 1) und gibt auch kein Erweitern oder so als Option an. Es liest sich für mich so, als gäbe es nur diese beiden Werte.

Zitat:Aber ich bleibe dabei, Beispieldaten ...
Ja, ich stimme Dir ja zu. Das Problem ist, dass die Tabelle nicht nur 12000 Zeilen, sondern auch 5000 Spalten enthält (was eine willkürliche Einschränkung meinerseits ist - eigentlich müssten es ~32000 Spalten sein, das kann Excel aber nicht. Das Datenmodell mag auch nicht so viele Einträge und empfiehlt mir, auf 64-Bit Excel umzusteigen (wobei mein XL 365 64-bit unter Windows 10-64bit ist...) oder den Hauptspeicher zu erweitern (aktuell 16GB))
Mein Rechner (Core i7 9850H) wird da schon ziemlich lahm und dann noch zusätzlich die Netzwerkzugriffe via VPN ... müsste die Daten halt den Compliance-Regeln gemäß 'denaturieren'. Da bin ich noch am Basteln..

Gruß und Dank,
RaiSta

P.S.: das Zitieren hier habe ich noch nicht so 'drauf. Will ich da was kopieren und woanders einfügen, wird's unleserlich klein, kaum zu sehen, etc. Die Handhabung in diesem Forum ist mir bei Weitem nicht so vertraut wie in 'meinem' alten Forum (Office-loesung.de/p). Die WYSIWYG - Oberfläche hier erschließt sich mir noch nicht so ganz... bin aber auch schon etwas älter - angeblich in den besten Jahren... da dauert sowas schon mal biss'l länger Undecided Huh 

(01.09.2022, 23:26)ws-53 schrieb: Bei mir läuft folgender Code problemlos:

Code:
let
    Source = Folder.Files("C:\Users\myname"),
    #"Removed Columns" = Table.RemoveColumns(Source,{"Folder Path", "Extension"}),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Date created", "DateiDatum"}, {"Date modified", "ModfyDateandTime"}}),
    Vergleich = Table.AddColumn(#"Renamed Columns", "Vergleich", each if Number.From([DateiDatum]) - Number.From([ModfyDateandTime]) > 1/24/3600 or [Name] = null then 1 else 1-1),
    #"Grouped Rows" = Table.Group(Vergleich, {"Vergleich"}, {{"Anzahl", each Table.RowCount(_), Int64.Type}})
in
    #"Grouped Rows"

Das ist:
     0 = 257.602
     1 =  29.807

Das mit den 'grouped rows' -- sehr schöner Ansatz, gefällt mir. Ist elegant. Mal sehen, wie ich den einsetzen kann!

Gruß und Dank,
RaiSta
Antworten Top
#17
Raista schrieb:Bitte untertänigst um Entschuldigung..
Das war aber knapp  19  100
Raista schrieb:Das Problem ist, dass die Tabelle nicht nur 12000 Zeilen, sondern auch 5000 Spalten enthält
Und eigentlich sind es 32.000 Spalten. Da ist im Datenmodell aber gewaltig etwas schief. Hört sich ja so an als würdest Du "pivotierte" Daten laden. Da muss vorher etwas anderes passieren, am besten auf dem Server, der die Daten zur Verfügung stellt.
Raista schrieb:Nun, dann teilt PQ aber mit, dass nicht alles angezeigt wird. Wenn ich dann 'weitere laden' anklicke, dauerts ne Weile und dann wird ergänzt. Werden dabei dann nicht alle Datensätze berücksichtigt?
Ja, dann werden alle Datensätze berücksichtigt.

Dann warten wir mal auf die Beispieldaten.
Antworten Top
#18
(02.09.2022, 09:48)DeltaX schrieb: Da ist im Datenmodell aber gewaltig etwas schief. Hört sich ja so an als würdest Du "pivotierte" Daten laden. Da muss vorher etwas anderes passieren, am besten auf dem Server, der die Daten zur Verfügung stellt.

Es handelt sich um Messungen eines Gerätes, das für jede Messung eine ASCII-Datei erzeugt und auf einem Netzlaufwerk abspeichert. In der stehen eine Menge Metadaten und dann die Messwerte - alles in einer Spalte untereinander weggeschrieben.
Die Messungen können mal nur 20 Werte umfassen, häufig um die 1000 - und maximal halt ~32000. Aber in der gelebten Realität wird niemand eine Messung über alle Werte laufen lassen, daher kann ich ohne groß schlechtes Gewissen mal davon ausgehen, dass maximal 5000 Werte vorhanden sein werden.

Diese Messdateien will ich nun en Bloc auswerten und dazu zusammenstellen. Das heißt, PQ lädt das Verzeichnis, reduziert auf die Messdateien und extrahiert die Daten in meine Tabelle. Da es bisher ~12000 Messungen gibt, schreibe ich die in eine Tabelle, jede Datei eine Zeile und die relevanten Metadaten sowie die Messwerte in die Spalten.

Weil es so viele Dateien sind und das Zerlegen ne Weile dauert, lese ich bei jedem Durchlauf (pro Arbeitstag kommen etliche neue Messungen dazu) die bereits extrahierten Daten aus der XL-Datei ein und vergleiche die aktuellen Verzeichnisinhalte mit den bereits bearbeiteten Dateien, um dann die Extraktion nur auf die neu hinzugekommenen Dateien anzuwenden. Und an der Stelle treten jetzt halt die von mir so nicht erwarteten Schwierigkeiten auf.

Soviel zum Konzept. Insgesamt ist das natürlich schon eine im Wesentlichen pivotierte Tabelle, aber wie ich bei den Datenmengen, die noch dazu in der Anzahl der Messwerte nicht vordefiniert sind, einen unpivotierten Ansatz sinnvoll gestalte, ist mir nicht klar - und ob das letztlich wirklich einen Vorteil bringt, auch nicht.

Gruß,
RaiSta
Antworten Top
#19
Zitat:Es handelt sich um Messungen eines Gerätes, das für jede Messung eine ASCII-Datei erzeugt


Wenn du bereits 12.000 Messungen mit 5.000 Zellen vorliegen hast, dann sind dies ja 60 Mio Werte. Da frage ich mich schon, ob da ein handelsüblicher PC besonders geeignet ist, diese Menge auszuwerten.

Ich würde tendenziell versuchen, die ausgelsenen Daten zu aggregieren, um die Aggreagation für die Auswertung zu verwenden. Dort wo notwendig, könnte dann immer noch, fallweise, eine Analyse der Einzeldaten erfolgen, sofern dies noch vorhanden sind.

Auf einem SAP-System (R/3 nich BW-Hana) hatte ich eine Umsatzdatenbank auf der Ebene Belegnummer und Position über einen Zeitraum von über 10 Jahren angesammmelt. Das waren am Ende rund 400 Mio Datensätze. Aber da jeder immer nur seine Kunden/Produkte/Gebiete/Länder/Produkthierarchien..., ausgewertet hat, gab es mit den Antrwortzeiten nur ganz selten Probleme. Aber die Hardware, auf der das lief, war halt auch ein klein wenig leistungsfähiger, als die eines PCs.
Antworten Top
#20
Raista schrieb:Diese Messdateien will ich nun en Bloc auswerten und dazu zusammenstellen. Das heißt, PQ lädt das Verzeichnis, reduziert auf die Messdateien und extrahiert die Daten in meine Tabelle. Da es bisher ~12000 Messungen gibt, schreibe ich die in eine Tabelle, jede Datei eine Zeile und die relevanten Metadaten sowie die Messwerte in die Spalten.
Das ist IMHO der falsche Ansatz.

Mein Ansatz wäre ganz grob, also noch verbesserungswürdig: Eine Tabelle tblMessungen mit den Spalten Geraet, Datum, Uhrzeit, Typ, Wert und da lese ich mit Hilfe eines Programms die Daten aus den Dateien rein. Verbesserung wäre dann eine weitere Tabelle mit den Metadaten, die per Fremdschlüssel in die Tabelle tblMessungen eingebunden wird. Das dürfte dann auch ein handelsüblicher PC schaffen.

Aber es gilt immer noch: Beispieldaten, also einige der Dateien (verfremdet natürlich), die Du einlesen willst

PS Ich würde allerdings Access verwenden

PPS Und wenn eine Datei genau einer Messung zu einem Zeitpunkt entspricht, würde ich eine weitere Tabelle anlegen, die nur eine ID für die Messung mit Datum/Uhrzeit enthält und die ID landet als Fremdschlüssel in tblMessungen
Antworten Top


Gehe zu:


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