0

Minimum (oder Maximum) suchen

Liebe Leute,

vermutlich einfach, aber ich kommen nicht drauf: 

Es gibt zwei Tabellen (im vereinfachten Modell):

1. "Vergleichskategorie". Darin die Werte "Schüssel", "Eimer", "Wanne", "Bottich".

2. "Inhalt". Darin der Wert "Liter" und eine n:1 - Verknüpfung zu "Vergleichskategorie.

Kurz: Es kann mehrere Schüsseln, Eimer etc. mit je unterschiedlicher Füllmenge geben.

Frage: Was muss ich tun, damit mir ninox die Behältnisse mit der kleinsten (bzw. größten) Füllmenge anzeigt?

Für Tipps bin ich dankbar!

Schöne Grüße

ali

6 Antworten

null
    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi Ali. Vorschlag. Code in einem Funktionfeld. Gibt Dir ein Array der Behälter wieder, die dem Kriterium Minimum und Maximum entsprechen. Da es theoretisch sein kann, dass zwei Behälter ein Minimum haben, ist es ein Array. Die Tabellennamen und Feldnamen mußt Du noch anpassen. Meine Version gilt für:

    Tabelle: Vergleichskategorie - Feldname für Behälter: Text

    Tabelle: Inhalt - Feldname für Volumen: Volumen

    *

    let mini := min((select Inhalt).Volumen);
    for i in (select Inhalt)[Volumen = mini] do
    i.Vergleichskategorie.Text
    end

    *

    Das ganze dann noch mit max() für das Maximum. Gruß Mirko

    • Ali
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Mirko,

    besten Dank für Deinen Vorschlag. Aber offenbar stelle ich mich so ungerschickt an, dass ich die Anpassungen nicht hinbekomme.

    Darf ich noch mas nachfragen?

    Meine Tabelle mit der Vergleichskategorie heißt "Behältnis", der Feldname ebenfalls "Behältnis", die Tabelle mit dem Volumen heißt "Inhalt", der Feldname dort "Liter".

    Ich hab das in der Tabelle "Inhalt" so angepasst:

    let mini := min((select Inhalt).Liter);
    for i in (select Inhalt)[Liter = mini] do
    i.'Behältnis'."ja"
    end

    Aber dann ist jeder Eintrag der Kleinste ...

    Zudem lässt sich das Feld in der Tabellenansicht, aus welchem Grund auch immer, nicht als Spalte einfügen.

    Was mach ich falsch?

    Danke und schöne Grüße

    ali

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi Ali, für ein Funktionsfeld A um es in der Tabellenansicht darzustellen und für eine Ansicht B müßte es so funktionieren:

    A: let mini := min((select Inhalt).Liter);
    concat(for i in (select Inhalt)[Liter = mini] do
    i.'Behältnis'.'Behältnis' + " " + i.Liter
    end)

    B: let mini := min((select Inhalt).Liter);
    (select Inhalt)[Liter = mini]

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    ...ich glaube, jetzt weiß ich, was Du willst. Funktionfeld:

    let mini := min((select Inhalt).Liter);
    let behaeltnis := 'Behältnis';
    if for i in (select Inhalt)[Liter = mini and 'Behältnis'.'Behältnis' = behaeltnis] do
    i.Liter
    end = 0 then
    false
    else
    true
    end

    • Ali
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Lieber Mirko,

    besten Dank für Deine fortgesetzten Bemühungen! Das Problem ist wohl doch nicht so trivial, wie ich dachte. Zudem, fürchte ich, habe ich mich missverständlich ausgedrückt. Eigentlich wollte ich, wie Du richjtig gesehen hast, ein Funktionsfeld, mit dem ich den Datensatz mit dem kleinsten Wert in einer Behältniskategorie filtern kann. Wie gesagt, es ist nur ein Modell, die eigentliche Anwendung ist etwas komplexer ...

    Wenn ich Deine Formel einsetze, dann ist das Ergebnis immer: "Nein". Ich hab sie so umgebaut, dass ninox mir anziegt, welcher Wert der kleinste, welcher der größte ist und welche dazwischen liegen:

    let mini := min((select Inhalt).Liter);
    let maxi := max((select Inhalt).Liter);
    let behaeltnis := 'Behältnis';
    if (select Inhalt)[Liter = mini and 'Behältnis'.'Behältnis' = behaeltnis] then
    "Minimum"
    else
    if (select Inhalt)[Liter = maxi and 'Behältnis'.'Behältnis' = behaeltnis] then
    "Maximum"
    else
    "irgendwas dazwischen"
    end
    end

    Auch hier ist das Ergebnis immer: "Minimum". 

    Aber warum?

    Schöne Grüße

    ali

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Wer will schon triviale Probleme ;-). Jetzt habe ich die Tabelle mal nachgestellt. Bei mir geht es so wie unten stehend. Dabei wird das Minimum und Maximum angezeigt und die "dazwischen" sind leer.

    let mini := min((select Inhalt).Liter);
    let maxi := max((select Inhalt).Liter);
    let behaeltnis := 'Behältnis';
    let miniResult := if number(for i in (select Inhalt)[Liter = mini and 'Behältnis'.'Behältnis' = behaeltnis] do
    i.Liter
    end) != 0 then
    "min"
    end;
    let maxiResult := if number(for i in (select Inhalt)[Liter = maxi and 'Behältnis'.'Behältnis' = behaeltnis] do
    i.Liter
    end) != 0 then
    "max"
    end;
    if miniResult then
    miniResult
    else
    if maxiResult then maxiResult end
    end

Content aside

  • vor 2 JahrenZuletzt aktiv
  • 6Antworten
  • 240Ansichten