OK habe da noch eine spezielle Frage zum Thema Stoerdatenanalyse.
wenn kein Chart hier Sinnvoll ist, wie wäre es mit eine Information für den User welche Einträge da überschritten sind. Also entweder kann der User eine Auflistung der betroffenden Einträge in eine DGV
zusammengestellt bekommen, oder evtl. den Datensatz per doppelklick anspringen. Geht das? oder ist das auch Sinnlos für weitere analysen?
ich habe es nun so in meiner Anwendung eingebaut, passt soweit. Die DGV gefällt mir persönlich noch nicht wirklich ist noch unschön weiß gerade nicht wie man die aufhübschen könnte.
das ist der komplette Auswerte Prozess:
Private Sub btn_Stoerdaten_Auswerten_Click(sender As Object, e As EventArgs) _
Handles btn_Stoerdaten_Auswerten.Click
If BS_SB_Stoerungen_TypRow Is Nothing Then Return
'Variabeln
Dim Grenzwert As Integer = CInt(nud_Ziel_Stoerdauer.Value)
Dim year_selected As Integer = CInt(cboYear.SelectedItem)
Dim masch_selected As Integer = CInt(cbx_Maschine.SelectedValue)
'Funktion aufrufen
GetErrorsInWeeks(year_selected, masch_selected, Grenzwert)
End Sub
Private Function GetErrorsInWeeks(year As Integer, masch As Integer, _
mininterval 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.AsEnumerable
Where IsFullRow(row) AndAlso _
row.Field(Of Date)("Eintrag").Year = year AndAlso _
row.Field(Of Integer)("MaschinenID") = masch
Let wk As Integer = _
cal.GetWeekOfYear(row.Field(Of Date)("Eintrag"), _
Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Monday), _
art As String = row.Field(Of String)("ArtderStörung"), _
minint As Boolean = _
row.Field(Of Integer)("Stoerdauer") >= mininterval
Group By wk, art, minint Into Count()
Order By wk, art, minint
Dim df As New DataTable
With df.Columns
.Add("Woche in " & year.ToString)
.Add("Art der Störung")
.Add(mininterval.ToString & " Min. überschritten?", GetType( _
Boolean))
.Add("Häufigkeit", GetType(Integer))
End With
For Each el In q
df.Rows.Add(el.wk, el.art, el.minint, el.Count)
Next el
Dim bs As New BindingSource With {.DataSource = df}
If bs.Count = 0 Then
lbl_Stoerdatenanalyse_Info.Text = String.Concat(bs.Count & " keine" & _
"Einträge gefunden").ToString
Else
lbl_Stoerdatenanalyse_Info.Text = String.Concat(bs.Count & "" & _
"Einträge gefunden").ToString
End If
'Daten in der DGV anzeigen
dgv_Stoerdatenanalyse_Grenzwert.DataSource = bs
'Ende Auswertung
Return df
End Function
Private Function IsFullRow(row As DataRow) As Boolean
'Filtert Zeilen mit fehlenden Werten
For i As Integer = 0 To row.ItemArray.Length - 1
If IsDBNull(row(i)) Then Return False
Next i
Return True
End Function PS Manfred X, kannst du mir noch kurz diese Funktion erklären?
macht ja sinn das ich die verstehe. Oder ist es Richtig das die Funktion prüft ob es in der DB Tabelle fehlende Werte gibt?
Private Function IsFullRow(row As DataRow) As Boolean
'Filtert Zeilen mit fehlenden Werten
For i As Integer = 0 To row.ItemArray.Length - 1
If IsDBNull(row(i)) Then Return False
Next i
Return True
End Function |