DataSet berechnete Spalte Ansatz

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von MichaHo.

    DataSet berechnete Spalte Ansatz

    Hi,
    ich überarbeite gerade eine Anwendung, die den Effizienzgrad der Produktion errechnen soll.
    Nun habe ich eine Tabelle, die zum Teil aus dem SQL Server gefüttert wird.
    In dieser Tabelle gibt es zusätzlich Spalten, die selbst berechnet werden sollen.
    Hier mal die Tabelle:

    Die Spalte StundenBDE und Stunden ATC wird über eine SQL Abfrage gefüllt. Die Spalte taeglEffizienz hat die Expression StundenBDE/StundenATC
    Die Spalte kumEffizienz hat die Expression sumBDE/sumATC.
    Nun finde ich einfach keine Lösung, wie ich die beiden Spalten sumBDE und sumATC berechnen soll, sodass ich damit dann die kumEffizienz errechnen kann.

    Die beiden Spalten sumBDE und sumATC sind quasi die Summe der StundenBDE und StundenATC für den abgefragten Zeitraum.

    Kann ich dies überhaupt über eine Expression bewerkstelligen oder soll ich die Spalten weg lassen und in der Tabellenklasse eine LinQAbfrage erstellen, die mir das aufsummiert?

    Danke Euch für Eure Ideen
    "Hier könnte Ihre Werbung stehen..."
    Hi,
    ich bin zwar ein Stückchen weiter, allerdings nochg nicht am Ziel :(

    hierm mal 2 Ansichten der Tabelle:

    Falsch:
    Richtig:

    Ich muss also erreichen, das die Spalte sumBDE aufsummiert wird. die Formel dazu in Excel würde so aussehen: vorherigerEintrag + jetziger Eintrag aus Spalte StundenBDE
    Die Ansicht aus Falsch habe ich mit diesem Code erstellt:

    VB.NET-Quellcode

    1. Public Sub CalculateKumEffizienz()
    2. Dim sumRows = From rw In Me Where rw.Datum.Month = Date.Today.Month Select rw
    3. For Each row In sumRows
    4. row.sumBDE += row.StundenBDE
    5. Next
    6. End Sub

    Wie kann ich also aufaddieren?
    Danke Euch
    "Hier könnte Ihre Werbung stehen..."
    Hi @us4711. Nee, dann summiert er mir ja jede Zeile und schreibt es in sumBDE rein, wenn ich dann den kumulierten Effizienzgrad berechne, ist der jeden Tag gleich...

    Ich glaub ich muss die 3 Spalten aus der Tabelle raus nehmen und als Propertys in die Klasse erstellen und dann ausserhalb der Tabelle berechnen und anzeigen, wäre das eine Lösung?
    "Hier könnte Ihre Werbung stehen..."
    @MichaHo
    Wo kommt den in der Berechnung von sumXXX der Anfangswert her?
    //EDIT:
    Wenn der Anfangswert in jedem Monat 0 sein sollte, kann so etwas funktionieren:

    VB.NET-Quellcode

    1. Public Sub CalculateKumEffizienz()
    2. Dim _SumBDE as Decimal = 0
    3. Dim _SumATC as Decimal = 0
    4. Dim sumRows = From rw In Me Where rw.Datum.Month = Date.Today.Month Select rw
    5. For Each row In sumRows
    6. _SumBDE+=row.StundenBDE
    7. _SumATC+=row.StundenATC
    8. row.sumBDE=_SumBDE
    9. row.sumATC=_SumATC
    10. Next
    11. End Sub

    Ich glaub' nicht, das dies mit DataExpressions lösbar ist. Eine Referenz zum vorigen Datensatz kann nach meiner Kenntnis nicht angegeben werden.
    Also, die o.a. diskrete Lösung.
    Oder, wenn Du zur Anzeige ein Datagridview verwendest, kannst Du im entsprechenden Event zur Laufzeit die Berechnung durchführen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „us4711“ ()

    Hi
    @us4711 jetzt hast Du, während ich die Antwort schreibe, schon eine ähnliche Lösung, wie ich sie selbst habe... :thumbsup:
    Allerdings hab ich eine Denkblokade im Hirn gehabt. Denn ich lese quasi einen ganzen Zeitraum aus und wollte dann für jeden Tag den kumulierten Wert der Effizienz berechnen, das hat nicht hin gehauen.

    Nun hab ich die Abfrage an den SQL Server umgebaut und frage nur noch den letzten Arbeitstag ab, die Anwendung wird eh jeden Arbeitstag gestartet.
    So kann ich dann auch, wie du oben schon erwähnt hast, mit den berechneten Spalten arbeiten. sum(StundenBDE) und dann in Spalte kumEffizienz sumBDE/sumATC
    Aber ich freue mich, das ich mit meinem Wissen auch auf obige Lösung gekommen bin, nur das ich die beiden Variablen für sumBDE und sumATC als Public Propertys in der Klasse hatte....
    LinQ to Dataset gefällt mir immer besser :)

    Danke Dir, Problem ist erstmal gelöst, melde mich wieder wenns klemmt...
    "Hier könnte Ihre Werbung stehen..."