0

Seite+Ansicht mit Formel -> Wie referenziere ich in meiner Formel auf Feld

Hallo zusammen, 

folgende Herausforderung des Tages: 

Eine Seite hat ein Dropdown mit den Werten "Dieser Monat", "Letzter Monat", "Dieses Jahr", "Letztes Jahr". 

Ebenso hat die Seite eine Ansicht. In dieser Ansicht gibt es Spalten die berechnet werden. Folgendes ist die Formel für "vorletzter Monat". Da habe ich nun 4 Ansichten gebaut, die Formeln einzeln angepasst und lasse diese nun einblenden auf Basis des Dropdowns. Das kann ja nicht der Weisheit letzter Schluss sein.

Wie kann ich in der Formelspalte innerhalb der Ansicht auf das Dropdown auf der Seite referenzieren?

Besten Dank!

let me := this;
let jahr := year(today());
let monat := month(today()) - 2;
if monat < 1 then
    jahr := jahr - 1;
    monat := monat + 12
else
    monat := monat
end;
sum((select Belege
        where Steckbrief = me and year(Monate.Startdatum) = jahr and
            month(Monate.Startdatum) = monat ).A) /
sum(TabelleB.B)

4 Antworten

null
    • Horst_Fertig
    • vor 5 Monaten
    • Gemeldet - anzeigen

    Servus !

    Also sinngemäß (wenn ich alles richtig verstehe) gehe ich das bei mir in etwa so an:

    Um in EINER Ansicht mit Aufträgen entweder alle, oder nur die für heute, morgen, übermorgen, etc. geplanten Aufträge anzuzeigen und es somit jetzt im einfachsten Fall erst einmal nur ein Filterfeld, also ein Kriterium gibt (und wenn man mal vom 23.05.24 als "Heute" ausgeht)...

    ...dann funktioniert das z.B. problemlos so - vorausgesetzt es gibt dazu wie in meinem kleinen Beispiel in der Auftragstabelle ein berechnetes Feld "In Tagen" mit der Differenz zwischen aktuellem Tagesdatum und dem geplanten Auftragsdatum. Script, bzw. Formel in der Ansicht...

    if 'Geplant für Datum' then
        let myD := number('Geplant für Datum') - 1;
        select Auftrag where 'In Tagen' = myD
    else
        select Auftrag
    end
    

    Kann man natürlich ausdehnen auf weitere (Filter-) Kriterienfelder, wie z.B. noch nicht erledigte Aufträge, nur Aufträge in einem bestimmten Gebiet, etc.

    Ist dann da natürlich etwas mehr "Gefummel", bleibt aber problemlos bei einer einzigen Ansicht für unterschiedliche Filter und / oder Kombinationen. Script in der Ansicht in diesem Fall...

    let myG := 'Geplant für Gebiet';
    if not 'Geplant für Datum' and not 'Geplant für Gebiet' then
        select Auftrag
    else
        if 'Geplant für Datum' then
            let myD := number('Geplant für Datum') - 1;
            if not 'Geplant für Gebiet' then
                select Auftrag where 'In Tagen' = myD
            else
                select Auftrag where 'In Tagen' = myD and Gebiet = myG
            end
        else
            if 'Geplant für Gebiet' then
                select Auftrag where Gebiet = myG
            end
        end
    end
    

    ... ergibt dann als Resultat...

    Vielleicht hilft's ja als kleine Anregung irgendwie schon ein wenig weiter.

    Grüße

    Horst

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

    ich würde auch Horsts Ansatz verfolgen, alle Zeitbereiche in einer einzigen Ansicht anzuzeigen und diese entsprechend zu filtern. Eine Möglichkeit wäre, mit Datumswerten zu arbeiten:

    let vonD := date(1970, 1, 1);
    let bisD := date(2050, 12, 31);
    switch text(AUSWAHLFELD) do
    case "Dieser Monat":
        (
            vonD := date(year(today()), month(today()), 1);
            bisD := date(year(today()), month(today()) + 1, 0)
        )
    case "Letzter Monat":
        (
            vonD := date(year(today()), month(today()) - 1, 1);
            bisD := date(year(today()), month(today()), 0)
        )
    case "Vorletzter Monat":
        (
            vonD := date(year(today()), month(today()) - 2, 1);
            bisD := date(year(today()), month(today()) - 1, 0)
        )
    case "Dieses Jahr":
        (
            vonD := date(year(today()), 1, 1);
            bisD := date(year(today()), 12, 31)
        )
    case "Letztes Jahr":
        (
            vonD := date(year(today()) - 1, 1, 1);
            bisD := date(year(today()) - 1, 12, 31)
        )
    end;
    select Belege where Datum >= vonD and Datum <= bisD

    • P_Alb
    • vor 5 Monaten
    • Gemeldet - anzeigen

    Hallo zusammen, 

    danke für euren Input. Ich habe scheinbar mein Problem noch nicht genau erklärt.
    Ich möchte in der Zeile meine Steckbriefe aufgeführt haben und dann in der jeweiligen Zeile von den mit den Steckbriefen verknüpften Belegen die Summe bilden.
    Oder in Horsts Beispiel: Ich möchte z.B. jedes Projekt sehen und dann die Summe der Arbeitsstunden der in den diese Woche geplanten Aufträgen angezeigt bekommen.

    -----

    Ich habe eine Ansicht die wird erzeugt mit: 

    select Steckbriefe

    Innerhalb dieser Ansicht habe ich Spaltenformeln die nun folgendes machen

    let me:=this; sum((select Belege where Steckbrief = me and Monat = DROPDOWNFELD).Betrag)

    Ich bekomme nur auf die Ebene "Spaltenformel" den Wert "Dropdownfeld" nicht als gültige Variable.

    Das Problem tritt auf, da Ninox derzeit noch kein "Gruppieren nach A und dann nach B" erlaubt. 

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

       

      Ich bin mir immer noch nicht sicher, ob ich's jetzt richtig verstehe.

      Es gibt eine Seite, nennen wir sie 'Dashboard', mit einem Auswahlfeld und einer Ansicht der Tabelle 'Steckbriefe'? Nun soll in den Spalten dieses Ansicht auf das Auswahlfeld in 'Dashboard' Bezug genommen werden?

      Grundsätzlich: Tabellenzuordnung und ggf. Filterung der Ansicht erfolgen über das select in "Formel". Die angezeigten Spalten sind dann Felder der referenzierten Tabelle, in diesem Fall 'Steckbriefe'. Es gibt dort keinen direkten Bezug mehr zur Tabelle 'Dashboard' mit dem Auswahlfeld. Das "this" dürfte die Datensatz-ID in 'Steckbrief' zurückgeben, nicht den von 'Dashboard'.

      Da eine Seite aber immer nur einen Datensatz enthält, kann man dessen ID wiederum mit einem select ermitteln:

      let myDash := first(select Dashboard)

      Und über diese ID lässt sich dann auch auf das Auswahlfeld zugreifen:

      myDash.DRODOWNFELD

Content aside

  • Status Answered
  • vor 5 MonatenZuletzt aktiv
  • 4Antworten
  • 78Ansichten
  • 3 Folge bereits