1

Alle Mögliche Kombinationen als neue Tabelle ausgeben

Hallo zusammen,

gerne würde ich folgende Aufgabe mit Ninox lösen, konnte aber noch keinen Lösungsweg finden.

Beispiel: Ich habe eine Basistabelle mit drei Spalten A, B, und C
A = Farben
B = Tiere
C = Länder

In der neuen Tabelle sollen die gleichen Spalten ausgegeben werden, jedoch die Daten in allen möglichen Kombinationen ausgegeben sein.

Also, wenn ich je drei Farben, drei Tiere und drei Länder habe, erhalte ich zu jeder Farbe eine Kombination mit jeweils allen Tieren und Ländern.  Insofern müsste ich auf 27 Kombinationen kommen (3 hoch 3).

Wichtig: Die Zellen der Tabellen sollen nicht zusammengeführt werden sondern einzelne Zellen bleiben.

Über einen Lösungsansatz würde ich mich sehr freuen. Danke im Voraus!

Danke und Gruß,
Markus

3 Antworten

null
    • rainless
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo mg,

    so ganz verstehe ich das nicht ...

    Du hast eine Tabelle mit Records, in denen Farbe/Tier/Land stehen? Denn wenn in den Spalten diese Werte stehen sollen, und da in den Zeilen Records stehen, muss das so sein ... das macht aber wenig Sinn.

    Mein Vorschlag, falls es Dir um die Permutationen geht:

    • Du hast drei Tabellen: Farben, Tiere, Länder
    • Jede Tabelle hat nur ein Feld: Farben hat ein Textfeld namens Farbe, Tiere hat ein Textfeld namens Tier und Länder hat ein Textfeld namens Land.
    • Jetzt kannst du in jede Tabelle die Farben, Tiere und Länder eintragen, die Du haben möchtest ... so viele in jede Tabelle, wie Dir einfallen.
    • Dann gibt es die Ergebnistabelle FarbenTiereLänder und sie hat drei Felder: Farbe, Tier, Land
    • FarbenTiereLänder spendierst Du noch einen Button

    Und hinter den Button legst Du die folgende Funktion:

    do as server
        delete (select 'FarbenTiereLänder');
        for f in select Farben do
            for t in select Tiere do
                for l in select 'Länder' do
                    let ftl := (create 'FarbenTiereLänder');
                    ftl.(Farbe := f.Farbe);
                    ftl.(Tier := t.Tier);
                    ftl.(Land := l.Land)
                end
            end
        end;
        delete record('FarbenTiereLänder',0)
    end
    

    Wenn Du alle Farben, Tiere und Länder eingetragen hast, machst Du den ersten Record von FarbenTiereLänder auf, drückst auf den Knopf und voilà - die Tabelle ist mit allen Permutationen befüllt. 

    Wenn Du neue Farben, Tiere oder Länder hinzufügst, einfach in irgendeinem Record wieder den Knopf drücken und fertig.

    Und an die Profis in der Gruppe: Schön wäre es natürlich, wenn man so eine Art ControlBoard hätte, auf dem nur der Knopf sitzt mit dem man die Tabelle befüllen kann. Wie geht das?

      • Ninox Solution-Partner
      • RonaldP
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Lars 
      Deine Lösung gefällt mir ;-)

      Zu deiner Frage nach dem ControlBoard.
      Du erstellst eine neue Tabelle Namens z.B. "Dashboard".
      Hier legst einen Button mit deinem Skript an, erzeugst auch einen ersten Datensatz .
      (Da dein Skript schon mit select Aufrufen arbeitet, funktioniert es "überall")
      Diese Tabelle wird immer nur einen Datensatz haben, da das Skript ja nur in anderen Tabellen agiert.

      Ich würde dann im Dashboard auch noch eine Ansicht erstellen mit:

      select 'FarbenTiereLänder'
      

      dann kommt dieses hier heraus:

      Nach unten scrollen musst Du dann innerhalb dieser Ansicht...

      Viele Grüße
      Ronald

    • ruby_summer
    • vor 7 Monaten
    • Gemeldet - anzeigen

    Hallo   und  ,

    erstmal ein riesiges Dankeschön für eure hilfreiche Lösung und gleichzeitig ein ganz dickes Sorry, dass ich erst nach einem Jahr antworte. Ich habe überhaupt nicht mitbekommen, dass jemand geantwortet hatte und war mit meinem Anliegen notgedrungen auf Excel ausgewichen. Vermutlich ging die Benachrichtigung im Spam unter. Irgendwie unhöflich und peinlich... 🙈 Aber hoffentlich nehmt ihr mir das nicht übel.

    1.

    Ich konnte die Funktion von Lars so umsetzen und es funktioniert für die drei Spalten genauso, wie ich es meinte. Nochmals danke!

    Nun möchte ich das ganze etwas weiter ausbauen und ein größere Tabelle mit 18 Spalten importieren. Von dieser Tabelle sollen dann die Kombinationen von jeweils 3 aufeinander folgenden Spalten kombiniert werden. Also Spalten 01, 02, 03 und dann 04, 05, 06 und dann 07, 08, 09 und so weiter. Das Ergebnis soll dann in einer zusammenhängenden Tabelle ausgegeben werden. In dem nachfolgenden Beispiel mit 18 Spalten und 3 Zeilen bzw. Datensätzen würde ich dann in der Ausgabetabelle ebenfalls 18 Spalten mit 27 Zeilen erhalten. 

    Meine Eingabetabelle 'Input':

    Für die ersten drei Spalten kriege ich das an dem Beispiel von Lars super hin. (Ich habe mal andere Werte genommen, Autos mit Ausstattung war für mich leichter zu überschauen als Farben und Tiere. 🙂 )

    Hier der Code für die ersten drei Spalten:

    do as server
        delete (select Output);
        for a in select Input do
            for b in select Input do
                for c in select Input do
                    let abc := (create Output);
                    abc.('01' := a.'01');
                    abc.('02' := b.'02');
                    abc.('03' := c.'03')
                end
            end
        end;
        delete record(Output,0)
    end
    

    Kann mir jemand helfen, dies mit 18 Spalten zu berechnen, wie oben beschrieben?

    Ich würde mich gerne mehr in Ninox Skript einarbeiten aber ich finde überhaupt keinen vernünftigen Einstieg. 😐 Die Dokumentation und die Videos erfordern zuviel Programmierkenntnis voraus, was für den Ersteinstieg echt schwierig ist.


    2. Dann hätte ich noch eine zweite Frage für eine zweite oder kombinierte Rechenoperation:

    Wenn die erste Berechnung geklappt hat und ich dann meine Ausgabetabelle mit 18 Spalten und 27 Zeilen erhalten habe, möchte ich gerne über die gesamte Tabelle Zeile für Zeile eine Suchen-Ersetzen-Funktion laufen lassen.

    In jedem einzelnen Datenfeld, das ich über die Eingangstabelle importiert habe, werden dann spätere mehrere Wörter stehen, in denen immer wieder der gleiche Platzhalter "XXXXXXXX" auftaucht. Dann gibt es eine zweite Eingabetabelle (Ländertabelle) mit 1 Spalte und 27 Zeilen, in der einfache Ländernamen aufgeführt sind.

    Die Ausgabetabelle soll dann Zeile für Zeile aus der "Ländertabelle" jeweils einen Wert nehmen und den Platzhalter zeilenweise ersetzen. Also jede Zeile wird mit dem Wert aus der "Ländertabelle" überschrieben. 

    Ich hoffe, das kann man verstehen.


    Also, auch wenn so lange Pause in diesem Thread war, wäre ich extrem dankbar, wenn mir jemand mit dieser Operation helfen könnte. 😀

    Ein großes Dankeschön im Voraus!

    Gruß Markus

Content aside

  • 1 „Gefällt mir“ Klicks
  • vor 7 MonatenZuletzt aktiv
  • 3Antworten
  • 111Ansichten
  • 3 Folge bereits