Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1948to1952
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

Filtern nach KGRÖSSTE in PQ

Filtern nach KGRÖSSTE in PQ
06.10.2023 13:08:50
Christian
Hallo,

ich bitte euch um Rat, in meinem PQ Projekt weiterzukommen.

Ich habe 2 Abfragen, eine namens "ganze", welche die Spalte "f" enthält (f ist die Bezeichnung) und
eine namens Leute, welche die Spalte "Description" enthält.

Im ersten Schritt möchte ich den 30. größten Wert in Descreption ermitteln

und dann im zweiten Schritt die Spalte f

nach größer gleich diesem Wert filtern.

Wie mache ich das?

Danke
Christian

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Filtern nach KGRÖSSTE in PQ
06.10.2023 13:35:20
Yal
Hallo Christian,

das geht meines Erachtens nur mit einer benutzerdefinierten Funktion: auf dem übergegebene Parameter filtern, sortieren, die 29 erste Einträge wegwerfen und die Wert der erste Zeile behalten, was der Ergebnis der Funktion darstellt.

Ohne eine Gerüst-Beispieldatei kann man nur theoretisch beraten.

VG
Yal
Bsp Datei
06.10.2023 14:11:12
Christian
https://www.herber.de/bbs/user/163271.xlsx

Ich möchte die Abfrage im Blatt "ganze" nach >=29.09.1994 filtern, da der 29.9.94 das 30. größte Datum im Blatt Leute ist. Sollte es irgendwann mal der Fall sein, dass unter den 30 jüngsten Daten im Blatt Leute Daten mehrfach vorkommen, sollen diese auch mehrfach gezählt werden.

Gruß
Christian
Anzeige
AW: Filtern nach KGRÖSSTE in PQ
06.10.2023 15:01:02
Christian
hallo Yal, habe die Datei hochgeladen
AW: (D)eine Beispieldatei wäre zwar hilfreich(er) ...
06.10.2023 13:44:39
neopa C
Hallo Christian,

... denn nur so kann man wirklich nachvollziehen was Du hast. Und wenn Du für diese noch Deine Zielstellung konkretisierst, dann wird es für die potentiellen Helfer hier auch mit weniger Aufwand eher möglich, Dir zu helfen.

Aber soweit wie ich es jetzt verstanden habe bzw. Deine Angaben interpretiere, könnte man interaktiv wie folgt vorgehen:
Sortiere die Spalte nach "Description" abwärts, füge eine Indexspalte dazu und filter diese nach allen Werten 30, lösche die INDEXSpalte wieder und Du solltest das angestrebte erhalten.

Gruß Werner
.. , - ...
Anzeige
AW: (D)eine Beispieldatei wäre zwar hilfreich(er) ...
06.10.2023 13:49:29
Christian
Hallo Werner,

die Bsp. Datei folgt, aber da gab es auf jeden Fall schon ein Misverständnis, ich will die Spalte f filtern, nicht die Spalte Description.

Gruß
Christian
AW: jetzt verständlicher ...
07.10.2023 08:47:33
neopa C
Hallo Christian,

... jedoch ist die Quelle Deiner Abfrage "ganze" eine Tabelle, die in der eingestellten Datei nicht beinhaltet ist.

Zur (PQ-)Lösung Deiner Fragestellung habe ich deshalb nur Deine Datentabellen übernommen. Deine Abfrage "Leute" füge wie bereits geschrieben ein INDEX-Spalte hinzu. Diese filtere nach 30 und entferne die andere Spalte. Das Ergebnis habe ich als "Nur Verbindung" ausgegeben.

Die mit PQ gesuchte Anzahl von [f] hab ich dann z.B. wie folgt ermittelt:


let
Quelle = Excel.CurrentWorkbook(){[Name="ganze"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"f", type date}}),
#"Angefügte Abfrage" = Table.Combine({#"Geänderter Typ", Leute}),
#"Nach oben gefüllt" = Table.FillUp(#"Angefügte Abfrage",{"Description"}),
#"Gefilterte Zeilen1" = Table.SelectRows(#"Nach oben gefüllt", each ([f] > null)),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Gefilterte Zeilen1", "Pruef", each if [f]>=[Description] then 1 else 0),
#"Gefilterte Zeilen" = Table.SelectRows(#"Hinzugefügte benutzerdefinierte Spalte", each ([Pruef] > 0)),
#"Geänderter Typ1" = Table.TransformColumnTypes(#"Gefilterte Zeilen",{{"Pruef", Int64.Type}}),
#"Berechnete Summe" = List.Sum(#"Geänderter Typ1"[Pruef])
in
#"Berechnete Summe"


Und das Ergebnis in das Tabellenblatt ausgegeben.

Zum Vergleich Lösung ohne PQ mit Formel: =ZÄHLENWENN(ganze[f];">="&KGRÖSSTE(Leute[Description];30))

Gruß Werner
.. , - ...
Anzeige
AW: jetzt verständlicher ...
07.10.2023 12:15:11
Christian
Hallo Werner,

ja ich habe es jetzt anders gelöst, aufbauend auf Yals Vorschlag und Google.
Diese Lösung war möglich, da die Daten, die in den beiden Spalten vorkommen die selben sind, nur die Häufigkeit unterscheidet sich.

Ich habe eine PQ Abfrage gemacht mit den 30 aktuellsten Daten und diese in eine Liste umgeformt mit dem Namen Liste und der Überschrift f.

Und dann in ganze mit

= Table.SelectRows(#"Sortierte Zeilen", each List.ContainsAny(Liste, {[f]}))

gefiltert.

Gruß
Christian

AW: jetzt verständlicher ...
07.10.2023 20:44:32
Christian
Hallo Werner,
sorry war heute echt ein anstrengender Tag, kam erst jetzt dazu, auch deinen Vorschlag zu testen.

Aber es gab zwei Probleme, erstmal jetzt mein vollständiger Code, nachdem ich deinen in meinen eingebaut habe:

let

Quelle = Excel.CurrentWorkbook(){[Name="Tabelle7"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"c", type date}, {"i", type text}, {"f", type date}}),
#"Entfernte Spalten" = Table.RemoveColumns(#"Geänderter Typ",{"j", "l", "m", "n", "o", "p"}),
#"Sortierte Zeilen" = Table.Sort(#"Entfernte Spalten",{{"e", Order.Ascending}, {"b", Order.Ascending}}),
#"Angefügte Abfrage" = Table.Combine({#"Sortierte Zeilen", Leute}),
#"Nach oben gefüllt" = Table.FillUp(#"Angefügte Abfrage",{"Description"}),
#"Gefilterte Zeilen1" = Table.SelectRows(#"Nach oben gefüllt", each ([f] > null)),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Gefilterte Zeilen1", "Pruef", each if [f]>=[Description] then 1 else 0),
#"Gefilterte Zeilen" = Table.SelectRows(#"Hinzugefügte benutzerdefinierte Spalte", each ([Pruef] > 0)),
#"Geänderter Typ1" = Table.TransformColumnTypes(#"Gefilterte Zeilen",{{"Pruef", Int64.Type}}),
#"Berechnete Summe" = List.Sum(#"Geänderter Typ1"[Pruef]),
#"Hinzugefügte benutzerdefinierte Spalte2" = Table.AddColumn(#"Berechnete Summe", "Benutzerdefiniert", each if [c] = null then "MRS " & [b] & " - " & [e] & " (" & Text.From([f]) & ")" else "MRS " & Text.PadStart([i], 5, "0") & " " & [b] & " (" & Text.From([c]) & ") - " & [e] & " (" & Text.From([f]) & ") " & Text.From([g]) & "-" & Text.From([h])),
#"Umbenannte Spalten" = Table.RenameColumns(#"Hinzugefügte benutzerdefinierte Spalte2",{{"Benutzerdefiniert", "l"}}),
#"Ersetzter Wert" = Table.ReplaceValue(#"Umbenannte Spalten",":","",Replacer.ReplaceText,{"l"}),
#"Ersetzter Wert1" = Table.ReplaceValue(#"Ersetzter Wert","""","",Replacer.ReplaceText,{"l"}),
#"Ersetzter Wert2" = Table.ReplaceValue(#"Ersetzter Wert1","?","",Replacer.ReplaceText,{"l"}),
#"Ersetzter Wert3" = Table.ReplaceValue(#"Ersetzter Wert2","""","",Replacer.ReplaceText,{"l"}),
#"Ersetzter Wert4" = Table.ReplaceValue(#"Ersetzter Wert3","?","",Replacer.ReplaceText,{"l"})
in
#"Ersetzter Wert4"


