Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1888to1892
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zeileninhalte vergleichen & aggregieren

Zeileninhalte vergleichen & aggregieren
27.06.2022 18:45:35
Gustav
Guten Abend,
ich habe ein Tabellenblatt, welches in der 1. Spalte verschiedene Begriffe enthält. Diese Begriffe sind zum Teil mehrfach vorhanden. Jedem Begriff sind in spalte 2 und folgende Werte zugeordnet. Die Werte unterscheiden sich, auch wenn die Begriffe identisch sind.
Ich möchte jetzt, dass jeder Begriff lediglich einmal vorkommt, jedoch alle Werte, welche dem Begriff zugeordnet sind, weiterhin zuordnen.
Aktuell:
Alpha 1 3 5
Beta 1 2 3 4
Beta 2 4 5 6
Gamma 2 3 4
Ziel:
Alpha 1 3 5
Beta 1 2 3 4 5 6
Gamma 2 3 4
Wie würdet ihr dies lösen?
vielen Dank im Voraus!
Gustav

26
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: z.B. mit PowerQuery (PQ) ...
27.06.2022 19:39:18
neopa
Hallo Gustav,
... geht möglicherweise in/mit PQ auch noch etwas kürzer aber folgende Definition, sieh mal hier: https://www.herber.de/bbs/user/153795.xlsx
führt auf jeden Fall zu dem von Dir angestrebten. Nach Datenänderung "Alle Daten aktualisieren"-Icon betätigen.
Gruß Werner
.. , - ...
AW: Zeileninhalte vergleichen & aggregieren
27.06.2022 20:26:39
Yal
Hallo Gustav,
ich würde es mit Power Query lösen. PQ ist eine "no code/low code" Daten-Transformationswerkzeug, dass seit xl 2016 standard ist.
_ markiere den ganzen Datenbereich,
_ im Menü "Einfügen", "Tabelle" anklicken. Da deine Beispiel keine Spaltenüberschrift hat, "hat überschriften" leer lassen. Es fügt sich eine "Default"-Überschrift "Spalte1", "Spalte2", usw (sollte ein Überschrift vorhanden sein, lässt es sich leicht ableiten)
_ im Menü "Daten", "aus Tabelle" anklicken,
Du bist im Power Query Editor.
_ wähle die Spalte "Spalte1" in dem Du den Überschrift anklickst,
_ im Menü "Transformieren", "Spalten entpivotieren", "anderen Spalte entpivotieren"
_ jetzt sind alle deine "anderen Spalten" übereinander. Die neue Spalte heisst "Attribut"
_ markiere Spalten "Spalte1" und "Wert", Rechtsklick auf dem Überschrift und "Duplikate entfernen"
_ Spalte "Spalte1" markieren,
_ im Menü "Transformieren", "Gruppieren nach", als Vorgang "alle Zeilen" auswählen
_ im Menü "Spalte hinzufügen", "Benutzerdefinierte Spalte" ankicken, Formel [Anzahl][Wert] eingeben (das ist die Stelle, wo der "no code" zu "low code" wird ;-)
_ Spalte "Anzahl" entfernen,
_ Spalte "Benutzerdefiniert" auswählen, auf dem Schlaftfläche im Überschrift anklicken, "Werte extrahieren..." auswählen, Semikolon als Trennzeichen eingeben.
_ Spalte "Benutzerdefiniert" auswählen,
_ im Menü "Transformieren", "Spalte teilen", "nach Trennzeichen", "Semikolon" als Trenzeichen eingeben
_ im Menü "Start", "Schliessen & laden"
Fertig.
Das Ergebnis erscheint als neue Tabelle. Wenn etwas in der Quelle sich ändert, einfach auf das Ergebnistabelle rechtsklicken und "aktualisieren".
Arg! Werner war wieder schneller. Er hat nicht genau dieselbe Weg gewählt, aber sehr ähnlich. Daher kann die Beschreibung helfen, seine Lösung zu nachvollziehen. erst ab der benutzerdefinierten Spalte geht er einen anderen Weg, was dazuführt, dass er anschliessend "pivotieren" kann.
VG
Yal
Anzeige
AW: hierzu ...
28.06.2022 09:02:43
neopa
Hallo Yal,
... mit Deiner verbalen Beschreibung hast Du Dir viel Aufwand bereitet. Sehr lobenswert. Leider ist diese aber teils noch nicht eindeutig beschrieben.
So hier

