hier mal mein Ergebnis Manfred X,
ArtderStörung Count Cum Proz
sonstige 10 10 71,43
Mechanik 3 13 92,86
Elektrik 1 14 100 hier ist der 1. Code Teil
nun soll daraus ein Pareto werden, wenn Ergebnis passt.
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", GetType( _
Integer)) : df.Columns.Add("Cum", GetType(Double)) _
: df.Columns.Add("Proz", GetType( _
Double))
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" 'Häufigkeiten fallend sortieren
Dim sm As Integer = 0 'Summations-Variable
For i As Integer = 0 To bs.Count - 1
'Zugriff auf sortierte Zeilen über die Bindingsource
Dim row As DataRow = DirectCast(bs(i), DataRowView).Row
'Häufigkeiten kumulieren
sm += CInt(row("Count"))
row("Cum") = sm
Next i
'in Prozentanteile umrechnen
For i As Integer = 0 To bs.Count - 1
Dim row As DataRow = DirectCast(bs(i), DataRowView).Row
row("Proz") = Math.Round(CInt(row("Cum")) / sm * 100, 2)
'entsprechend für die Spalte "Count"
Next i
If bs.Count <> 1 Then
lbl_Stoerdaten_KW_Info.Text = String.Concat(bs.Count & " Einträge" & _
"gefunden").ToString
Else
lbl_Stoerdaten_KW_Info.Text = String.Concat(bs.Count & " Eintrag" & _
"gefunden").ToString
End If
'Daten in der DGV anzeigen
dgv_Stoerdaten_Auswertung_KW.DataSource = bs
With dgv_Stoerdaten_Auswertung_KW
.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnsMode.Fill
.Columns(1).Width = 60
End With
With dgv_Stoerdaten_Auswertung_KW
.EnableHeadersVisualStyles = False
.ColumnHeadersDefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleCenter
.ColumnHeadersDefaultCellStyle.BackColor = Color.DimGray
.ColumnHeadersDefaultCellStyle.ForeColor = Color.FloralWhite
.BackgroundColor = Color.LightGray
.Font = New Font("Consolas;", 9.5, FontStyle.Regular)
.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single
.ColumnHeadersHeight = 38
.ColumnHeadersHeightSizeMode = _
DataGridViewColumnHeadersHeightSizeMode.DisableResizing
.RowHeadersVisible = False
'.GridColor = System.Drawing.Color.DarkBlue
.GridColor = System.Drawing.Color.DarkGray
.SelectionMode = DataGridViewSelectionMode.FullRowSelect
.DefaultCellStyle.WrapMode = DataGridViewTriState.True
.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
End With
With dgv_Stoerdaten_Auswertung_KW.DefaultCellStyle
.SelectionForeColor = Color.OldLace
.SelectionBackColor = Color.Olive
.BackColor = Color.LightGray
.ForeColor = Color.Black
.Font = New Font("Consolas;", 8.0, FontStyle.Regular)
End With
With dgv_Stoerdaten_Auswertung_KW.AlternatingRowsDefaultCellStyle
.SelectionForeColor = Color.OldLace
.SelectionBackColor = Color.Olive
.BackColor = Color.WhiteSmoke
.ForeColor = Color.Black
.Font = New Font("Consolas;", 8.0, FontStyle.Regular)
End With
'Ende Auswertung Code 2. Teil in neuer Antwort, aufgrund der größe
Beitrag wurde zuletzt am 23.05.17 um 15:00:57 editiert. |