0

Datensätze finden für die KEIN Unterdatensatz angelegt wurde

Ich habe folgendes Setting:

Eine Kundendatenbank. Darin gibt es eine Unterdatenbank in der zu jedem Kunden nach Monat und Jahr weitere Datensätze angelegt werden können.

 

Nun möchte ich in einem Dashboard einen Monat und ein Jahr auswählen und dann in einer Ansicht sichtbar machen für welche Kunden für den gewählten Monat und das gewählte Jahr noch KEIN Eintrag in der Untertabelle existiert. Ich habe es natürlich hinbekommen alle Kunden aufzulisten für die ein solcher Eintrag existiert. Ich schaffe es aber nicht alle Kunden ohne einen solchen Eintrag aufzulisten.

Kann mir jemand helfen?

Vielen Dank! 

8 Antworten

null
    • mirko3
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Daniel, wenn Du im Dashboard zwei Auswahlfelder anlegst je für Monat und Jahr, dann kannst Du es mal mit diesem Script versuchen. Klar, daß Du die Tabellennamen noch anpassen mußt. Gruß Mirko

    *
    let mm:=text(Monat);
    let yy:=text(Jahr);
    (select KUNDENTABELLE)[not( month(last(UNTERTABELLE.Datum)) = mm and year(last(UNTERTABELLE.Datum)) = yy)]

    *

    • Daniel.4
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hi MZ,

    vielen Dank für deinen Input. Ich habe mal damit rumgespielt, habe aber noch ein Problem.

    Ich habe den Code etwas geändert, da ich nicht mit Datumsfeldern in der Untertabelle arbeite, sondern mit einem Auswahlfeld für den Monat sowie einem Zahlenfeld für das Jahr. 

    Mein Code sieht jetzt ungefähr so aus:

    let yy := Auswahljahr;

    let mm := Auswahlmonat;

    (select 'Kundentabelle')[not (last(Untertabelle.Jahr) = yy and last(Untertabelle.Monat) = mm)]

     

    Das funktioniert auch teilweise. Problematisch ist, dass immer nur der letzte Eintrag in der Untertabelle abgeprüft wird. Gibt es in der Untertabelle für einen Kunden einen Eintrag für Oktober 2022 und für september 2022 wird bei einer Suche nach 'September' und '2022' der Kunde angezeigt obwohl ein Eintrag für den Monat und das Jahr vorhanden ist. Es sollen aber nur die Kunden angezeigt werden für die kein Eintrag vorhanden ist.

    Ich hoffe ich erkläre das nicht zu kompliziert...

    • mirko3
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Mein Fehler. Geht so nicht mit not.

    Last deshalb, weil die Suche ein Array ergibt und du es durch last() in einen einzelnen Record wandelst. Da Du ja fehlende Records suchst, ist der erste oder der letzte ein Treffer. Kannst genausogut also first() verwenden. Versuche bitte:

    let yy := Auswahljahr;

    let mm := Auswahlmonat;

    (select 'Kundentabelle')[ last(Untertabelle.Jahr) != yy and last(Untertabelle.Monat) != mm)]

    • Daniel.4
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Nimmt last() nicht einfach den letzten Datensatz aus dem Array und wirft die restlichen weg?

    Mit first() bekomme ich gar keine Treffer und mit last() geht es nur wenn die Bedingung auf den letzten Datensatz des der Untertabelle zustrifft. So finde ich halt nicht die Lücken die z.B. in der Mitte der Untertabelle liegen...

    • Torsten_Stang.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    hm, werden so nicht alle Einträge angezeigt, deren letzter(!) Untertabelleneintrag nicht den Kriterien entspricht??

     

    wie wäre es damit??

     

    (select 'Kundentabelle') [not contains(join(for i in Untertabelle do i.Jahr+"-"+i.Monat end,";"),yy+"-"+mm)]

    • Daniel.4
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hi Thorsten,

    vielen Dank. Dass scheint tatsächlich zu funktionieren. Eine sehr kreative Lösung, auf die ich alleine nicht gekommen wäre. Tausend Dank!

    Vielen Dank auch an dich MC. Der Support hier im Forum ist wirklich klasse. Habt beide vielen Dank!!!

    • Daniel.4
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Kann man Beiträge hier im Forum eigentlich auch editieren?

    Ich meinte natürlich "MZ" und nicht "MC". Sorry.

    • mirko3
    • vor 3 Jahren
    • Gemeldet - anzeigen

    @Torsten: Stimmt. War ein Knoten mit nicht und not und so.

    @Daniel: Hab nun auch eine Möglichkeit gefunden, aber musste es erst probieren. Deshalb länger gedauert ;-). Freut mich aber sehr für die wirklich elegante Lösung.

    let yy := Auswahljahr;
    let mm := Auswahlmonat;
    for i in select 'Kundentabelle' do
    if for j in i.Untertabelle[Jahr=yy and Monat=mm] do
    1
    end = 0 then i
    end
    end