im Menü "Transformieren", "Spalten entpivotieren", "anderen Spalte entpivotieren"
und hier

m Menü "Spalte hinzufügen", "Benutzerdefinierte Spalte" ankicken, Formel [Anzahl][Wert] eingeben (das ist die Stelle, wo der "no code" zu "low code" wird ;-)
Wenn Du zusätzlich Deine Datei noch einstellst, wird es sicherlich für Gustav besser nachvollziehbar.
Ich bin übrigens mit meinem Lösungsvorschlag noch gar nicht zufrieden. Dies weil eine angedachte Sortierung der Datenwerte (fehlt in meiner Datei noch) noch nicht so funktioniert, wie ich es gern hätte. Ich schau es mir aber am Nachmittag noch einmal an..
Gruß Werner
.. , - ...
Anzeige
AW: hierzu ...
28.06.2022 09:33:09
Yal
Hallo Werner,
vielen Dank für die Anerkennung. Du hast recht, manche meiner Formulierungen sind ein bischen trocken. Diese werden erst verständlich, wenn man es selber in der Hand nimmt, was das eigentliche Ziel ist.
Sei nicht so hart mit dir selbst. Deine Lösung ist gut und ich sehe auch kein Optimierungspotential. Die von Dir gesuchte Sortierung platzierst Du -mMn- am besten nach dem Duplikat entfernen. So werden die Ergebnis auf alle Fälle in einer logischen Reihenfolge angezeigt.
VG
Yal
AW: nein das funktioniert so eben noch nicht owT
28.06.2022 09:55:45
neopa
Gruß Werner
.. , - ...
AW: Ursache dessen nun lokalisiert ....
28.06.2022 18:44:21
neopa
Hallo Yal,
... diese begründet sich darin, dass eine Gruppierung stets auf die ursprüngliche Datenanordnung in der Quelle zurückgreift, egal ob nach dem Einlesen der Quelldaten diese Datenwerte vor dem Gruppieren sortiert werden oder nicht. Damit wird sich die interne Indexierung (die unmittelbar auf die Gruppierung erfolgt) natürlich auch für diese erstellt. Somit wird mit der Pivotierung die Datenlistung sich auch nach der ursprünglichen "sortierten" Listung richten.
Mit Kenntnis des Vorgenannten, sollte nun auch eine saubere horizontale Sortierung der Datenwert im Ergebnislisting realisiert werden können. Das sollte jetzt lösbar sein.
Gruß Werner
.. , - ...
Anzeige
AW: ... und dafür gibt es eine einfache Lösung ...
28.06.2022 19:14:49
neopa
Hallo,
... und zwar wirklich ganz einfach.
Lediglich nach den entpivotieren und der Entfernung der Duplikate der Datenwerte, die Daten wie gewünscht sortieren und vor dem Gruppieren den Namen der Gruppierungsspalte umbenennen (der alles entscheidende "Schritt") und dann weiter wie bisher. Ganz zum Abschluss der Abfrage kann dieser Spaltenname bei Bedarf natürlich wieder in den ursprünglichen zurück benannt werden.
Gruß Werner
.. , - ...
AW: gilt 1:1 so natürlich nur für Zahlenwerte ...
28.06.2022 19:36:44
neopa
Hallo Gustav,
... für Deine neuen Datenwerte (die ja nunmehr bei Dir echte Textwerte sind) müsste für eine korrekte Sortierung mehr als nur ein PQ-"Schritt" vorgenommen werden. Diese Textwerte müssten zunächst als Datentyp Text formatiert sein, danach am Trennzeichen "." in Spalten getrennt werden. Dann jede dieser Spalten (in der Reihenfolge von links nach rechts !) entsprechend sortiert und anschließend mit de Funktion "Spalten zusammenführen" (unter dem Menü: Spalte hinzufügen) wieder vereinigt und die Hilfsspalten wieder gelöscht werden.
Gruß Werner
.. , - ...
Anzeige
AW: ... und dafür gibt es eine einfache Lösung ...
29.06.2022 00:00:32
Luschi
Hallo Werner,
schon erstaunlich, daß die Sortierung vor der Gruppierung nix bring, wenn nicht auch noch die zu gruppierende Spalte vorher umbenennt wird. In E_2019 hat das dann so auch geklappt.
Hier mal noch 1 Variante, wo die Sortierung und Indizierung erst innerhalb der gruppierten Spalte passiert.
https://www.herber.de/bbs/user/153830.xlsx
Gruß von Luschi
aus klein-Paris
AW: ergibt zumindest in XL2016 unerklärliches ...
29.06.2022 08:19:04
neopa
Hallo Luschi,
... da in der von Dir eingestellten Datei die Quelldaten alle horizontal (vor)sortiert sind, hab ich zum testen in C4 mal z.B. eine 33 eingeschrieben und danach [alle aktualisieren] aktiviert. Wie stellt sich dann dafür bei Dir die Ergebnistabelle dar? Und wie das Ergebnis im PQ-Editor?
Im letzteren bei mir korrekt! Aber in der Ergebnistabelle in Excel gibt es eine leere Spalte "62". Das "unerklärliche" konnte ich noch weiter betreiben. Ich konnte sogar eine Spalte "63", "64" ... erzeugen. Hab zwar eine "Lösung" gefunden, wie das zu korrigieren ist aber keine Erklärung für die "62"...,
Den Spuk und deren "Lösung" konnte/kann ich in meiner XL-Version stets wieder reproduzieren. Ist das in Deiner XL-Version nachvollziehbar?
Gruß Werner
.. , - ...
Anzeige
AW: ergibt zumindest in XL2016 unerklärliches ...
29.06.2022 09:59:29
Gustav
Hi Werner,
mit dieser Vorlage klappt es wie im Traum. Vielen Dank für Eure Hilfe - tolles Forum mit tollen Leuten :)
AW: bitteschön, doch noch nachgefragt ...
29.06.2022 10:17:22
neopa
Hallo Gustav,
... kannst Du in Deiner XL-Version den von mir an Luschi geschilderten "Spuk" nachvollziehen, wenn Du in C4 z.B. mal eine große Zahl eingibst?
In seiner hier eingestellten Datei basiert die obere Ergebnisliste auf meiner PQ-Abfrage und die unteren der von Luschi modifizierten.
Da mich dazu auch Deine Aussage dazu interessiert (weil du XL2022 in Einsatz hast) hab ich den thread offen gestellt. Dies auch um damit evtl. ChriL darauf aufmerksam zu machen, der wahrscheinlich XL365 in Einsatz hat.
Gruß Werner
.. , - ...
Anzeige
AW: bitteschön, doch noch nachgefragt ...
29.06.2022 12:45:34
ChrisL
Hi Werner
Ja das Problem besteht auch in XL365. Wir hatten sowas ähnliches schon einmal:
https://www.herber.de/forum/archiv/1872to1876/1873551_Pivotieren_mit_PQ_ohne_Aggregation.html
Es hängt irgendwie mit der internen Speicherverwaltung von PQ zusammen und man kann das Problem mit Table.Buffer() lösen z.B. in folgender Zeile:
#"Sortierte Zeilen" = Table.Buffer(Table.Sort(#"Entfernte Duplikate",{{"Spalte1", Order.Ascending}, {"Wert", Order.Ascending}})),
Manche Bearbeitungsschritte führen scheinbar automatisch zum internen Buffern. Letztes mal hat die Typenkonvertierung gereicht, hier eine Umbenennung der Spalten.
cu
Chris