Zum einen, steht in der Spalte Pruef nur eine 1, alles andere 0, somit wird auch nur diese eine Zeile gefiltert. Dies ist die Zeile mit dem jünsten Datum.

Zum anderen, sagte er jetzt bei der BS2 Der Wert 1 könne nicht in den Typ Table konvertiert werden. An dieser Stelle gab es mit de Code auf Yals Vorschlag aufbauend keine Probleme, ich muss also irgendwas falsch gemacht haben, als ich deinen Teil versucht habe, einzufügen:

let

Quelle = Excel.CurrentWorkbook(){[Name="Tabelle7"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"c", type date}, {"i", type text}, {"f", type date}}),
#"Entfernte Spalten" = Table.RemoveColumns(#"Geänderter Typ",{"j", "l", "m", "n", "o", "p"}),
#"Sortierte Zeilen" = Table.Sort(#"Entfernte Spalten",{{"e", Order.Ascending}, {"b", Order.Ascending}}),
#"Gefilterte Zeilen" = Table.SelectRows(#"Sortierte Zeilen", each List.ContainsAny(Liste, {[f]})),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Gefilterte Zeilen", "Benutzerdefiniert", each if [c] = null then "MRS " & [b] & " - " & [e] & " (" & Text.From([f]) & ")" else "MRS " & Text.PadStart([i], 5, "0") & " " & [b] & " (" & Text.From([c]) & ") - " & [e] & " (" & Text.From([f]) & ") " & Text.From([g]) & "-" & Text.From([h])),
#"Umbenannte Spalten" = Table.RenameColumns(#"Hinzugefügte benutzerdefinierte Spalte",{{"Benutzerdefiniert", "l"}}),
#"Ersetzter Wert" = Table.ReplaceValue(#"Umbenannte Spalten",":","",Replacer.ReplaceText,{"l"}),
#"Ersetzter Wert1" = Table.ReplaceValue(#"Ersetzter Wert","""","",Replacer.ReplaceText,{"l"}),
#"Ersetzter Wert2" = Table.ReplaceValue(#"Ersetzter Wert1","?","",Replacer.ReplaceText,{"l"}),
#"Ersetzter Wert3" = Table.ReplaceValue(#"Ersetzter Wert2","""","",Replacer.ReplaceText,{"l"}),
#"Ersetzter Wert4" = Table.ReplaceValue(#"Ersetzter Wert3","?","",Replacer.ReplaceText,{"l"})
in
#"Ersetzter Wert4"




Aber ich kann auch verstehen wenn du jetzt sagst, die Mühe brauchen wir uns nicht mehr machen, ich habe ja eine Lösung.

Schönen Abend noch
Christian
Anzeige
AW: sicherlich bedarf es weniger Mühe ...
08.10.2023 08:03:17
neopa C
Hallo Christian,

... wenn Du mal Deine Datei oder zumindest eine, die auch die Tabelle7 beinhaltet hier einstellst.. Die nicht relevanten Daten (aber nicht Spalten) kannst Du ja zuvor löschen.

