1 2 Previous Next 19 Replies Latest reply on Feb 13, 2015 2:14 AM by dennisf.

    Feldberechnung

    dennisf.

      Hallo Zusammen,

       

      ich hätte da nochmals ein kleines Problem

      Ich habe ein neues Layout erstellt, welches ich z. B. Auswertung nenne. Auf diesem möchte ich mir schnell ein Überblick über diverse Zahlen schaffen. Z. B. auch die gefahrenen Einsätze in einem Monat.

       

      Ich habe ein Feld angelegt, welches AnzahlEinsätzeJanuar heisst. Dieses soll wie folgt automatisch berechnet werden.

      In den einzelnen Datensätzen gibt es ein Feld, AnzahlEinsatz (diese wird mit der Anzahl des jeweiligen Auftrags gefüllt, z. B. 5), ein Feld Auftragsmonat (z. B. = Januar) und ein Feld Auftragsjahr (z. B. = 2015).

      Nun soll die Berechnung sein: -> SUMME AnzahlEinsatz wo gleichzeitig Auftragsmonat = Januar und Auftragsjahr = 2015

       

      -> Wie kann ich dies am einfachsten lösen?

       

      Gegenüberstellen möchte ich hier auch das Vorjahr. Hier habe ich ein Feld erstellt, welches sich AnzahlEinsätzeJanuarVorjahr heisst.

      Hier dachte ich an eine Formel mit Auftragsjahr = Hole (systemdatum) -1? würde dies funktionieren?

       

      Besten Dank für eure Hilfe.

      Gruss Dennis

        • 1. Re: Feldberechnung
          siplus

          Hallo Dennis,

           

          definiere mal 3 globale Variabeln, gMonat, gJahr und gEinsatz. Stelle sie auf dem Layout.

           

          Dann noch ein Button, der nix andres macht als

           

          SetField[gEinsatz; ExecuteSQL("SELECT SUM(AnzahlEinsatz) FROM Datensaetze WHERE Auftragsmonat = ? AND Auftragsjahr = ?"; "";""; gMonat; gJahr)

           

          wobei Datensaetze = Deine Datentabelle-Name.

           

          gMonat und gJahr ausfüllen, auf Button clicken.

          • 2. Re: Feldberechnung
            dennisf.

            Hallo,

             

            kann ich das ganze nicht ohne Angabe der Monate/Jahre machen?

            Quasi automatisch?

            Ich habe ja alle Daten da. Müsste dann doch wie folgt das Formelfeld automatisch berechnen, oder?

            SQLAusführen("SELECT SUM(Einsätze) FROM Tabelle WHERE Auftragsmonat = Januar AND Auftragsjahr = HoleSystemDatum"; "";"")

             

            Leider funktioniert dies nicht?

            • 3. Re: Feldberechnung
              erolst

              dennisf. wrote:

              SQLAusführen("SELECT SUM(Einsätze) FROM Tabelle WHERE Auftragsmonat = Januar AND Auftragsjahr = HoleSystemDatum"; "";"")

               

              Leider funktioniert dies nicht?

               

              Das funktioniert aus div. Gründen nicht:

               

              1) FileMaker Funktionen können nicht innerhalb des SQL Codes ausgeführt werden (ist reiner Text)

              2) die Funktion heißt (auf Deutsch ) 'Hole ( Systemdatum )'

              3) eine Jahreszahl ist kein Datumswert (JahrX ist niemals DatumY)

              4) Strings im SQL Code müssen in (einzelnen) Anführungszeichen stehen

              5) bestimmte (Schlüssel-)Wörter, oder Wörter mit bestimmten (Sonder-)Zeichen müssen in Anführungszeichen stehen (diesmal doppelte …)

               

              Probiere mal

               

              ExecuteSQL ( "

                SELECT SUM ( \"Einsätze\" )

                FROM Tabelle

                WHERE

                  Auftragsmonat = 'Januar' AND

                  Auftragsjahr = " & Year ( Get ( CurrentDate ) )

                ; "" ; ""

              )

               

              oder (mit eingefügten Parametern, wobei 1. '?' = 1. Parameter, 2. '?' = 2. Parameter etc.)

               

              ExecuteSQL ( "

                SELECT SUM ( \"Einsätze\" )

                FROM Tabelle

                WHERE

                  Auftragsmonat = ? AND

                  Auftragsjahr = ?

                " ; "" ; "" ; "Januar" ; Year ( Get ( CurrentDate ) )

              )


              Für das andere Feld könntest du dann Year ( Get ( CurrentDate ) ) - 1 verwenden.


              dennisf. wrote:

              kann ich das ganze nicht ohne Angabe der Monate/Jahre machen?

              Quasi automatisch?


              Siplus wollte dir zeigen, wie du mittels Parametern (Feldern) nicht nur den Januar des aktuellen Jahres, sondern beliebige Monate beliebiger Jahre auswerten und gegenüberstellen kannst, ohne jedes Mal einen Satz neuer Felder anlegen zu müssen.

              • 4. Re: Feldberechnung
                siplus

                Was ich meinte findest du im Anhang.

                • 5. Re: Feldberechnung
                  dennisf.

                  Mmmhh, komisch. Irgendetwas muss ich falsch machen

                  Ich habe den 2. SQL Befehl exakt identisch eingegeben (natürlich mit der richtigen Tabelle und den Feldern ) und in meinem erstellten Feld AnzahlEinsätzeJanuar, wo die Berechnung stattfinden soll, steht nur ein ?

                   

                  Was mach ich denn falsch?

                  • 6. Re: Feldberechnung
                    siplus

                    dennisf. wrote:

                     

                    Mmmhh, komisch. Irgendetwas muss ich falsch machen

                    Ich habe den 2. SQL Befehl exakt identisch eingegeben (natürlich mit der richtigen Tabelle und den Feldern ) und in meinem erstellten Feld AnzahlEinsätzeJanuar, wo die Berechnung stattfinden soll, steht nur ein ?

                     

                    Was mach ich denn falsch?

                     

                     

                    Wahrscheinlich Umläute in Namen.

                    • 7. Re: Feldberechnung
                      erolst

                      dennisf. wrote:

                      Was mach ich denn falsch?

                       

                      Wenn du eine solche Frage stellst, solltest du immer deinen Code posten (oder eine Kopie / einen Clone deiner Datei).

                      • 8. Re: Feldberechnung
                        erolst

                        siplus wrote:

                        Umläute

                        Wass'n das?

                        • 9. Re: Feldberechnung
                          siplus

                          Umlaute mit Umlaut

                          • 10. Re: Feldberechnung
                            erolst

                            siplus wrote:

                            Umlaute mit Umlaut

                             

                            Wohl eine Umläutung  …

                            • 11. Re: Feldberechnung
                              dennisf.

                              Nee Umlaute hab ich keine drin

                              Hier der Befehl:

                               

                              SQLAusführen ( "

                                SELECT SUM ( \"Einsaetze\" )

                                FROM Auftraege

                                WHERE

                                  Auftragsmonat = ? AND

                                  Auftragsjahr = ?

                                " ; "" ; "" ; "Januar" ; Jahreszahl ( Hole ( SystemDatum ) )

                              )

                               

                              Wie gesagt steht nur das Feld JahresvergleichJanuarAktuell auf dem Layout und mein Button mit dem SQL. Ergebnis bei Klick ist ein ? oder Leer im Feld?

                              • 12. Re: Feldberechnung
                                erolst

                                dennisf. wrote:

                                SQLAusführen ( "

                                  SELECT SUM ( \"Einsaetze\" )

                                  FROM Auftraege

                                  WHERE

                                    Auftragsmonat = ? AND

                                    Auftragsjahr = ?

                                  " ; "" ; "" ; "Januar" ; Jahreszahl ( Hole ( SystemDatum ) )

                                )

                                Sind 'Einsaetze' und 'Auftraege' die exakten Feldnamen?

                                 

                                Wenn dein Feld tatsächlich 'Einsätze' heißt, musst du es in Anführungszeichen setzen – es bringt nichts, es als 'Einsaetze' zu referenzieren, wenn es diesen Feldnamen nicht gibt.

                                dennisf. wrote:

                                Ergebnis bei Klick ist ein ? oder Leer im Feld?

                                Du bekommst immer ein '?', wenn der Befehl ungültig ist (s.o.), ansonsten das Ergebnis der Abfrage (das natürlich leer sein kann) – aber das eine oder andere ist eher nicht möglich.

                                • 13. Re: Feldberechnung
                                  dennisf.

                                  Ja das Feld heisst Einsatze und die Tabelle heisst Auftrage.

                                  Beide stehen jeweils in einfachen Anführungszeichen.

                                  • 14. Re: Feldberechnung
                                    erolst

                                    dennisf. wrote:

                                    SQLAusführen ( "

                                      SELECT SUM ( \"Einsaetze\" )

                                    dennisf. wrote:

                                    Ja das Feld heisst Einsatze und die Tabelle heisst Auftrage.

                                    Beide stehen jeweils in einfachen Anführungszeichen.

                                     

                                    Die beiden Aussagen passen irgendwie nicht zusammen …

                                     

                                    Bei Feld- und Tabellennamen musst du doppelte Anführungszeichen verwenden; einfache Anführungszeichen sind für Textwerte ("Strings"): Das sähe beispielsweise so aus:

                                     

                                    ExecuteSQL ( "

                                      SELECT SUM ( \"meinExakterFeldNameMitSönderzeichen\" )

                                      FROM \"einTabellenAuftretenMitSönderzeichen\"

                                      WHERE irgendeinTextFeld = 'irgendeinWert'

                                      " ; "" ; ""

                                    )

                                     

                                    Aber wie oben gezeigt, kannst du Abfragewerte mit Hilfe der Parameterersetzung einführen; dann kümmert sich die Funktion selbst um diese kleinen Details.

                                     

                                    ExecuteSQL  ("

                                      …

                                      WHERE irgendeinTextFeld = ?

                                      " ; "" ; "" ; einGültigerAusdruckInFileMakerSyntax

                                    )

                                     

                                    Wenn dir das alles nicht weiterhilft, poste deine Datei.

                                    1 2 Previous Next