let
Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type text}, {"Spalte2", Int64.Type}, {"Spalte3", Int64.Type}, {"Spalte4", Int64.Type}, {"Spalte5", Int64.Type}}),
#"Entpivotierte andere Spalten" = Table.UnpivotOtherColumns(#"Geänderter Typ", {"Spalte1"}, "Attribut", "Wert"),
#"Entfernte Spalten" = Table.RemoveColumns(#"Entpivotierte andere Spalten",{"Attribut"}),
#"Entfernte Duplikate" = Table.Distinct(#"Entfernte Spalten", {"Spalte1", "Wert"}),
#"Sortierte Zeilen" = Table.Buffer(Table.Sort(#"Entfernte Duplikate",{{"Spalte1", Order.Ascending}, {"Wert", Order.Ascending}})),
#"Gruppierte Zeilen" = Table.Group(#"Sortierte Zeilen", {"Spalte1"}, {{"alle", each _, type table [Spalte1=nullable text, Wert=number]}}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Gruppierte Zeilen", "Index", each Table.AddIndexColumn([alle],"Index",1)),
#"Erweiterte Index" = Table.ExpandTableColumn(#"Hinzugefügte benutzerdefinierte Spalte", "Index", {"Wert", "Index"}, {"Wert", "Index.1"}),
#"Entfernte Spalten1" = Table.RemoveColumns(#"Erweiterte Index",{"alle"}),
#"Pivotierte Spalte" = Table.Pivot(Table.TransformColumnTypes(#"Entfernte Spalten1", {{"Index.1", type text}}, "de-DE"), List.Distinct(Table.TransformColumnTypes(#"Entfernte Spalten1", {{"Index.1", type text}}, "de-DE")[Index.1]), "Index.1", "Wert")
in
#"Pivotierte Spalte"

