vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Demo für Linq: Group + Aggregate 
Autor: Manfred X
Datum: 28.04.17 13:07

Erläuterung für Mitlesende:
Es gibt eine Tabelle (dt) in der in jeder Zeile eine Störung verzeichnet ist:
gestörte Maschine, Art der Störung, Zeitpunkt, Dauer u.a.

Es soll nun für ein bestimmtes Jahr/eine bestimmte Maschine
eine Wochenauflistung gebildet werden, die pro Woche (Zeile)
für jede Störungs-Art die Gesamtdauer und die Häufigkeit enthält.

(Durch die Routine "IsFullRow" werden alle Sätze erkannt,
die DBNull-Werte enthalten.)

Private Function GetErrorsInWeeks _
        (year As Integer, masch As Integer) As DataTable
 
    Dim cal As Globalization.Calendar = _
        Globalization.CultureInfo.CurrentCulture.Calendar
 
    Dim df As New DataTable
 
    Dim q = _
        From row As DataRow In dt.AsEnumerable
           Where IsFullRow(row) AndAlso _
              row.Field(Of Date)("Störung Zeit").Year = year AndAlso _
              row.Field(Of Integer)("Maschine ID") = masch
              Let wk As Integer = _
                  cal.GetWeekOfYear(row.Field(Of Date)("Störung Zeit"), _
                  Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Monday), _
                  art As Integer = row.Field(Of Integer)("Störung Art") _
           Group row By GroupKeys = New With {Key wk, Key art} _
           Into Group
           Order By GroupKeys.wk, GroupKeys.art
           Select New With _
                {.week = GroupKeys.wk, .art = GroupKeys.art, _
                 .sum = Group.Sum(Function(row As DataRow) _
                            row.Field(Of Integer)("Störung Dauer")), _
                 .max = Group.Max(Function(row As DataRow) _
                            row.Field(Of Integer)("Störung Dauer")),
                 .count25 = Group.Count(Function(row As DataRow) _
                            If(CInt(row.Field(Of Integer)("Störung Dauer")) _
                            > 25, _
                            True, False)), _
                 .count = Group.Count}
 
    'sortierte Auflistung der Störungsarten
    Dim arts = From row In dt.AsEnumerable _
                 Select art = row.Field(Of Integer)("Störung Art") _
                 Distinct Order By art
 
    'Spalten für Störungsarten erstellen
    With df.Columns
       .Add("Woche")
       For i As Integer = 0 To arts.Count - 1
          .Add(arts(i).ToString)
          .Add(arts(i) & " Summe Dauer")
          .Add(arts(i) & " Anzahl")
       Next i
    End With
 
    'eine Zeile für jede Woche im Jahr erstellen
    With df.Rows
       For i As Integer = 1 To 53
          df.Rows.Add(i)
       Next i
    End With
 
    df.PrimaryKey = {df.Columns(0)}
 
    'Auflistung (anonymer Typ) in Tabelle übertragen 
    For Each el In q
       Dim row As DataRow = df.Rows.Find(el.week)
       Dim i As Integer = df.Columns.IndexOf(el.art.ToString)
       row(i) = el.art '?????????????? Spalte redundant
       row(i + 1) = el.sum   'Summe der Störungsdauern
       row(i + 2) = el.count 'Anzahl der Störungen
    Next el
 
    Return df
End Function


Beitrag wurde zuletzt am 28.04.17 um 13:24:03 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Stördauer ermitteln1.391ERBRU28.04.17 06:46
Re: Stördauer ermitteln1.117Manfred X28.04.17 09:41
Re: Stördauer ermitteln813ERBRU28.04.17 12:38
Demo für Linq: Group + Aggregate840Manfred X28.04.17 13:07
Re: Demo für Linq: Group + Aggregate875Manfred X28.04.17 15:18
Re: Stördauer ermitteln802ERBRU28.04.17 14:43
Re: Stördauer ermitteln911ERBRU28.04.17 19:11
Re: Stördauer ermitteln843ERBRU28.04.17 19:13
Re: Stördauer ermitteln809ERBRU29.04.17 10:45

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel