Neuigkeiten:

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

Mobiles Hauptmenü

Wenn Funktion in Abfrage per Ausdrucksgenerator 16x verschachteln

Begonnen von KonradR, Februar 24, 2024, 10:12:34

⏪ vorheriges - nächstes ⏩

KonradR

Hallo liebe Accessfreunde,

gemäß meinem Betreff möchte ich im Ausdrucksgenerator eine Wenn Funktion bis zu 16x verschachteln. Beim 6x kann ich allerdings im Ausddrucksgenerator nicht weiterschreiben. Was kann ich da machen? Oder ist einfach die Verschachtelungstiefe im Ausdrucksgenerator auf 6 Ebenen begrenzt. Gibt es da noch andere Alternativen?
Schon im Voraus vielen Dank.

MzKlMu

Hallo,
das geht nicht, das ist auf 6-7 Ebenen begrenzt.
Es gibt aber andere Möglichkeiten.
Oftmals liegt es auch an einem falschen Datenmodel.

Beschreibe dein Vorhaben mal genauer.
Gruß Klaus

ebs17

Zitatmöchte ich im Ausdrucksgenerator eine Wenn Funktion bis zu 16x verschachteln
Hat das funktionelle oder ideologische Gründe?

ZitatGibt es da noch andere Alternativen?
Vorbehaltlich der konkreten Aufgabe löst man solche Wenn-Kaskaden meist gut über eine zusätzliche Tabelle, die per JOIN eingebunden wird. Das ist dann übersichtlicher, schneller und viel besser pflegbar.
Deinen Schachtelausdruck, selbst wenn er gelingen würde, versteht doch kein Mensch, Du nach einer Woche auch nicht mehr.

Mit freundlichem Glück Auf!

Eberhard

PhilS

Zitat von: KonradR am Februar 24, 2024, 10:12:34möchte ich im Ausdrucksgenerator eine Wenn Funktion bis zu 16x verschachteln.
Argh.
Der Ausdrucksgenerator ist hier nicht das Kernproblem. Du kannst deinen Ausdruck ja auch einfach per Hand schreiben.

Unabhängig von möglichen Einschränkungen des Ausdrucksgenerators, wird das am Ende ein undurchdringbarer Wust, der kaum noch wartbar sein wird.

Ich würde evaluieren, ob du den Ausdruck mit Switch oder Choose nicht einfacher und übersichtlicher gestalten kannst.

Eine zusätzliche Referenztabelle, die du dann über einen Join in deiner Abfrage einbindest, ist evtl. auch eine mögliche Alternative, die den Ausdruck ersetzen und die Wartung deutlich vereinfachen kann.



Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

MzKlMu

Hallo,
Zitat von: PhilSDu kannst deinen Ausdruck ja auch einfach per Hand schreiben.
Soweit ich weiß, gehen auch von Hand nur 7 Ebenen.
Gruß Klaus

KonradR

Zitat von: MzKlMu am Februar 24, 2024, 10:32:34das geht nicht, das ist auf 6-7 Ebenen begrenzt.
Danke, dann komme ich mit dieser Möglichkeit über den Ausdrucksgenerator eine Wenn-Dann-Sonst-Funktion einzugeben nicht weiter.

Zitat von: MzKlMu am Februar 24, 2024, 10:32:34Es gibt aber andere Möglichkeiten.
Spannend. Welche sind das?

Zitat von: MzKlMu am Februar 24, 2024, 10:32:34Oftmals liegt es auch an einem falschen Datenmodel.
Vielleicht. Wie kann ich das herausfinden?

Zitat von: MzKlMu am Februar 24, 2024, 10:32:34Beschreibe dein Vorhaben mal genauer.
Ich habe ein Formular, in dem ich mit einem Kombinationsfeld bis zu 16 (Kochrezept)Einheiten auswählen kann. in einer untergeordneten Tabelle habe ich für jede Zutat ein Feld für das Gewicht einer Einheit vorgesehen. So z.B. Esslöffel, Teelöffel, Messerspitze, Scheibe etc.. Wenn ich jetzt die entsprechende Einheit auswähle, soll der spezifische Nährwert für diese Zutat, abhängig von dessen Menge, also ob es sich um eine Scheibe, einen Esslöffel oder einen Teelöffel etc., handelt ausgerechnet werden. Das mache ich in einer Abfrage. Das Ergebnis zeige ich dann wieder über ein Textfeld im Formular an, in dem ich auf diese Abfrage mit diesem berechneten Feld zurückgreife.