Anzeige
AW: so ein Gedächtnis wie Dein, wünsch ich mir ...
29.06.2022 13:11:47
neopa
Hallo Chris,
... hätte ich auch nur annähernd ein solches, wäre mir zumindest die mühselige Suche nach der hiesigen Ursache erspart geblieben.
Aber ein kleinen Vorteil hatte es auch. Ich wäre dann womöglich nicht auf meine Lösung mit der temp. Spaltenumbenennung gekommen.
Danke für Deine Erinnerung.
gerne...
29.06.2022 14:01:23
ChrisL
Kein Problem... ich wünschte mein Namensgedächtnis wäre auch so ausgeprägt :)
AW: Zeileninhalte vergleichen & aggregieren
28.06.2022 15:37:57
Gustav
Lieber Yal, Lieber Werner,
vielen Dank für Eure ausführlichen Nachrichten! Dies hilft wirklich sehr weiter!
Ein Detail habe ich vergessen zu erwähnen. Die Werte in den Zellen sind bei mir keine einfachen Zahlen, sondern durch Punkte getrennte "Hierachieebenen."
Mit der Anleitung ist es jetzt so, dass statt beispielsweise "13.1.3.4" in der jeweiligen Zelle "13134" ausgegeben wird.
Ist es möglich, dass diese Zahlen korrekt zurückgegeben werden?
viele Grüße
Gustav
Anzeige
AW: Zeileninhalte vergleichen & aggregieren
28.06.2022 16:03:21
Yal
Hallo Gustav,
in der Anleitung ab:
_ Spalte "Benutzerdefiniert" auswählen, auf dem Schlaftfläche im Überschrift anklicken, "Werte extrahieren..." auswählen, Semikolon als Trennzeichen eingeben.
Durch:
_ Spalte "Benutzerdefiniert" auswählen, auf dem Schlaftfläche im Überschrift anklicken, "Werte extrahieren..." auswählen, Punkt als Trennzeichen eingeben.
_ im Menü "Start", "Schliessen & laden"
ersetzen.
VG
Yal
AW: Zeileninhalte vergleichen & aggregieren
28.06.2022 16:58:34
Gustav
Lieber Yal,
das funktioniert noch nicht, was aber meiner schwammigen erklärung geschuldet ist.
Ich habe mal kurz in einem Beispiel dargestellt, was der aktuelle Stand & das Ziel ist.
Hast du eine Idee, was an der Anleitung noch verändert werden muss, um zu diesem Ergebnis zu kommen?
https://www.herber.de/bbs/user/153824.xlsx
Anzeige
AW: so nicht nachvollziehbar ...
28.06.2022 17:20:45
neopa
Hallo Gustav,
... Deine neu eingestellte Datei beinhaltet überhaupt keine formatierte Datentabelle und auch keine Abfrage.
Mit meiner minimal modifizierter PQ-Lösung erhältst Du das von Dir vorgegebene Ergebnis. Siehe: https://www.herber.de/bbs/user/153825.xlsx
Die (horizontale) Sortierreihenfolge stimmt allerdings lediglich in dieser kleinen Beispieldatei. Wenn eine derartige Sortierung grundsätzlich notwendig ist könnte die Lösung aufwendiger werden.
Gruß Werner
.. , - ...
AW: so nicht nachvollziehbar ...
29.06.2022 14:55:15
ChrisL
Hi
https://www.herber.de/bbs/user/153857.xlsx
Die Funktion sortiert die gegliederten Werte und liefert auch gleich noch den Index.
- Input Typ Liste mit den Gliederungswerten z.B. {"1.0", "1.1", "2.0", "2.0.1"}
- Duplikate werden durch die Funktion entfernt
- Output Typ Tabelle, Werte sortiert, zusätzlich eine Index-Spalte
Funktioniert bis zu 10 Gliederungsebenen. Die Lösung ist daher nicht 100 % dynamisch, aber 10 Ebenen sollten i.d.R. reichen.
cu
Chris
Hauptabfrage:

let
Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
#"Entpivotierte andere Spalten" = Table.UnpivotOtherColumns(Quelle, {"Spalte1"}, "Attribut", "Wert"),
#"Gruppierte Zeilen" = Table.Group(#"Entpivotierte andere Spalten", {"Spalte1"}, {{"TabelleGanz", each _, type table [Spalte1=text, Attribut=text, Wert=text]}}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Gruppierte Zeilen", "Werte", each fxSortieren([TabelleGanz][Wert])),
#"Erweiterte Werte" = Table.ExpandTableColumn(#"Hinzugefügte benutzerdefinierte Spalte", "Werte", {"Index", "WerteSortiert"}, {"Index", "WerteSortiert"}),
#"Entfernte Spalten" = Table.RemoveColumns(#"Erweiterte Werte",{"TabelleGanz"}),
#"Pivotierte Spalte" = Table.Pivot(Table.TransformColumnTypes(#"Entfernte Spalten", {{"Index", type text}}, "de-CH"), List.Distinct(Table.TransformColumnTypes(#"Entfernte Spalten", {{"Index", type text}}, "de-CH")[Index]), "Index", "WerteSortiert")
in
#"Pivotierte Spalte"
fxSortieren:

(WertListe as list) =>
let
Quelle = List.Distinct(WertListe),
#"In Tabelle konvertiert" = Table.FromList(Quelle, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Spalte nach Trennzeichen teilen" = Table.SplitColumn(#"In Tabelle konvertiert", "Column1", Splitter.SplitTextByDelimiter(".", QuoteStyle.None), {"Column1.1", "Column1.2", "Column1.3", "Column1.4", "Column1.5", "Column1.6", "Column1.7", "Column1.8", "Column1.9", "Column1.10"}),
#"Geänderter Typ" = Table.TransformColumnTypes(#"Spalte nach Trennzeichen teilen",{{"Column1.1", Int64.Type}, {"Column1.2", Int64.Type}, {"Column1.3", Int64.Type}, {"Column1.4", Int64.Type}, {"Column1.5", Int64.Type}, {"Column1.6", Int64.Type}, {"Column1.7", Int64.Type}, {"Column1.8", Int64.Type}, {"Column1.9", Int64.Type}, {"Column1.10", Int64.Type}}),
#"Sortierte Zeilen" = Table.Sort(#"Geänderter Typ",{{"Column1.1", Order.Ascending}, {"Column1.2", Order.Ascending}, {"Column1.3", Order.Ascending}, {"Column1.4", Order.Ascending}, {"Column1.5", Order.Ascending}, {"Column1.6", Order.Ascending}, {"Column1.7", Order.Ascending}, {"Column1.8", Order.Ascending}, {"Column1.9", Order.Ascending}, {"Column1.10", Order.Ascending}}),
#"Hinzugefügter Index" = Table.AddIndexColumn(#"Sortierte Zeilen", "Index", 1, 1, Int64.Type),
#"Geänderter Typ1" = Table.TransformColumnTypes(#"Hinzugefügter Index",{{"Column1.1", type text}, {"Column1.2", type text}, {"Column1.3", type text}, {"Column1.4", type text}, {"Column1.5", type text}, {"Column1.6", type text}, {"Column1.7", type text}, {"Column1.8", type text}, {"Column1.9", type text}, {"Column1.10", type text}}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Geänderter Typ1", "WerteSortiert", each Text.Combine({[Column1.1],[Column1.2],[Column1.3],[Column1.4],[Column1.5],[Column1.6],[Column1.7],[Column1.8],[Column1.9],[Column1.10]},".")),
#"Geänderter Typ2" = Table.TransformColumnTypes(#"Hinzugefügte benutzerdefinierte Spalte",{{"WerteSortiert", type text}}),
#"Entfernte Spalten" = Table.RemoveColumns(#"Geänderter Typ2",{"Column1.1", "Column1.2", "Column1.3", "Column1.4", "Column1.5", "Column1.6", "Column1.7", "Column1.8", "Column1.9", "Column1.10"})
in
#"Entfernte Spalten"

