| |
VB.NET - FortgeschritteneDemo 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. | |
| 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 |
|
|
sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
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
|
|