MzKlMu

Hallo,
ZitatWelche sind das?
Die hat PhilS in #3 schon genannt.

Für was Du die Wenn brauchst geht aus Deiner Beschreibung nicht klar hervor.
Zeige mal die Wenn Formel (3-4 Ebenen).
Ich ich denke hier fehlt einfach noch eine Tabelle.
Gruß Klaus

KonradR

Zitat von: ebs17 am Februar 24, 2024, 10:34:53Hat das funktionelle oder ideologische Gründe?
Was verstehst du unter ideologischen Gründen?

Zitat von: ebs17 am Februar 24, 2024, 10:34:53Vorbehaltlich der konkreten Aufgabe löst man solche Wenn-Kaskaden meist gut über eine zusätzliche Tabelle, die per JOIN eingebunden wird. Das ist dann übersichtlicher, schneller und viel besser pflegbar.
Das habe ich, denke ich gemacht. Hier ein Bild meiner Beziehungsstruktur von der dem Formular zugrundeliegenden Abfrage:
Sie dürfen in diesem Board keine Dateianhänge sehen.

Zitat von: ebs17 am Februar 24, 2024, 10:34:53Deinen Schachtelausdruck, selbst wenn er gelingen würde, versteht doch kein Mensch, Du nach einer Woche auch nicht mehr.
Sehe ich auch so. Mir ist das auch zu kompliziert.

PhilS

Zitat von: KonradR am Februar 24, 2024, 11:46:45Tabelle habe ich für jede Zutat ein Feld für das Gewicht einer Einheit vorgesehen. So z.B. Esslöffel, Teelöffel, Messerspitze, Scheibe etc.. Wenn ich jetzt die entsprechende Einheit auswähle, soll der spezifische Nährwert für diese Zutat, abhängig von dessen Menge, also ob es sich um eine Scheibe, einen Esslöffel oder einen Teelöffel etc., handelt ausgerechnet werden. Das mache ich in einer Abfrage.
Wenn du die Tabelle mit den Gewichten pro Einheit in deine Abfrage aufnimmst, bleibt doch aber nur noch eine einfache Berechnung: AnzahlEinheiten * GewichtsfaktorDerEinheit = Gewicht
Wo brauchst du da auch nur ein einziges Wenn-Dann, geschweige denn 16?
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

KonradR

#9
Zitat von: PhilS am Februar 24, 2024, 11:08:33Unabhängig von möglichen Einschränkungen des Ausdrucksgenerators, wird das am Ende ein undurchdringbarer Wust, der kaum noch wartbar sein wird.
Das sehe ich auch so. Es kostet extrem viel Zeit und ist sehr Fehleranfällig.

Zitat von: PhilS am Februar 24, 2024, 11:08:33Ich würde evaluieren, ob du den Ausdruck mit Switch oder Choose nicht einfacher und übersichtlicher gestalten kannst.
Diese Ausdrücke kenn ich noch nicht. Damit werde ich mal etwas näher mit beschäftigen.

Zitat von: PhilS am Februar 24, 2024, 11:08:33Eine zusätzliche Referenztabelle, die du dann über einen Join in deiner Abfrage einbindest, ist evtl. auch eine mögliche Alternative, die den Ausdruck ersetzen und die Wartung deutlich vereinfachen kann.
Danke dafür. Ist das das gleiche, von dem ebs17 geschrieben hat? Das scheint die Lösung zu sein.

KonradR

