Zählen und auswerten.
Hallo, ich habe seit längerer Zeit NINOX nicht mehr verwendet und offensichtlich eine Menge vergessen.
Mein "Problem": Ich bin gerade dabei, mein Leben im Flugzeug zu rekonstruieren. Dazu habe ich eine Tabelle mit zwei Textfeldern mit genau 3 Zeichen Länge, Abflugsflughafen und Ankunftsflughafen. In einer Übersichtstabelle habe ich ein Textfeld angelegt, in dem ich das Kürzel des Flughafens eintragen kann. Ich möchte nun gerne, dass eine Formel mir berechnet, wie oft ich von diesem Abflugsflughafen gestartet und gelandet bin (das habe ich gerade noch so hinbekommen). Ich hätte aber auch gerne, dass ausgegeben wird, wie oft ich wo hin geflogen bin. Also, am Ende soll es heißen: 20 Flüge, 10 Starts und 10 Landungen, und anschließend eine Auflistung der Ziele, also z.B. 4 mal nach JFK.
Ich habe es mal so versucht:
let matches := this.Flüge;
let departureCount := count(matches);
let uniqDest := [];
for r in matches do
let f := r.Ankunftsflughafen;
if f != null and f != "" then
if not contains(uniqDest, f) then
uniqDest := uniqDest + [f]
end
end
end;
let destinationCount := count(uniqDest);
let destinationLines := "";
for d in uniqDest do
let cnt := count(select matches where Ankunftsflughafen = d);
destinationLines := destinationLines + d + ": " + cnt + " "
end;
"Starts von " + this.Start + ": " + departureCount +
", unique destinations: " + destinationCount +
" nach " + destinationLines
Da kommt aber immer nur richtig die erste Zahl, und der Rest bleibt 0. Hat jemand eine Idee? Vielen Dank!
3 Antworten
-
Hallo Alexander. Ich habe mal improvisiert. Das Script gehört in ein Funktionsfeld und gibt dir ein Array von Objekten wieder, in denen jeweils die Informationen stehen. Über dieses Array kannst du iterieren und per Punktnotation die einzelnen Werte auslesen. Im zweiten Script habe ich eine einfache Tabelle angefügt in html(), damit man das alles auf einem Blick sehen kann. Ganz unten steht die Gesamtzahl deiner Flüge. Schau mal ob das so geht. Mirko
let tab := (select Fluege); let airports := unique(array(tab.Abflugflughafen, tab.Ankunftsflughafen)); let values := for airport in airports do { Flughafen: airport, Abfluege: cnt(tab[Abflugflughafen = airport]), Landungen: cnt(tab[Ankunftsflughafen = airport]) } end; valueslet tab := (select Fluege); let airports := unique(array(tab.Abflugflughafen, tab.Ankunftsflughafen)); let values := for airport in airports do { Flughafen: airport, Abfluege: cnt(tab[Abflugflughafen = airport]), Landungen: cnt(tab[Ankunftsflughafen = airport]) } end; let thead := --- <tr><th>Flughafen</th><th>Abflüge </th><th>Landungen</th></tr> ---; let body := for value in values do --- <tr> <td>{ value.Flughafen }</td> <td>{ value.Abfluege }</td> <td>{ value.Landungen }</td> </tr> --- end; let footer := --- <tr><td colspan=3>#{ cnt(tab) }</td></tr> ---; html(thead + body + footer) -
Du kannst verschiedene Sortierungen vornehmen. Im Grunde ist das auch nur ein Array, welches Objekte in der Form {key:value} enthält. Mit order by kannst du dann sortieren. Da Ninox alle Werte in Objekten in das Format "any" konvertiert, musst du zum sortieren noch in "number" konvertieren. Jetzt musst du in die Variable "body" noch die sortierte Variable eingeben, dann zeigt deine Tabelle alles schick an. Ganz unten habe ich noch etwas CSS eingefügt, dann ist es für das Auge schöner. Mirko
let tab := (select Fluege); let airports := unique(array(tab.Abflughafen, tab.Zielflughafen)); let values := for airport in airports do { Flughafen: airport, Abfluege: cnt(tab[Abflughafen = airport]), Landungen: cnt(tab[Zielflughafen = airport]) } end; let sortByAirport := (values order by Flughafen); let sortByCntAbfluege := (values order by number(Abfluege)); let sortByCntLandungen := (values order by number(Landungen)); let rsortByCntAbfluege := (values order by -number(Abfluege)); let rsortByCntLandungen := (values order by -number(Landungen));html mit css
let tab := (select Fluege); let airports := unique(array(tab.Abflughafen, tab.Zielflughafen)); let values := (for airport in airports do { Flughafen: airport, Abfluege: cnt(tab[Abflughafen = airport]), Landungen: cnt(tab[Zielflughafen = airport]) } end order by -number(Landungen)); let thead := --- <table> <tr><th>Flughafen</th><th>Abflüge </th><th>Landungen</th></tr> ---; let body := for value in values do --- <tr> <td>{ value.Flughafen }</td> <td>{ value.Abfluege }</td> <td>{ value.Landungen }</td> </tr> --- end; let footer := --- <tr><td colspan=3>#{ cnt(tab) }</td></tr> </table> ---; let css := " <style> table { width:100%; background-color: #999; } th { text-align:center; background-color: rgb(180,180,170); } td,th{ font-size: medium; padding: .1em .5em .1em .5em; } td { background-color: rgb(230,230,220); } tr:nth-child(odd) td{ background-color: rgb(210,210,200); } td:nth-of-type(2) , td:nth-of-type(3) { text-align:right; } </style>"; html(css + thead + body + footer)
Content aside
- vor 1 StundeZuletzt aktiv
- 3Antworten
- 32Ansichten
-
2
Folge bereits
