0

Ansichtstabelle mit Mehrfachauswahl filtern lassen

Hallo liebes Forum,

hier mal wieder was zum Filtern:

Von TABELLE A ist eine Ansicht in einer anderen TABELLE B erstellt worden.

In TABELLE A sind Kontakte verschiedenen Kriterien zugeordnet: Typ (Auswahlfeld), Genre (Mehrfachauswahlfeld), Bevorzugt (Auswahlfeld) etc.

In TABELLE B möchte ich nun mit identischen Auswahl / Mehrfachauswahlfeldern wie folgt die Ansicht von TABELLE A filtern lassen:

myfilterTyp (wenn zutreffend) = funktioniert bereits

myfilterGenre (wenn mindestens eines zutreffend) 

myfilterINVERSGenre (Datensatz ausschließen wenn Kriterium in TABELLE A "Genre" enthalten)

myfilterBevorzugt (nur filtern wenn Wert gesetzt, wenn null, alle anzeigen)

 

Bin mal gespannt ob ichs gut genug erklärt habe...

16 Antworten

null
    • Reinhard
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Wäre toll wenn jemand den Befehl für "wenn mindestens ein (oder merhere) Kriterium zutreffend" für ein Mehrfachauswahlfeld weiß. Das würde schon viel helfen.

    • Team Lead Customer Service
    • joerg
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Reinhard, 

    es gibt verschiedene Funktionen mit denen Mehrfachauswahlfelder geprüft werden können, z. B.:

     

    if contains(concat(numbers(meinFeld)), "2") then
    "vorhanden"
    end

     

    Damit kannst du prüfen, ob die Auswahl mit dem Index 2 ausgewählt wurde.

    Dieses If - Statement kann nun noch mit oder (or) erweiteret werden:

     

    if contains(concat(numbers(meinFeld)), "2") or contains(concat(numbers(meinFeld)), "4") then
    "vorhanden"
    end

    Gruß, Jörg

    • Reinhard
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hi Jörg, danke für den Hinweis.

     

    Aktuell sieht meine Formel in der Ansichtstabelle so aus:

     

    let myFilterTyp := 'Filter Typ';
    let myFilterGenre := 'Filter Genre';
    select Tabelle A where Typ = myFilterTyp and ...

     

    Genre ist ein Mehrfachauswahlfeld, welches ich zusätzlich als filterbare Option anlegen möchte. Nun soll der Typ geprüft werden, wenn dieser passt kann ich nach dem Genre filtern und sobald nur eines zutrifft alle entsprechenden Zeilen anzeigen. Die Genres sollten dabei als Text oder Zahl funktionierten, entsprechend dem eingestelltem Wert bei myfilterGenre

    let myFilterTyp := 'Filter Typ';
    let myFilterGenre := 'Filter Genre';
    select Tabelle A where Typ = myFilterTyp and if contains(concat(text(Genre) = "myFilterGenre"))??

    • Reinhard
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Beispiel:

    In Tabelle A ist ein Eintrag via Mehrfachauswahl mehreren Genres zugeordnet: Rock, Pop, Hip Hop etc.

    In Tabelle B möchte ich nun die Ansicht von Tabelle A via einem korrespondierenden Mehrfachauswahl-Feld filtern, sobald mindestens ein Genre übereinstimmt / beim Eintrag in Tabelle A enthalten ist 

    • Team Lead Customer Service
    • joerg
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Reinhard, 

    das Ganze klingt nach einer sehr interessanten Anwendung. Ich denke das Beste wäre, du meldest dich einmal direkt bei uns (support@ninoxdb.de) oder vereinbarst über unsere Internetseite im "Hilfe Center" einen Termin mit uns. Dann können wir uns das ggf. einmal gemeinsam anschauen und dich bei der Lösung deines Anliegens direkt unterstützen. Vielen Dank.

     

    Es wäre außerdem auch eine gute Frage für unser Webinar und eine gute Idee, dein Anliegen dort einmal zur Sprache zu bringen. Sicherlich hat der eine oder die andere Ideen und Anregungen dazu.

    Für das Webinar, das wöchentlich mittwochs um 16 Uhr stattfindet, kannst du dich über den folgenden Link anmelden: 

    https://zoom.us/webinar/register/WN_Asq34-biQxGS93h03BmyfQ 

     

    Gruß, Jörg

    • Ninox-Professional
    • planoxpro
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Reinhard, versuch es doch mal so:

     

    let myFilterTyp := text('Filter Typ');
    let myFilterGenre := text('Filter Genre');
    select Tabelle A where text(Typ) = myFilterTyp and contains(concat(text(Genre) = myFilterGenre))

    • Reinhard
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hi Copytexter, hier kommt dann eine Fehlermeldung:

     

    contains(string) in Zeile 3, Spalte 94 ist nicht definiert

    • Ninox-Professional
    • planoxpro
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Klar. Das war ja auch Copy-and-Paste-Quark ... ;)  Neuer Versuch:

     

    let myFilterTyp := text('Filter Typ');
    let myFilterGenre := text('Filter Genre');
    select Tabelle A where text(Typ) = myFilterTyp and contains(concat(text(Genre)), myFilterGenre)

    • Reinhard
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Yeah ;) so klappt es schonmal immer für einen Begriff. Besten Dank!

     

    Wenn ich im Mehrfachfilter-Feld nun aber mehrere Genres als zulässige Kriterien festlegen möchte wird die Tabelle leer.

    Gibt's dafür auch noch eine Lösung? Mehrere Filterbegriffe, die zulässig sein sollen? Andernfalls würde ich die einfachen Auswahlfelder bevorzugen und einfach 3 Genres maximal bereitstellen.

    • Ninox-Professional
    • planoxpro
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Also, die einzige Möglichkeit, die mir dazu einfällt, ist, die Anzahl der maximalen Genre-Filter-Optionen vorab zu definieren, in diesem Beispiel würden maximal drei ausgewertet:

    let myFilterTyp := text(Typ);
    let myGenres := chosen(Genre);
    switch cnt(myGenres) do
    case 1:
            let myGenre0 := item(myGenres, 0);

            select 'Tabelle A' where text(Typ) = myFilterTyp and contains(concat(text(Genre)), myGenre0)
    case 2:

            let myGenre0 := item(myGenres, 0);

            let myGenre1 := item(myGenres, 1);
            select 'Tabelle A' where text(Typ) = myFilterTyp and (contains(concat(text(Genre)), myGenre0) or contains(concat(text(Genre)), myGenre1))
    case 3:

            let myGenre0 := item(myGenres, 0);

            let myGenre1 := item(myGenres, 1);
            let myGenre2 := item(myGenres, 2);
            select 'Tabelle A' where text(Typ) = myFilterTyp and (contains(concat(text(Genre)), myGenre0) or contains(concat(text(Genre)), myGenre1) or contains(concat(text(Genre)), myGenre2))
    end

     

    Ist zugegebenrmaßen nicht sehr elegant, vielleicht hat jemand noch eine bessere Lösung.

    • Mirko
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Ich habe dies mal für mich mit einem Array und der Datensatznummer gelöst.

    let myFilter := chosen(Genre);
    let myFilterAnz := cnt(myFilter);
    let DSArray := "";

    for ii in range(0, myFilterAnz) do
    DSArray := DSArray + (select Musik where contains(concat(Genres), item(myFilter, ii))).Nr
    end;
    if Filtern then
    select Musik where contains(text(DSArray), text(Nr))
    else
    select Musik
    end

    • Ninox-Professional
    • planoxpro
    • vor 5 Jahren
    • Gemeldet - anzeigen

    👍 Wenn sie funktioniert (wovon ich mal ausgehe), dann ist die Lösung natürlich viel besser als meine zusammengestümperte.

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Ich sehe da ein Problem bei contains. DSArray wird irgendwan ein String ohne Leerzeichen ala 123469121314. D.h. wenn 

    DSArray Datensätze 10,11,12,13 beinhaltet, werden in select Musik auch Datensätze 1,2,3 mitaugenommen.

    Leo

    • Mirko
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Ja, Leo, genau das ist das Problem.

    Meine „Lösung“ ist, in der zu filternden Tabelle ein zusätzliches Berechnungs-Feld anlegen. In meinem Fall "myID" mit der Formel "ID_" + Nr + "_ID" (ergibt z.B. "ID_12_ID) und dann im Code nicht auf Nr. suchen sondern auf das neue myID-Feld.

    • john_eans
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Und gibt es eine Möglichkeit die ID des Mehrfachauswahlfeldes anzusprechen?

    concat(number(Mehrfachauswahlfeld))

    bleibt leider leer...

     

    VG

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    numbers(MEHRFACHAUSWAHLFELD) für Nummern oder chosen(MEHRFACHAUSWAHLFELD) für Texte.