Zitat von: MzKlMu am Februar 24, 2024, 11:51:44Zeige mal die Wenn Formel (3-4 Ebenen).
Hier ist sie:
KJRezept: Wenn([tblZutatenSammel]![ZutatSammelEinheIDRef]=1;([tblZutatenStamm]![ZutatStammKJ100g]/100)*[tblZutatenSammel]![ZutatSammelMenge];Wenn([tblZutatenSammel]![ZutatSammelEinheIDRef]=2;([tblZutatenStamm]![ZutatStammKJ100g]/100)*[tblZutatenStamm]![ZutatStammGewichtEL]*[tblZutatenSammel]![ZutatSammelMenge];Wenn([tblZutatenSammel]![ZutatSammelEinheIDRef]=3;([tblZutatenStamm]![ZutatStammKJ100g]/100)*[tblZutatenStamm]![ZutatStammGewichtTL]*[tblZutatenSammel]![ZutatSammelMenge];"n.V")))

KonradR

Zitat von: PhilS am Februar 24, 2024, 11:55:34Wo brauchst du da auch nur ein einziges Wenn-Dann, geschweige denn 16?
Das Wenn-Dann unterscheidet ja zwischen der Auswahl aus dem Kombinationsfeld vorher, dass die Einheit festlegt. Eine Scheibe hat ein anderes Gewicht als ein Esslöffel oder ein Teelöffel. Außerdem haben alle Zutaten verschieden Dichten. Meiner Meinung nach, ist es daher am sinnvollsten, die einzelnen Einheiten abzuwiegen, einzugeben und dann später mit der Wenn-Dann-Sonst-Funktion zu rechnen. Wie das mit Gewichtsfaktoren für die einzelnen Einheiten gehen soll, verstehe ich nicht.

MzKlMu

#12
Hallo,
ZitatEine Scheibe hat ein anderes Gewicht als ein Esslöffel oder ein Teelöffel.
Hier ist eine Zuordnungstabelle notwendig, die die Zuordnung zwischen Einheit und Produkt abbildet.
So in etwa:
ID  Einheit  Zutat  Gewicht
 1  Scheibe   Gurke   25
 2  Scheibe   Apfel   35
Scheibe hat noch die Besonderheit, dass auch die Dicke eine Rolle spielt.
Statt der Texte stehen hier normalerweise nur die Schlüsselzahlen.

Über das Datenmodell haben wir schon öfter gesprochen. Hier gibt es garantiert noch Potential für Verbesserungen. Aber das ist mir jetzt zu viel.

Versuche es mit den Vorschlägen in #3. In den Links sind auch Beispiele.

Nachtrag:
Ich habe jetzt erst das Bild mit den Beziehungen gesehen. Die Felder mit dem Gewicht müssen alle aus der Stammtabelle raus. Die Gewichtszuordung Einheit Produkt erfolgt dann über die Zordnungstabelle wie oben beschrieben. Dann wird die Wenn Orgie ersatzlos überflüssig.

Gruß Klaus

KonradR

Zitat von: MzKlMu am Februar 24, 2024, 12:15:34Hier ist eine Zuordnungstabelle notwendig, die die Zuordnung zwischen Einheit und Produkt abbildet.
Meinst du mit "Zuordnungstabelle" eine Tabelle, die als Zwischentabelle dient um eine m:n-Beziehung abbilden zu können? Wie kommst du auf das Wort "Produkt"? Denn das habe ich gar nicht in der Abbildung der Beziehungen der Abfrage drin. Meinst du damit die Zutat, die ich in der Tabelle "tblZutatenStamm" definiert habe?

Zitat von: MzKlMu am Februar 24, 2024, 12:15:34ID  Einheit  Zutat  Gewicht
 1  Scheibe   Gurke   25
 2  Scheibe   Apfel   35
Wenn ich das richtig  verstehe, wären dann die Tabellen "tblEinheiten" und "tblZutatenStamm" so zu verändern, dass die Felder mit den Gewichten in einer Extra Nachschlagetabelle, z.B. "tblZUtatenStammGewicht" separiert werden und beide in einer weiteren Vermittlungstabelle kombiniert bzw. nachgeschlagen werden können? Die Tabellen "tblZutaenSammel" und "tblZutatenStamm" würden aber bestehen bleiben?

MzKlMu

Hallo,
ja, n:m. Mit Produkt habe ich mich vertan, ich meinte natürlich Zutat.

Mache mal die Beziehungen neu und zeige dann das Bild.
Gruß Klaus