AW: nachgefragt ...
29.06.2022 17:08:28
neopa
Hallo Chris,
... wo wird denn der M-Code für die Funktion in Deiner Arbeitsmappe sichtbar/editierbar und wo/wie wird denn der von Dir im Beitrag aufgezeigte ausfgestellt und dann als Funktion definiert?
Gruß Werner
.. , - ...
AW: nachgefragt ...
29.06.2022 18:21:58
ChrisL
Hi Werner
Ich hoffe ich habe die richtige Mappe geladen, aber da müsste im PQ-Editor links die Funktion ersichtlich sein. Einmal markieren und dann im erweiterten Editor gucken, so wie bei einer normalen Abfragen auch.
Ich nehme an deine Nachfrage kommt daher, dass du erkannt hast, dass die Funktion fast (schon wieder "fast") mit Standardmitteln erzeugt wurde. Da hast du recht und es handelt sich um ein gutes Übungsbeispiel, um mal eine Funktion zu probieren.
Also, du beginnst mit einer neuen leeren Abfrage und schreibst in die Befehlszeile z.B.
={"1.0", "1.1", "2.0", "2.0.1"}
womit eine fiktive Liste erzeugt wird. Später ersetzen wir es durch den Input-Parameter aus der Funktion.
Jetzt die Standardschritte durchführen (Liste in Tabelle konvertieren, Text in Spalten, sortieren, Index hinzufügen, Typenkonvertierung...).
Danach bin ich in den erweiterten Editor und habe den Split prophylaktisch auf 10 Spalten erweitert.
Benutzerdefinierte Spalte hinzufügen mit Text.Combine()
Überflüssige Spalten löschen
Abschliessend die erste Zeile im M-Code ergänzen:

(WertListe as list) =>
und Quelle = Wertliste anpassen.
Die Klammer definiert den Input-Parameter und der "Pfeil" impliziert einen Funktionsrückgabewert. PQ erkennt daran automatisch, dass es sich um eine Funktion handelt.
Und jetzt braucht es nur noch die benutzerdefinierte Spalte mit dem Input-Wert in der Hauptabfrage:

=fxSortieren([TabelleGanz][Wert])
Duplikate entfernen habe ich erst nachträglich in die Funktion ausgelagert, weshalb ich kurzerhand List.Distinct() um die Quelle "gewickelt" habe. Hätte man eigentlich auch noch mittels Standardmitteln in der oben beschriebenen Abfolge integrieren können.
Und ein Tipp zum Debuggen. Auch bei mir ergeben Funktionen öfters mal Fehler zurück (z.B. hatte ich vor Text.Combine die Typenkonvertierung vergessen). Wenn gar nichts mehr hilft, dann integriere ich die Codes zeilenweise. Also mal ganz simpel beginnen z.B.

(WertListe as list) =>
let
Quelle = WertListe
in
Quelle
Bedeutet, Input-Wert = Output-Wert. Die Funktion in die Hauptabfrage als benutzerdefinierte Spalte einfügen und das Resultat überprüfen.
Dann eine weitere Zeile hinzufügen:

