0

Auswertung erstellen

Hallo zusammen,

ich möchte gerne pro Vertragspartner eine Reklamationsauswertung für die einzelnen Jahre erstellen.  Es soll dann als übersicht für alle Auftraggeber in einem FX dargestellt werden, so das man nur noch das Jahr wählt. Möglichst mit einem aktuellen Trent für das Aktuelle  Jahr.

Hab in der DB mal alles weg gelassen und nur die zur verfügung stehenden Bezugsfelder mit den Verknüpfungen hier dargestellt. 

Vielleicht könnt Ihr mir helfen

 

12 Antworten

null
    • Michi.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    für Vertragspartner Paul wäre das das Ergebnis wobei der Trent irgendwie datumsabhängig sein müßte von mir aus auf Monate als Bezug. Hab aber null Ahnung wie.

    Die einzelnen Vertragspartner haben viele Aufträge. Aber nur wenn man weis wo was schief läuft kann man es auch versuchen zu ändern. Nur das Bauchgefühl ist für Gespräche nicht hilfreich.Daher ist so eine Auswertung sehr praktisch.

    • Michi.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    bin ein bisschen weiter... aber nicht wirklich da wo ich hin möchte. 

    sind ganz viele Fragezeichen im Kopf.

    Wie bekomm ich den Zeitlichen Kontext hin. 

    let me := this;
    let aa := ((select Abrechnungen) order by 'Abrechnung vom')['Aufträge' = me];
    first(aa.'Abrechnung vom') = 1. Auslieferung 

    • Erste Auslieferung im Jahr 2021 - Reklamation im Jahr 2022 muss im Jahr 2021 in die Quote einfließen.

    Wie bekomm ich alles in ein FX als Übersicht angezeigt, wobei die Vertragspartner nicht "fest verankert sein sollen im script mit Nr=x" so das neue Partner automatisch in der liste erscheinen.

    Kann man einen Trent für jeden Vertragspartner mit einfügen??

    • Michi.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    bin eindeutig zu blöd ☹️

    wollt einen neuen ansatz nachgehen und die werte pro vertragspartner in eine hilfstabelle schreiben. Das mit den fx feldern, nimmt eindeutig zu viel leistung in anspruch. bekomm es aber nicht hin. vor allem müsste ja pro vertragspartner das ganze nach jahren geschrieben werden, damit ich in der ansicht am ende filtern kann.

    delete (select Hilfstabelle);
    for i in select 'Aufträge' where Vertragspartner.Nr = Vertragspartner.Nr do
        let erste_anfahrt := ((select Abrechnungen) order by 'Abrechnung vom')['Aufträge'.Vertragspartner.Nr = 'Aufträge'.Vertragspartner.Nr].first('Abrechnung vom');
        let anzahl_fahrten_Kunden := cnt((select 'Aufträge')[Vertragspartner.Nr = i.Nr].'ges Ausgeliefert');
        let Rekla := cnt(select 'Aufträge' where Vertragspartner = i.Nr and 'davon Reklamationen' > 0);
        let rekla_anfahrt := sum((select 'Aufträge' where Vertragspartner = i.Nr and 'davon Reklamationen' > 0).'davon Reklamationen');
        let rekla_anfahrt_ausgabe := rekla_anfahrt / Rekla;
        let quote := Rekla / anzahl_fahrten_Kunden * 100;
        let new := i.(create Hilfstabelle);
        new.(ID := i.Nr);
        new.('ges gefahrene Küchen' := i.anzahl_fahrten_Kunden);
        new.(Reklamationen := i.Rekla);
        new.(Quote := i.quote);
        new.('Durschnitt der Reklaanfahrten' := i.rekla_anfahrt_ausgabe);
        new.('anzahl Reklafahrten' := i.rekla_anfahrt);
        new.(Firma := i.Name)
    end
    
    • Michi.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    könnt ihr mir helfen?

    mit : ((select Abrechnungen) order by year('Abrechnung vom')).year('Abrechnung vom') bekomm ich alle Jahreszahlen.

    die müsten mit dem datum der ersten Abrechnung pro Auftrag verglichen werden um alle zu Daten für diesem Jahr zu ermitteln. Schluss endlich soll das ganze in eine Tabelle geschrieben werden wo dann raus kommt

    zb. Vertragspartner Müller

    2020 / 100 aufträge / davon 20 rekalmationen / ......

    2021 / 200 aufträge / davon 60 rekalmationen / ......

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

    Moin Michi ,

    ich mache mal einen Versuch dir zu helfen 🙂.
    Nun habe ich mir deine DB jetzt mal angeschaut.
    So auf die Schnelle sehe ich folgendes:
    An einigen Stellen kannst du select Abfragen weglassen, da du direkt über die existierenden Verknüpfungen die Daten holen kannst, das ist Performancemäßig besser.
    z.B. 'ges Ausgeliefert' kannst du darauf reduzieren:

    let me := this;
    cnt(me.Abrechnungen)
    

    Welches Vorgen/Struktur Datentechnisch am besten ist kann ich noch nicht überblicken.
    Ich verstehe z.B noch nicht wie du die Reklamationen berechnest, also die Formel lese ich, aber den Sinn dahinter verstehe ich nicht. Woran erkennst du aus den Daten die du hast, ob es eine Reklamation zu einen Auftrag gibt?
     

      • Michi.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      DIGITOOL  danke erstmal.

      ich hab mal versucht die Anforderung zu ordnen. 

      wenn ich das richtig erfasse müsste man:

      • ein arrya für die vorhandenen Vertragspartner (Nr.) bilden
      • ein zweites für alle vorhandenen Datumswerte aus 'Abrechnung vom'

      was für die Selektion nach Vertragspartner und Jahr verglichen werden müsste.

      dann müssten die werte berechnet werden für den Kunden und das Jahr.

      um die Felder in der Hilfstabelle zu füllen:

      • Jahr von der ersten 'Abrechnung vom'
      • Anzahl der gefahrenen Küchen
      • Davon Reklamationen
      • die Reklamationsquote in %
      • Durchschnitt der Reklamationsanfahrten
      • gesamt anzahl aller Reklamationsanfahrten
      • Namer des Vertragspartners

      am ende hab ich dann für alle Vertragspartner zb.: 3 records in der Hilfstabelle für 3 Jahre.

      Nur wie kann man das bewerkstelligen, das liegt weit über meinem spärlichen wissen!!

      Über fx Felder konnte ich mir das holen, jedoch immer nur für einen Kunden. Doch da die DB ziemlich groß ist, und durch die permanente Berechnung der fx ein deutlicher Performens Verlust zu verzeichen ist. Würde ich die variante mit der hilfstabelle vorziehen. 

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

      Michi ,

      Danke für die Infos, da wird mir einiges klarer.
      Inzwischen hatte ich mir auch hergeleitet, dass sich die Reklamationen aus der Anzahl der Abrechnungen zu einem Auftrag ergeben (genauer gesagt: Anzahl Datensätze Aufträge.Abrechnung - 1).

      Mein Ansatz wäre die Hilfstabelle mit Vertragspartner zu verknüpfen, damit sollten viele select-Abfragen wegfallen und du siehst direkt beim Vertragspartner seine Statistik über die Verknüpfung. Die Ansicht in der Tabelle Statisik neu ist dann für die Gesamt-Übersicht im asugewählten Jahr.
      Den Button würde ich nur für die erste Datenberechung + Füllung der Hilfstabelle mit den Bestandsdaten verwenden und danach das Sript an einen Trigger hängen (ein Klick weniger ;-)), z.B. beim Öffnen der DB jede Woche oder jeden Monat (dann dauert das Sript auch nicht so lange) und du hast den aktuellen Stand / Trend für das laufende Jahr.
      Das war ja auch ein Wunsch von dir...

    • Michi.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Würde es gern direkt schreiben lassen. Nur hab ich null Ahnung wie man das umsetzen kann.

     

    Array1 müsten die Nr von allen Vertragspartnern für das entsprechende jahr werden
    Array2 müsten die Jahreszahlen werden

    Das ganze müste dann in eine schleife um es für die enthaltenen Jahre und Kunden zu durchlaufen.
    Am ende sollen die werte in die Hilfstabelle geschrieben werden.

    Irgendwie so vielleicht in der Richtung. Hab null Ahnung

    'Anzahl der gefahrenen Küchen' := 0;
    let Array1 := split("Array von Nr", ",");
    let Array2 := split("Array von Nr", ",");
    for i in range(0, cnt(Array1)) do
        let aa := trim(item(Array1, i));
        'Anzahl der gefahrenen Küchen' := 'Anzahl der gefahrenen Küchen' + cnt((select Abrechnungen)[Nr = aa]

      • Michi.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

    • Michi.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Ein letzter Versuch,

    Kann mir wirklich keiner helfen das um zu setzen? Hab echt keine Ahnung wie man es macht. Selbst bei der Auswertung an sich ist mir der Post https://forum.ninox.de/t/35h7c8p/median-als-globale-funktion aufgefallen. Sorry für meine Unwissenheit, doch ich mußte es googeln und hab festgestellt das dies eigentlich die noch bessere Variante ist um "Ausreißer die es immer gibt" zu vernachlässigen. Gern würde ich auch was zahlen für, aber bin halt auch nur nen kleiner wicht, der wenigsten ninox durchsetzen konnte. Sorry aber ich stehe auf Auswertung die was bringen, nicht nur immer was was kommt rüber bei einem Auftrag. Viel wichtiger ist mir wie oft fährt man hin... da verbrennt man geld und ansehen. Ist aber leider wohl nur meine meinung. Doch bei so vielen Aufträge pro Auftraggeber ist bauchgefüh das falsche Instrument.

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

    Moin Michi ,

    hier ein reduzierter Vorschlag um dir eine gewisse Auswertung zu ermöglichen.

    Erstelle diesem Code in einem Button in der Tabelle Aufträge:

    do as server
        for i in select 'Aufträge' do
            if cnt(i.Abrechnungen) > 0 then
                i.(gesAusgeliefert_Z := 1);
                i.('davon Rekalamtionen_Z' := cnt(i.Abrechnungen) - 1)
            else
                i.('davon Rekalamtionen_Z' := 0)
            end
        end
    end

    und 2 neuen Zahlenfeldern (siehe Screenshot)

    Dann wird in jedem Auftrag anhand der Anzahl der Einträge in der Untertabelle Abrechung ausgewertet, ob / wieviele Reklamationen es gibt. und diese Werte in die Uahlenfelder geschrieben. (wegen der großen Datenmengen besser noch ein do as server drum packen)

    Dmit kannst du in der Tabellenansicht der Tabelle Aufträge z.B. sortieren nach "davon Reklamationen_Z" und hast schon einen deutlichen Überblick wo es sich lohnt nachzuhaken...

     

    Ich denke das hilft dir deinem Wunsch näherzukommen.

     

    VG Ronald

      • Michi.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      DIGITOOL wie kann ich denn die Nr von Vertragspartner in eine Variable packen, so das bei in dem fall 3 durchgängen die Nr immer weiter geändert wird ? 

      Nr = 1 / Nr = 2 usw.

      delete (select Hilfstabelle);
      let anz := cnt(select Vertragspartner);
      for i in range(0, anz) do
          let aa := for t in (select Abrechnungen)['Aufträge'.Vertragspartner.Nr = 1] do
                  cnt(first(select Abrechnungen where 'Aufträge' = t.'Aufträge' and 'Abrechnung vom' > min(t.'Abrechnung vom')))
              end;
          let thisArray := aa;
          let aaa := arrayFunction({
                      inputArray: thisArray
                  });
          (create Hilfstabelle).(
              'anzahl Reklafahrten' := aaa;
              ID := Nr
          )
      end

Content aside

  • vor 1 JahrZuletzt aktiv
  • 12Antworten
  • 123Ansichten
  • 2 Folge bereits