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
-
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
-
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"
endAber 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
-
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] -
...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
-
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
-
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 3 JahrenZuletzt aktiv
- 6Antworten
- 254Ansichten