| |
VB.NET - FortgeschritteneStördauer ermitteln | | | Autor: ERBRU | Datum: 28.04.17 06:46 |
| Hallo zusammen,
erweitern der Function (Manfred X) um Summe Stördauer pro Störtyp.
also die Function ermittelt die in einer Woche angelegenen Störmeldungen
Woche 2 3 x Mechanik, 2x EDV, 1x Elektrik usw. nun möchte ich die Sum(Minuten) dazu ermitteln
ungefähr so:
Woche 2 3 x Mechanik |40Minuten, 2x EDV| 120Minuten, 1x Elektrik|45Minuten
lässt sich das in der Function einbauen? als zusätzliche Spalte für die DGV
Private Function GetFreq1(ByVal week As Integer, _
year As Integer, masch As Integer) As DataTable
Dim dt As DataTable = TPMDB.Stoerungen
Dim cal As Globalization.Calendar = _
Globalization.CultureInfo.CurrentCulture.Calendar
Dim q = From row As DataRow In dt
Let wk As Integer = _
cal.GetWeekOfYear(row.Field(Of Date)("Eintrag"), _
Globalization.CalendarWeekRule.FirstFourDayWeek, _
DayOfWeek.Monday)
Where year = row.Field(Of Date)("Eintrag").Year _
AndAlso wk = week _
AndAlso row.Field(Of Integer)("MaschinenID") = masch
Group By art = row.Field(Of String)("ArtderStörung") Into Count()
Dim df As New DataTable
df.Columns.Add("ArtderStörung") : df.Columns.Add("Count")
For Each el In q
df.Rows.Add(el.art, el.Count)
Next el
Dim bs As New BindingSource With {.DataSource = df}
bs.Sort = "Count DESC"
Return df
End Function | |
Re: Stördauer ermitteln | | | Autor: ERBRU | Datum: 28.04.17 12:38 |
| OK Danke für die Hinweise
doch ich weiß nicht sorecht wo in der Function ich die Summenbildung einbinden muss, soll ja auch plausibel sein, passen.
??? .Sum(Function(f) f.Stoerdauer) Stoerdauer = mein Feld in der Tabelle Störungen bzw. in dt | |
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. | |
Re: Stördauer ermitteln | | | Autor: ERBRU | Datum: 28.04.17 14:43 |
| das hätte ich bestimmt nicht so hinbekommen, ich Danke dir wie verrückt.
melde mich noch einmal ob es dann auch funktioniert hat. | |
Re: Stördauer ermitteln | | | Autor: ERBRU | Datum: 28.04.17 19:11 |
| Hallo Manfred X,
Hat Super geklappt ist eine Liste mit vielen Spalten
art As Integer = row.Field(Of Integer)("Störung Art") habe ich als string deklariert da die Spalte ein String und kein Integer Wert hat.
Danke | |
Re: Stördauer ermitteln | | | Autor: ERBRU | Datum: 28.04.17 19:13 |
| mit dem Link muss ich mich mal ordentlich befassen | |
Re: Stördauer ermitteln | | | Autor: ERBRU | Datum: 29.04.17 10:45 |
| Info für mitlesende
diese Frage '?????????????? Spalte redundant von Manfred X, ist ein wichtiger Baustein in der Abfrage
musste erfahren wenn dem nicht so ist, funktioniert die Abfrage nur bedingt.
habe meine Daten bereinigt und siehe da, es funktioniert nun plausibel und nachvollziebar.
also wer das mal benutzt dran denken 'das die entsprechende Spalte redundant ist sonst klappt das nicht
in diesem Fall muss der String "Störungsart" immer Bspw. "nicht zugeordenet" immer so geschrieben werden, dann ist alles Gut. Bei mir war es so das der String mal so oder so geschrieben war. In meinem Projekt habe ich die Störungsart nun als Auswahl dem User angeboten der verwendete String wird so immer redundant sein.
Danke Manfred X | |
| 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 |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats 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 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
|
|