Gruß Werner
.. , - ...
AW: sicherlich bedarf es weniger Mühe ...
08.10.2023 15:22:19
Christian
Hallo Werner,

das ist mir ein absolutes Rätsel, ich habe bei der Erstellung der Bsp Datei aus der PQ Abfrage "ganze" Zellen kopiert und aus den neuen Zellen eine neue Abfrage gemacht, also mich dabei nicht auf Tabelle7 bezogen. Mir ist es grad schleierhaft, wo trotzdem der Bezug dazu herkommen soll.

Tabelle 7 zu posten wird etwas schwierig. Hinter Tabelle7 steht ein Makro, dass wiederum andere Tabellen brauchen.

https://www.herber.de/bbs/user/163292.xlsm

gut, hier Tabelle7, aber komm nicht auf die Idee das Makro zu starten, es würde nur Meldungen bringen, dass andere Blätter fehlen, kannst es natürlich versuchen, aber ich habe dich drauf hingewiesen.

Gruß
Christian
Anzeige
AW: sicherlich bedarf es weniger Mühe ...
08.10.2023 18:08:57
Jan
Hallo

Mein Tipp:
Warum nutzt du Makros?
Nutze doch wie auch von dir vorgeschagen PQ.
Ich habe mir nich alle Formeln angeschaut, aber was ich auf die schnelle so gesehen habe sind diese mit PQ intern um zusetzen, insofern ist dein Makro überflüssig.
Was die Sortierung anbetrifft ist das das kleinste Übel.
AW: sicherlich bedarf es weniger Mühe ...
08.10.2023 19:23:15
Christian
Hallo Jan,

diese Diskussion hatten wir im Forum hier schonmal. Und sind damals zu dem Schluss gekommen dass da die Formel in Spalte K Probleme macht. Eine Rang Formel an sich nicht, aber die Tatsache, dass der Bereich sich mit jeder Zeile ändert.

Aber um deine Frage zu beantworten, das Makro ist ein Überbleibsel des inzwischen 10 Jahre alten Teils der Tabelle.
Die Auswertungen mit PQ sind relativ neu, vor 10 Jahren gabs noch kein PQ.

Aber danke für deinen Vorschlag
Christian
Anzeige
AW: Mein PQ-Vorschlag sieht etwas anders aus ...
08.10.2023 19:05:18
neopa C
Hallo Christian,

... es braucht keine weitere Tabelle, Deine vorhandene ist ausreichend.

Zunächst aber zu Deiner "Warnung" angemerkt: Wenn ich mir eine XLSM oder XLSB-Datei aus dem I-Net downlade, tue ich diese vor deren Aktivierung immer als XLSX-Datei abspeichern.

Mein Vorschlag Abfrage "Vergleichsdatum" (abgespeichert als "Nur Verbindung")
let

Quelle = Excel.CurrentWorkbook(){[Name="Tabelle7"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"a", type text}, {"b", type text}, {"c", type datetime}, {"d", type text}, {"e", type text}, {"f", type number}, {"g", Int64.Type}, {"h", Int64.Type}, {"i", Int64.Type}, {"j", type datetime}, {"k", Int64.Type}, {"l", type datetime}, {"m", type datetime}, {"n", Int64.Type}, {"o", Int64.Type}, {"p", Int64.Type}}),
#"Sortierte Zeilen" = Table.Sort(#"Geänderter Typ",{{"f", Order.Descending}}),
#"Entfernte Duplikate" = Table.Distinct(#"Sortierte Zeilen", {"e"}),
#"Hinzugefügter Index" = Table.AddIndexColumn(#"Entfernte Duplikate", "Index", 1, 1, Int64.Type),
#"Gefilterte Zeilen" = Table.SelectRows(#"Hinzugefügter Index", each ([Index] = 30)),
#"Entfernte Spalten" = Table.RemoveColumns(#"Gefilterte Zeilen",{"g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "Index", "a", "b", "c", "d", "e"}),
#"Umbenannte Spalten" = Table.RenameColumns(#"Entfernte Spalten",{{"f", "Vergl_Datum"}})
in
#"Umbenannte Spalten"