(WertListe as list) =>
let
Quelle = List.Distinct(WertListe),
#"In Tabelle konvertiert" = Table.FromList(Quelle, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
in
#"In Tabelle konvertiert"
usw.
Kann man natürlich auch umgekehrt machen und Zeilen auskommentieren. In PQ mittels "//".
Einen Einzelschrittmodus wie in VBA und andere Debug-Hilfen habe ich PQ leider noch nicht entdeckt, weshalb die Angelegenheit etwas mühsam ist.
Beachte übrigens die Komma-Setzung im "let" Teil. Jede Einzelzeile schliesst mit Komma ab, aber nicht die letzte Zeile. Einer meiner häufigsten Flüchtigkeitsfehler, aber die Fehlermeldung weiss man mit der Zeit zu interpretieren.
cu
Chris
AW: vielen Dank ...
29.06.2022 19:21:20
neopa
Hallo Chris,
... auch wenn mir jetzt erst einmal der Schädel brummt, so hab ich jetzt zumindest einen ersten Ausblick in die Möglichkeiten der Erstellung und Nutzung einer benutzerdefinierten Funktion erhalten. Das muss ich nun erst einmal etwas sacken lassen.
Vielen Dank Dir für Deine recht ausführliche Beschreibung und noch einen schönen Abend.
Gruß Werner
.. , - ...
AW: nachgefragt ...
29.06.2022 20:35:58
Luschi
Hallo ChrisL,
in Deinem Beispiel mir '4-Augen-Prinzip' und 'Abfahrtskontrolle' funktioniert die definierte Funktion wunderbar, da die in der Tabelle enthaltenen Werte automatisch als Text erkannt werden. Im Beispiel von Werner für Gustav stehen aber Zahlenwerte. Hier ist es entscheidend, daß nach dem Einlesen der Daten alle Spalten sofort als 'Text' deklariert werten, ansonsten funktioniert die definierte Funktion nicht:
- obwohl [TabelleGanz][Wert] als Einzelschritt eine Liste mit Textwerten ergibt
- wird dieser Übergabewert in der Funktion in eine Zahlenliste umgewandelt
- und dann geht nix mehr
- nur dadurch, daß die Datenspalten zu Beginn in Textspalten transformiert werden
- funktioniert auch Deine definierte Funktion
- genau das selbe Problem hatten ich schon mal in einem Beispiel, wo die Spalten-
  überschriften  numerisch waren, da mußten diese auch erst mal umbenannt werden, damit
  es klappt
- sicher hat man da in E_365 etwas getan, was in den darunterliegenden E_Versionen nicht
  aktualisiert wurde
https://www.herber.de/bbs/user/153866.xlsx
Gruß von Luschi
aus klein-Paris

AW: ist anders ...
30.06.2022 09:18:38
neopa
Hallo Luschi,
... zunächst gehe ich davon aus, dass Chris seine Funktionsdefinition und Abfrage wirklich nur für zu aggregierende Textwerte definiert hat. Er hat ja seinen Beitrag ja auch in den entsprechenden Ast des thread eingestellt.
Wenn es wie ursprünglich vorgesehen um Zahlenwerte handelt, ist unsere Abfrage evtl. die geeignetere. Wobei ich zwischenzeitlich bereits in meiner den 2. Schritt ("Geänderter Typ)" welcher in Deiner Datei noch enthalten ist, bereits bewusst eliminiert hatte. In einer Arbeitsmappe mit nur dieser Abfrage kann ich nämlich so auch an die Datenquelle weitere Datenspalten anfügen, deren Werte dann automatisch mit berücksichtigt werden.
Gleiches trifft übrigens für Deine Abfrage zu. D.h. wenn auch hierfür die beiden anderen Abfragen und deren Ergebnistabellen entfernt werden, funktioniert diese auch korrekt und es kommt nicht zu den bereits beschriebenen Effekt, dass zusätzliche Leerspalten in der Ergebnistabelle erzeugt werden. Dieser tritt in Deiner Datei mit allen Abfragen nämlich wieder auf, wenn in B4 z.B.eine 11 eingeschrieben wird.
Fazit: Verschiedene Abfragen auf die gleiche Quelldatei können sich gegenseitig ungewollt beeinflussen (also zumindest in meiner XL2016er Version) Evtl. ist das möglicherweise ein vergleichbarer Effekt wie wie ihn für die Gruppierungsfunktion innerhalb einer Abfrage festgestellt haben, hier eben dann sogar Abfrage übergreifend.
Frage: Kann das für Deine XL-Version und neuere so auch festgestellt werden?
Gruß Werner
.. , - ...
AW: nachgefragt ...
30.06.2022 11:32:44
ChrisL
Hi Luschi
Danke für deinen Hinweis. Du hast recht, bei Zahlenwerten muss zuvor eine Typenkonvertierung erfolgen. Dies ist auch in XL365 so. Habe ich übersehen.
cu
Chris

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige