Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Bewertungskriterium für Abfrage

Begonnen von Cschille, August 16, 2016, 15:44:25

⏪ vorheriges - nächstes ⏩

Cschille

Hallo zusammen,

ich arbeite noch nicht so lange mit Access, habe dennoch ein Recht komplexe Frage. Vielleicht habt ihr einen Tipp für mich.

Ich habe ein Abfrage erstellt und stelle die Ergebnisse in einem Endlosformular dar. Diese Abfrage enthält 3 wichtige Attribute eines jeden Datensatzes, die ich aktuell von der bedingten Formatierung "auslesen lasse" und  dem Datensatz insgesamt 3 Farben (grün, gelb und rot) zu ordnen kann. Nun möchte ich nicht nur ein Textfeld des Formulares einfärben, sondern in einem separaten Feld einen Wert (z.B. 1 für grün, 2 für gelb, 3 für rot) ausgeben. Die 1,2 oder 3 kann dann z.B. beim Filtern in einer Excelauswertung oder beim Filtern des Endlosformulares genutzt werden.

Zurzeit versuche ich mit einem Recordset zu arbeiten, um das Problem zu lösen wie in [url][/http://www.office-loesung.de/ftopic39061_0_0_asc.php] vorgeschlagen. Leider komme ich hier an meine Grenzen.

Die Abfrage benötigt ingesamt 5 Parameter (kommen aus Textfeldern des Formulares), die aus einer Parameterabfrage stammen. Wie übergebe ich an die Abfrage diese Parameter in einem Recordset / in VBA?
Wie schreibe ich in die Abfrage / in das Formular die Werte 1,2 bzw. 3 abhängig von den 3 Attributen des jeweiligen Datensatzes.

Könnt ihr mir bei diesem Problem evt. Tipps geben bzw. ggf. einen Ansatz für VBA geben?

Viele Grüße
Christoph

Lachtaube

Du kannst Deine 3 Ausdrücke der Bedingten Formatierung in einem Ausdruck in der Abfrage zusammenfassen. Dafür im Abfrageentwurf in derZeile Feld folgendes eintragen:Auswertung: Wenn(DeineErsteBedingung;1;Wenn(DeineZweiteBedingung;2;Wenn(DeineDritteBdingung;0)))Wären die Bedingungen hier bekannt, ließe sich der Ausdruck für das Feld auch näher konkretisieren.
Grüße von der (⌒▽⌒)

Cschille

Hallo Lachtaube,

danke für deinen Hinweis. Ich habe gerade nochmal mit einem Kollegen gesprochen und bin das Thema mit ihm durchgegangen. Er hatte eine ähnliche Idee. Ich würde jetzt also in der Abfrage ein if-clause baum basteln in dem sämtliche möglichkeiten durchgeprüft werden. Den bastel ich mir und dann melde ich mich wieder.

Meine Bedingungen (Kritwerien lauten Belieferung pro Woche, Verweildauer und Bestand):
1. 2=< [Belieferung pro Woche] <=5 Und [Verweildauer]<7 --> 1
2. 2=< [Belieferung pro Woche] <=5 Und 7=<[Verweildauer]<=11 Und [Bestand]<= 50 --> 1
3. 2=< [Belieferung pro Woche]<=5 Und 7=<[Verweildauer]<=11 Und [Bestand]> 50 --> 2
4. 2=< [Belieferung pro Woche]<=5 Und [Verweildauer]>11 --> 3
5. [Belieferung pro Woche]=1 Und [Verweildauer]<14 --> 1
6. [Belieferung pro Woche]=1 Und 14=< Und [Verweildauer]<=26 Und[Bestand]<=50 --> 1
7. [Belieferung pro Woche]=1 Und 14=< Und [Verweildauer]<=26 Und[Bestand] >50 --> 2
8. [Belieferung pro Woche]=1 Und [Verweildauer]> 26 --> 3
9. [Belieferung pro Woche]=0,5 Und [Verweildauer]<=15 Und [Bestand]<=5 --> 1
10. [Belieferung pro Woche]=0,5 Und [Verweildauer]<=15 Und [Bestand]>5 --> 2
11. [Belieferung pro Woche]=0,5 Und [Verweildauer]>15 Und  [Bestand]<=5 --> 2
12. [Belieferung pro Woche]=0,5 Und [Verweildauer]>15 Und [Bestand]> 5 --> 3

Vielen Dank nochmal

Viele Grüße
Christoph

MzKlMu

Hallo,
solche Wenn Orgien sind fast immer ein Hinweis auf ein zu optimierendes Datenmodell. Abgesehen davon, es gehen nur 7 Wenn Verschachtelungen, dann ist Schluss. Das muss man versuchen über Tabellen und Verknüpfungen zu lösen.

Kannst Du mal die Bedingungen in Prosa einfach mal beschreiben.
Was ist [Belieferung pro Woche]=0,5 ist das alle 2 Wochen ?

PS:
Du solltest Feldnamen mit Leer und Sonderzeichen vermeiden. Erfordern nur einen erhöhten Aufwand und sonst nix.
Gruß Klaus

Lachtaube

Eine schöne Fleißaufgabe habe ich mir da herangezogen. :) Wenn(([Belieferung pro Woche] Zwischen 2 Und 5 Und
     ([Verweildauer] < 7 Oder ([Verweildauer] Zwischen 7 Und 11 Und [Bestand] <= 50)))
     Oder
     ([Belieferung pro Woche] = 1 Und
     ([Verweildauer] < 14 Oder ([Verweildauer] Zwischen 14 Und 26 Und [Bestand] <= 50)))
     Oder
     ([Belieferung pro Woche] = 0,5 Und
     [Verweildauer] <= 15 Und [Bestand] <=5 );
     1
;Wenn(([Belieferung pro Woche] Zwischen 2 Und 5 Und
       [Verweildauer] Zwischen 7 Und 11 Und [Bestand] > 50)
      Oder
      ([Belieferung pro Woche] = 1 [Verweildauer] Zwischen 14 Und 26 Und [Bestand] > 50)
      Oder
      ([Belieferung pro Woche] = 0,5 Und
      (([Verweildauer] <= 15 Und [Bestand] > 5) Oder ([Verweildauer] > 15 Und [Bestand] <= 5)));
      2
;Wenn(([Belieferung pro Woche] Zwischen 2 Und 5 Und [Verweildauer] > 11)
      Oder
      ([Belieferung pro Woche] = 0,5 Und [Verweildauer] > 15 Und [Bestand] > 5)
      Oder
      ([Belieferung pro Woche] = 1 Und [Verweildauer] > 26);
      3)))
Grüße von der (⌒▽⌒)

Cschille

Hallo zusammen,

danke Lachtaube für deine Mühen ich werde es gleich mal testen. Sieht schonmal gut aus. Und ich gebe natürlich Feedback!

@ MzKIMu (hoffentlich richtig geschrieben): Ich habe die Spalte Belieferung pro Woche in BelieferungproWoche umbenannt.
Zum Thema Datenmodell: Hinter dieser Anfrage steckt ein Entscheidungsbaum im Rahmen der Klassifikation, der keinen weiteren Bezug zu den vorherigen Abfragen bietet. Habe es bereits mit einer "Entscheidungsbaumtabelle" versucht. Leider ohne wirklichen Erfolg. Als Fehlermeldung wurde mir ausgegeben, die Abfrage sei zu komplex. Waherscheinlich zu viele Where Bedingungen gehabt.

Die Prosavariante des Entscheidungsbaumes reiche ich nach.  Und ja 0,5 Belieferung pro Woche  bedeutet Belieferung alle 2 Wochen.

Danke für eure Unterstützung!

Viele Grüße

Christoph

Cschille

Hallo nochmal  8),

nun wie angekündigt:

Prosaversion:

1.alle Vertriebspartner mit mehr als 1 Liefertag pro Woche und einer Verweildauer kleiner 7 Tage (grün)
2.alle Vertriebspartner mit mehr als 1 Liefertag pro Woche, einer Verweildauer zwischen 7 und 11 Tage und Bestand kleiner gleich 50 (grün)
3.alle Vertriebspartner mit mehr als 1 Liefertag pro Woche, einer Verweildauer zwischen 7 und 11 Tage und Bestand größer 50 (gelb)
4.alle Vertriebspartner mit mehr als 1 Liefertag pro Woche und einer Verweildauer größer 11 Tage (rot)
5.alle Vertriebspartner mit 1 Liefertag pro Woche und einer Verweildauer kleiner 14 Tage (grün)
6.alle Vertriebspartner mit 1 Liefertag pro Woche, einer Verweildauer zwischen 14 und 26 Tage und Bestand kleiner gleich 50 (grün)
7.alle Vertriebspartner mit 1 Liefertag pro Woche, einer Verweildauer zwischen 14 und 26 Tage und Bestand größer 50 (gelb)
8.alle Vertriebspartner mit 1 Liefertag pro Woche und einer Verweildauer größer 26 Tage (rot)
9.alle Vertriebspartner mit 1 Liefertag alle 2 Wochen, einer Verweildauer kleiner gleich 15 Tage und Bestand kleiner gleich 5 (grün)
10.alle Vertriebspartner mit 1 Liefertag alle 2 Wochen, einer Verweildauer kleiner gleich 15 Tage und Bestand größer 5 (gelb)
11.alle Vertriebspartner mit 1 Liefertag alle 2 Wochen, einer Verweildauer größer 15 Tage und Bestand kleiner gleich 5 (gelb)
12.alle Vertriebspartner mit 1 Liefertag alle 2 Wochen, einer Verweildauer größer 15 Tage und Bestand größer 5 (rot)


Für die Entwurfansicht

Bewertung:
Wenn((([BelieferungproWoche] Zwischen "2" Und "5") Und ([Verweildauer]<7)) Oder_
(([BelieferungproWoche] Zwischen "2" Und "5") Und ([Verweildauer] Zwischen 7 Und 11) Und  ([Bestand]<=50)) Oder_
(([BelieferungproWoche]="1") Und ([Verweildauer]<14)) Oder_
(([BelieferungproWoche]="1") Und ([Verweildauer] Zwischen 14 Und 26) Und ([Bestand]<=50)) Oder_
(([BelieferungproWoche]="0,5") Und ([Verweildauer]<=15) Und ([Bestand]<=5));"1";_
Wenn((([BelieferungproWoche] Zwischen "2" Und "5") Und ([Verweildauer] Zwischen 7 Und 11) Und ([Bestand]>50)) Oder_
(([BelieferungproWoche]="1") Und ([Verweildauer] Zwischen 14 Und 26) Und ([Bestand]>50)) Oder_
(([BelieferungproWoche]="0,5") Und ([Verweildauer]<=15) Und ([Bestand]>5)) Oder_
(([BelieferungproWoche]="0,5") Und ([Verweildauer]>15) Und ([Bestand]<=5));"2";_
Wenn((([BelieferungproWoche] Zwischen "2" Und "5") Und ([Verweildauer] >11)) Oder_
(([BelieferungproWoche]="1") Und ([Verweildauer] >26)) Oder_
(([BelieferungproWoche]="0,5") Und ([Verweildauer]>15) Und ([Bestand]>5)) ;"3";"4")))


Die ausgegebene 4 habe ich zusätzlich eingeführt, für Datensätze, die der Entscheidungsbaum nicht abdeckt. Der _ steht für einen nicht zulässigen Zeilenumsprung. Ich habe ihn gesetzt, damit man die einzelnen im Prosateil beschriebenen Klassen dem Element des Bewertungssystems zu ordnen kann.

Danke nochmal für die Idee! Gab noch ein paar kleine Formatierungsschwierigkeiten meinerseits. Daher habe ich auch die Gänsefüsschen bei den BelieferunproWoche gesetzt.

Fazit: problem solved

Viele Grüße

Christoph :)