Beyond Basic Filters: Datums Multi-Select Filter
Dies ist der zweite Artikel in der Serie „Beyond Basic Filters“, in der wir verschiedene Aspekte von Filtern untersuchen, die integrale Bestandteile der von uns entwickelten Anwendungen sind. Dieser Artikel befasst sich mit Datumsfiltern und baut auf Ideen aus früheren Beiträgen der Serie auf, die du dir auf jeden Fall ansehen solltest!
Warum ein Multi-Select-Filter für Datumsangaben?
Bevor wir direkt in die Umsetzung von Multi-Select-Filtern einsteigen, sollten wir uns zunächst anschauen, warum es vorteilhaft sein kann, Multi-Select-Filter für Datumsangaben zu verwenden. Die einfachste Lösung für einen Datumsfilter ist ein Bereichsfilter, bei dem die Nutzer ein Start- und/oder Enddatum auswählen können, um Einträge innerhalb dieses Bereichs anzuzeigen. Wenn die Anzeige bestimmter Datumsbereiche alle Anforderungen der Nutzer erfüllt, ist ein Bereichsfilter ohne Zweifel die beste Wahl.
Inspiration können wir uns von Microsoft Excel holen, das trotz seiner Macken gut etabliert und für unterschiedliche Anforderungen konzipiert ist. Excel bietet zwar komplexe Spaltenfilter mit „Vorher“-, „Nachher“- und „Zwischen“-Beschränkungen, zeigt aber auch eine Liste der verfügbaren Werte in jeder Spalte an. Interessanterweise werden Datumsangaben automatisch nach Jahr und Monat gruppiert (selbst in Spalten mit gemischtem Typ). Dieser Ansatz bietet zwei wesentliche Vorteile:
- Die Nutzer können den Bereich der verfügbaren Daten leicht erkennen - insbesondere, welche Jahre Daten im Datensatz enthalten.
- Die Nutzer können schnell bestimmte Einträge auswählen oder abwählen, um sich auf bestimmte Jahre, Monate oder Tage zu konzentrieren oder diese auszuschließen, ohne komplexe Filterregeln erstellen zu müssen.
Diese Vorteile erstrecken sich nicht nur auf Datumsangaben, sondern auf alle Datentypen, so dass es sich lohnt, Multi-Select-Filter für Datumsangaben im Detail zu untersuchen.
Zeitliche Auflösung bei Gruppierung
Bei der Implementierung eines Multi-Select-Filters für Datumsangaben ist die zeitliche Auflösung der Gruppierung ein entscheidender Aspekt. Ähnlich wie bei der Jahres- und Monatsgruppierung in Excel müssen wir die geeignete Detailebene für die Darstellung der Datumsoptionen für die Nutzer festlegen.
Die Wahl der zeitlichen Auflösung wirkt sich erheblich auf die Benutzerfreundlichkeit unserer Filter aus. Eine zu feine Gruppierung von Daten kann die Nutzer mit zu vielen Auswahlmöglichkeiten überfordern, während eine zu grobe Gruppierung dem Nutzer ggf. wenig Mehrwert bietet. Je nach Anwendungsfall und Verteilung der Daten können Daten nach Jahr, Jahr-Monat oder Jahr-Quartal gruppiert werden.
Füllen von Lücken bei der Erzeugung von Filterwerten
User unserer Anwendung stießen auf ein Problem mit Datumsfiltern. Beim Konfigurieren von Spaltenfiltern in unseren Grid-Komponenten wollten die Nutzer Daten aus bestimmten Jahren anzeigen. Unsere Datums-Multi-Select-Filter zeigten monatsbasierte Werte gruppiert nach Jahr an, so dass die Nutzer alle Daten abwählen und das gewünschte Jahr auswählen konnten. Da die User diese konfigurierten Ansichten speichern und wieder laden können, mussten wir überlegen, wie wir die Filterwerte beibehalten können. Wie im vorigen Artikel beschrieben, speichern Multi-Select-Filter die ausgewählten Elemente als Liste oder Set-Datenstruktur. Wenn jedoch eine Jahresgruppe ausgewählt wird, in der nur bestimmte Monate vorhanden sind, werden nur diese vorhandenen Monatseinträge im Filterstatus gespeichert. Das bedeutet, dass, wenn neue Daten für dieses Jahr hinzugefügt werden, die neuen Monate nicht angezeigt werden, da sie nicht explizit ausgewählt wurden.
Ein regelbasierter Filter könnte dieses Problem lösen, indem er die Absicht des Nutzers direkt speichert (z. B. „nur Daten für das Jahr 2025 anzeigen“). Wir haben nach Möglichkeiten gesucht, unseren Multi-Select-Filter zu erweitern, um eine zuverlässigere jahresbasierte Filterung zu ermöglichen. Unsere Lösung bestand darin, Filterwerte zu generieren, die alle 12 Monate für ein Jahr anzeigen und speichern, wenn Daten für dieses Jahr vorhanden sind.
Dieser Kompromiss bedeutet, dass die Nutzer anhand der Werte des Multi-Select-Filter nicht mehr erkennen können, welche Monate Daten enthalten. Sie können jedoch immer noch die angezeigten Jahre verwenden, um den Datenbereich abzuschätzen, wobei sie nur die monatliche Auflösung opfern. Das Wichtigste ist, dass die User nun zuverlässig Daten für ein ganzes Jahr einbeziehen können, ohne befürchten zu müssen, dass ein erweiterter Datensatz ihren persistierten Filter zerstört.
Interaktion mit Ausschlussfiltern
Das Konzept der Exclusion-Filter, das in unserem früheren Artikel besprochen wurde, funktioniert für alle Multi-Select-Filter, unabhängig von Datentyp oder Gruppierung. Ursprünglich hatten wir die Befürchtung, dass Ausschlussfilter mit dem automatischen Auffüllen von Lücken in Konflikt geraten könnten (bei der wir dem Filter Monate hinzufügen, auch wenn für diese Monate keine tatsächlichen Daten vorhanden sind). Nach einer Analyse haben wir jedoch festgestellt, dass diese beiden Konzepte völlig unabhängig voneinander funktionieren.
Ein Beispiel dazu: Bei Verwendung eines Ausschlussfilters, um alle Daten mit Ausnahme eines bestimmten Jahres anzuzeigen, schließt der Filter korrekt alle Monate dieses Jahres aus, einschließlich derjenigen, die wir durch das Auffüllen hinzugefügt haben. Wenn alternativ nur bestimmte Monate ausgeschlossen werden, entfernt der Filter korrekt alle Daten aus Monaten mit bestehenden Daten. Für “aufgefüllt” Monate, für die keine Daten vorhanden sind, muss auch nicht gefiltert werden.
Warum nicht die Gruppenauswahl in einem Multi-Select-Filter speichern?
Es stellt sich eine natürliche Frage: Warum nicht einfach ausgewählte Gruppen (z.B. Jahre) im Filterstatus speichern, anstatt einzelne Monatseinträge? Dieser Ansatz erscheint zwar intuitiver, würde aber unsere Filterimplementierung erheblich verkomplizieren. Der Filter müsste zwei getrennte Auswahlmechanismen verwalten - einen für Gruppen und einen für einzelne Einträge - und komplexe Interaktionen zwischen ihnen handhaben. Wir könnten diesen komplexeren Filterzustand zwar implementieren, aber unser derzeitiger Ansatz - die Erweiterung der Daten auf alle Monate innerhalb eines Jahres - erzielt das gleiche Ergebnis mit einer einfacheren, konsistenteren Implementierung. Die Gruppierung dient in erster Linie als visuelle Funktion in der Benutzeroberfläche des Filters, die als Abkürzung für die Auswahl oder Aufhebung der Auswahl aller Elemente innerhalb einer Gruppe dient.
Abschließende Gedanken
Multi-Select-Filter für Datumsangaben bieten eine leistungsstarke und intuitive Möglichkeit für Nutzer, mit datumsbasierten Daten zu interagieren. Sie stellen zwar eine besondere Herausforderung dar (insbesondere im Hinblick auf die Auflösung von Gruppen und die Datenpersistenz), aber diese konnten durch sorgfältige Designentscheidungen effektiv gelöst werden.
Unsere Lösung, die Datumseinträge so zu erweitern, dass sie alle Monate innerhalb der Jahre, die Daten enthalten, einschließen, schafft ein Gleichgewicht zwischen Benutzerfreundlichkeit und Implementierungskomplexität. Dieser Ansatz behält die Einfachheit von Multi-Select-Filtern bei und bietet gleichzeitig zuverlässige jahresbasierte Filterfunktionen, auf deren konsistente Funktionsweise sich der Nutzer auch bei wachsenden Datenbeständen verlassen kann.
Bei der Implementierung von Datumsfiltern in Anwendungen sollte abgewogen werden, ob User eine präzise Auswahl des Datumsbereichs benötigen oder von der Flexibilität und Auffindbarkeit profitieren, die Multi-Select-Filter bieten.