Dann die "Auswertung":
let

Quelle = Excel.CurrentWorkbook(){[Name="Tabelle7"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"a", type text}, {"b", type text}, {"c", type datetime}, {"d", type text}, {"e", type text}, {"f", Int64.Type}, {"g", Int64.Type}, {"h", Int64.Type}, {"i", Int64.Type}, {"j", type datetime}, {"k", Int64.Type}, {"l", type datetime}, {"m", type datetime}, {"n", Int64.Type}, {"o", Int64.Type}, {"p", Int64.Type}}),
#"Angefügte Abfrage" = Table.Combine({#"Geänderter Typ", Vergleichsdatum}),
#"Nach oben gefüllt" = Table.FillUp(#"Angefügte Abfrage",{"Vergl_Datum"}),
#"Gefilterte Zeilen" = Table.SelectRows(#"Nach oben gefüllt", each ([f] > null)),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Gefilterte Zeilen", "Pruef", each if [f] >= [Vergl_Datum] then 1 else 0),
#"Gefilterte Zeilen1" = Table.SelectRows(#"Hinzugefügte benutzerdefinierte Spalte", each ([Pruef] =1)),
#"Geänderter Typ1" = Table.TransformColumnTypes(#"Gefilterte Zeilen1",{{"Pruef", Int64.Type}}),
#"Berechnete Summe" = List.Sum(#"Geänderter Typ1"[Pruef])
in
#"Berechnete Summe"


In Deine gestern Abend eingestellten ersten Abfrage müßtest Du den Schritt: #"Berechnete Summe" = List.Sum(#"Geänderter Typ1"[Pruef]) ganz an den Schluß verschieben.

Gruß Werner
.. , - ...


Anzeige
AW: Mein PQ-Vorschlag sieht etwas anders aus ...
08.10.2023 19:44:55
Christian
Hallo Werner,

danke erstmal für die Mühe.

Ich weiß nicht, bei mir gibt wie dein Code ja schon sagt, dieser eine Summe (99) aus.
Welches der Anzahl der Zeilen entspricht, die ich hätte ausgeben wollen.
Meine Bitte war ja die Tabelle nach Daten ab dem bestimmten Datum (welches korrekt bestimmt wurde) gefiltert werden.

Abgesehen davon, ich wundere mich dass du keinen Bezug auf die Abfrage "Leute" nimmst, sondern das auf dem direkten Weg machst. Der Bezug auf Leute hatte einen gewissen Sinn.

In "Ganze" stehen viele Geburtsdaten mehrfach, weil viele Personen mehrfach in der Liste stehen.
In "Leute" steht jede Person nur einmal.

Wenn es jetzt irgendwann mal soweit kommt, dass mehrere Leute in der Liste stehen, die am selben Tag geboren sind, habe ich mit deiner Lösung das Problem, dass du mit Duplikate Entfernen in "Ganze" Personen komplett aus der Liste löschst, während das mit Bezug auf "Leute" nicht passiert, weil da jede Person nur einmal steht und Duplikate gar nicht mehr erst entfernt werden müssen.

Hoffe du verstehst was ich meine
Christian
Anzeige
AW: wenn nicht die Anzahl als Ergebniszahl gefragt ist ...
09.10.2023 08:31:31
neopa C
Hallo Christian,

... sondern die entsprechenden Datenzeilen, dann mußt Du doch lediglich den letzten Schritt "Berechnete Summe" in PQ weglassen/entfernen.
Damit hast Du Deine entsprechende Ergebnisliste. Deiner bisherigen Fragestellung entnahm ich, daß Dich die Anzahl (als Zahl) interessiert.

Da ich annehmen durfte, daß die Geburtstage in der Spalte "f" der Tabelle7 stehen, braucht man zur PQ-Lösung keine separaten Listen "Leute" und "ganze". Das von Dir vorgegebene Vergleichsdatum (30 jüngste) ermittele ich mit der Abfrage "Vergleichsdatum", wo nur jedes Datum ohne Datumsduplikate berücksichtigt wird. Momentan damit noch nicht berücksichtigt ist, daß es auch echte Zwillinge oder unterschiedliche Personen mit identischen Geburtsdatum geben könnte, die dann nicht als Duplikate betrachtet werden sollen. Wäre aber auch noch möglich einzubauen. Ist das noch notwendig?

Gruß Werner
.. , - ...


Anzeige
AW: Nachtrag ...
09.10.2023 09:00:21
neopa C
Hallo nochmal,

... eine Berücksichtigung von identischen Geburtsdaten für unterschiedliche Personen spielt jedoch nur dann eine Rolle, wenn nur die Namen und deren Geburtstage gelistet werden sollen, die jünger als ein Vergleichsdatum sind. In Deiner Sache dürfte dies wahrscheinlich durch die unterschiedlichen Daten in Spalte "b" wohl keine bzw. nur in Ausnahmen eine Rolle spielen. Nämlich nur dann, wenn "Zwillinge" im gleichen Stück mitgespielt haben. Oder?

Gruß Werner
.. , - ...
AW: Nachtrag ...
09.10.2023 09:57:39
Christian
Hallo Werner,

nein die Liste sollen alle Filme der 30 jüngsten Personen ausgeben, egal welcher Geburtstag und egal wie viele davon am selben tag Geburtstag haben
Ein Sonderfall, sollten die 30. und 31. Person am selben Tag Geburtstag haben dann soll keine Entscheidung zwischen diesen beiden fallen, sondern beide genommen werden.

Die Liste Leute eberücksichtigt das alles, jede Person steht genau einmal drin, unabhängig vom Geburtstag und wenn ich in ganze sage größer gleich dem 30. Geburtstag in der Liste, werden auch alle berücksichtgt auch wenn der 30. Geburtstag häufiger vorkommt.

Zu deiner anderen Frage, ich brauche die Liste "Leute" auch als Datenquelle für Tabelle7. Daher die Trennung.

Gruß
Christian
AW: genau das tut doch die PQ-Lösung ...
09.10.2023 19:11:46
neopa C
Hallo Christian,

... die ich hier zuletzt eingestellt hatte. Bei Dir nicht?
Ich hatte lediglich vergessen, das Spaltenformat für "f" wieder auf Datum zu ändern, wie ich eben feststellte. Aber das sollte doch kein Problem sein, oder?

Gruß Werner
.. , - ...
AW: genau das tut doch die PQ-Lösung ...
11.10.2023 12:47:04
Christian
Hallo Werner,

sorry ich liege seit gestern nacht mit hohem Fieber im Bett, kann noch ne Zeit lang dauern.

Gruß
Christian
AW: dann ...
12.10.2023 16:52:09
neopa C
Hallo Christian,

... wünsch ich Dir gute Genesung. Sollte es länger als 6 Tage (ab heute) dauern, dann müßtest Du einen neuen thread eröffnen, weil in diesem thread dann keine Beiträge mehr eingestellt werden können. In Deinem dann neuen thread schreib in den Betreff: "neopa C; Fortsetzung zu meinen alten thread ..."
und im Text verweise mit diesem Link: https://www.herber.de/forum/archiv/1948to1952/1948586_Filtern_nach_KGROeSSTE_in_PQ.html auf den hiesigen.

Gruß Werner
.. , - ...
AW: damit also gelöst owT
07.10.2023 17:16:42
neopa C
Gruß Werner
.. , - ...

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige