| |
VB.NET - FortgeschritteneStoerdaten Trendanalyse | | | Autor: ERBRU | Datum: 21.05.17 12:26 |
| 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)("Station") Into Count()
Dim df As New DataTable
df.Columns.Add("Station") : 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" mittels Codeschnipsel wird die Häufigkeit einer Maschine Station oder Störungsart ermittelt
aus einer bestimmten Woche. Nun möchte ich eine "Trendanalyse aus 4 Wochen ermitteln
Ergebnis:
Woche 3,4,5,6 3,4,5,6
als Säulendiagramm
Station1 Station4
im prinzip die Häufigkeit Stationen einer Maschine aus den letzten 4 Wochen nebeneinander gelegt
um zu erkennen Trend runter / rauf
hoffe habt verstanden was ich meine. | |
Re: Stoerdaten Trendanalyse | | | Autor: Manfred X | Datum: 21.05.17 13:19 |
| Hallo!
Du sortierst die Datensätze nach der Häufigkeit.
Das ergibt keinen Trend, sondern z.B. ein Pareto-Diagramm
(Ermittlung von Wochen mit besonderer Häufigkeit).
Um einen Zeit-Trend darzustellen, müssen die Daten gemäß der Abfolge
der Wochen aufbereitet werden.
Für einen statisch signifikant gesicherten Trend benötigt
man gewöhnlich mehr als vier Einzelwerte - es sei man kann plausible
Zusatzanahmen (z.B. Abgleich mit Gegentrends, Verteilungsmodelle) einführen. | |
Re: Stoerdaten Trendanalyse | | | Autor: ERBRU | Datum: 21.05.17 13:38 |
| Wie muss (könnte es denn)umgesetzt werden, ist ja grundsätzlich nicht wirklich falsch das in einer Analyse aufzuzeigen, das es hier und dort verbesserungen in Sicht sind aufgrund von gegensteuern und Maßnahmen.
kannst du helfen? | |
Re: Stoerdaten Trendanalyse | | | Autor: Manfred X | Datum: 21.05.17 13:57 |
| Hallo!
Aus kurzen Zeitreihen (bis 10 Werte) lassen sich kaum Schlußfolgerungen ziehen,
es sei denn, die Störungs-Häufigkeiten würden "explosionsartig" ansteigen.
Dann ist vermutlich an der Anlage etwas kaputt gegangen, verschlissen oder sie
arbeitet mit falschen Einstellungen.
Sinnvoll kann es sein, einen Akzeptanzrahmen zu definieren, d.h. bei bestimmten
Störungen/Dauern wird eine gewisse Häufigkeit pro Zeitraum als "normal" toleriert.
Bei geringfügiger Überschreitung innerhalb eines Zeitraums wird eine Warnung ausgegeben,
bei größerer Überschreitung eine Alarm-Meldung.
Solche Überlegungen erfordern allerdings den Einbezug vielfältiger Erfahrungen mit den
Störungs-Arten, Störungs-Ursachen, Hinweis-Signalen für mögliche Maschinen-Ausfälle und
den damit jeweils verbundenen direkten Folgekosten bzw. den indirekten Wirkungen wie
den Kunden-Reaktionen bei Fehlern/Abweichungen bei den gelieferten Produkten
(Kunden-Toleranz-Niveau).
Ohne nähere Kenntnis Deiner Daten und deren Entstehung/Bedeutung kann man keine gezielten
Hinweise geben. | |
Re: Stoerdaten Trendanalyse | | | Autor: ERBRU | Datum: 21.05.17 14:23 |
| Manfred X schrieb:
Zitat: | |
Ohne nähere Kenntnis Deiner Daten und deren
Entstehung/Bedeutung kann man keine gezielten
Hinweise geben. | |
OK wie könnte ich dir mehr Kenntnis verschaffen?
die Daten werden bei uns manuell erfasst zu grundlegenden Störungsarten (der Eintrag wird so der Störungsart) zugewiesen.
Logistik
Mechanik
Elektrik
SPS
Pneumatik
EDV-PC
Sonstiges
eine Verfügbarkeit von 95% der jeweiligen Maschine wäre damit noch OK bzw. Zielwert je Maschine
lässt sich daraus etwas erstellen? | |
Re: Stoerdaten Trendanalyse | | | Autor: Manfred X | Datum: 21.05.17 14:42 |
| In dem Fall könntest Du vermutlich - unabhängig von der Art der Störung -
die Dauer pro Störung (=Ausfallzeit der Maschine?) innerhalb der
einzelnen Wochen summieren.
Relevant wäre dann die Beurteilung, in wie vielen Wochen ist die
Ausfallzeit (in Minuten) größer als .05 * maximale Produktionsminuten
in der Woche.
Solche auf Klärung von Sachfragen gerichtete Analysen werden schnell kompliziert.
Es muß die Dauer der täglichen (geplanten) Anlagen-Laufzeit einbezogen werden,
ebenso ggf. die Zahl der Feiertage in jeder Woche oder evt. Produktion am
Wochenende bzw. Wochen die z.T. in die Betriebsferien fallen.
Erst daraus lassen sich die Produktionsminuten jeder Woche berechnen und in
Beziehung zu der Summe der Störungsdauern einer Maschine setzen:
Summe der Störungsdauern pro Woche > .05 * Produktionsminuten pro Woche = Warnung | |
Re: Stoerdaten Trendanalyse | | | Autor: ERBRU | Datum: 21.05.17 18:29 |
| Manfred X schrieb:
Zitat: | |
Es muß die Dauer der täglichen (geplanten) Anlagen-Laufzeit
einbezogen werden,
ebenso ggf. die Zahl der Feiertage in jeder Woche oder evt.
Produktion am
Wochenende bzw. Wochen die z.T. in die Betriebsferien fallen.
Erst daraus lassen sich die Produktionsminuten jeder Woche
berechnen und in
Beziehung zu der Summe der Störungsdauern einer Maschine
setzen:
Summe der Störungsdauern pro Woche > .05 *
Produktionsminuten pro Woche = Warnung | |
die täglich bzw. geplante Anlagenlaufzeit beträgt pro Schicht 443 Minuten also 1329 Minuten täglich
nun gut doch wie muss kann es aussehen da müsste ja vorab ein Schichtplan pro Woche her?
unsere Einträge geben folgende Info zurück
Datum | Eintragvon | Anlage | Station | Stoerungsart | Ereigniss | Stördauer | Beginn der Störung (DateTime)| Ende der Störung (DateTime)
Ich Danke dir für die Informationen, wie man das umsetzt fehlt mir sogar der Ansatz, deine Überlegungen sind aber verständlich. | |
Re: Stoerdaten Trendanalyse | | | Autor: Manfred X | Datum: 21.05.17 19:11 |
| Das sind die Probleme der Trend-Untersuchung.
Für aussagekräftige Resultate benötigt man in allen
untersuchten Zeit-Intervallen eine vergleichbare Basis.
Bei Beurteilung des Verlaufs von Betriebs-Störungen bei einer Anlage
kommt es auch darauf an,
- wie lange sie in einer Woche wegen Umrüstung oder Wartung abgeschaltet war,
- wie lange sie in einer Woche wegen niedriger Auftragslage oder fehlender
Vorprodukt-Zulieferung inaktiv war ("just-in-time"-Produktion)
Ich kann nicht beurteilen, wie stark sich diese Einflüße in Deinem Fall
auswirken.
Anlagen, die hohe Stückzahlen produzieren, laufen eventuell wochenlang gleichmäßig
durch; bei der Fertigung von spezialisierten Produkten kann es zu häufigen
Umstellungen mit entsprechenden Standzeiten kommen.
In vielen Betrieben gibt es genaue Aufzeichnungen über die Laufzeit von Anlagen.
Eine Alternative wären anlagenbezogene Listen, die über die Anzahl gefertigter
Produkte/Woche informieren.
Wenn in Deiner Datenbank solche Angaben fehlen, kannst Du eventuell ergänzende
Informationen aus anderen Quellen heranziehen und benötigte Angaben nach-erfassen. | |
Re: Stoerdaten Trendanalyse | | | Autor: ERBRU | Datum: 22.05.17 06:38 |
| Manfred X,
das scheint wohl dein Gebiet zu sein?
sehr informativ, da muss wirklich neu drüber überlegt werden.
inwieweit würde denn ein Topseller Zeitraum von x bis Y Sinn machen, welche Störungsart oder Station
war da in den TOP5, 10, 20 in einem Diagramm. | |
Re: Stoerdaten Trendanalyse | | | Autor: Manfred X | Datum: 22.05.17 09:08 |
| Sinn machen Diagramme, wenn sie auf konkrete Fragestellungen
zugeschnitten und die zugrundeliegenden Daten aussagekräftig
im Sinne dieser Fragestellung sind.
Wie bereits erwähnt, ist die absolute Häufigkeit des Auftretens
einer bestimmten Störung innerhalb eines Zeit-Intervalls
- isoliert betrachtet - nicht informativ (Ausnahme: Ausreißer).
Es werden Bezugsgrößen für die Einordnung der ermittelten Häufigkeiten
benötigt:
- Produktionspläne: Einstellungen der Anlage
- Erfahrungswerte: Toleranzschwellen für Ausfall-Häufigkeit
- Nutzungsintensität: Termindruck -> erhöhte Taktfrequenzen
- Alter der Anlage / Zeitraum seit letzter Wartung
Es kommt darauf an, bezogen auf eine konkrete Fragestellung,
geeignete Zusammenfassungen von Daten und Gewichtungen vorzunehmen.
Der Vergleich von Anlagen kann Hinweise auf Optimierungspotentiale
liefern. Dazu sind vermutlich Daten über längere Zeiträume zu summieren,
um die Vergleichbarkeit der Maschinen im Hinblick auf Auslastung,
Instandhaltungszustand, Bedienpersonal etc. sicher zu stellen.
Bei zeitbezogenen Analysen könnte man prüfen, ob es bei Anlagen Phasen mit
signifikant erhöhten Häufigkeiten (summiert über alle Störungsarten) gab.
Was war in diesen Phasen anders als sonst?
Zweckmäßig ist die Ermittlung von Informationen zu den Bedingungen, unter
denen schwere Störungen oder Häufungen von Störungen aufgetreten sind.
Interessant können Schwankunsanalysen sein. Gab es Phasen, in denen die
Häufigkeit von Störungen im Zeitverlauf relativ stark variierte?
Zu diesem Zweck kann man die Zeitintervalle zwischen je zwei Störungen
bestimmen, die innerhalb einer Betriebsperiode/Schicht aufgetreten sind
(störungs-spezifisch oder -unspezifisch) und sich deren Verteilung
anschauen.
Weitere Hinweise hatte ich bereits in anderen Threads gegeben, z.B.
Einführung von störungs-spezifischen Grenzdauern; die Störungen, die
über der zugehörigen Grenzdauer liegen, wären bei Analysen stärker
zu gewichten als die kurzfristig behebbaren Störungen.
Viele kleine Störungen eines bestimmten Typs sind im Rahmen einer
Optimierung eventuell weniger bedeutsam als einige gravierende. | |
Re: Stoerdaten Trendanalyse | | | Autor: ERBRU | Datum: 22.05.17 18:56 |
| Hallo Manfred X,
das ist mal eine komplette Aufzeichnung die mir durch die Blume sagt das sich weitere Analysen in meinem bisherigen Projekt nicht umsetzen lässt, da es Bspw. keine Produktionspläne integriert sind
zwar eine Stückzahlerfassung die ausgewertet wird über die Taktzeit soll sodass man einen Nutzungsgrad, Leistungsgrad und Qualitätsgrad ermitteln kann daraus den sogenannten OEE ermittelt (auswertet)
ich Danke dir für die ausführliche Beschreibung, und denke das ich da so nicht weiterkomme. Richtig? | |
Re: Stoerdaten Trendanalyse | | | Autor: Manfred X | Datum: 22.05.17 20:09 |
| Nein. So eine Beurteilung kann ich nicht abgeben, weil mir dazu der Einblick fehlt.
Was ich vorschlage ist, zunächst alle verfügbaren Daten zusammenzutragen und zu klären,
welchen Informationsgehalt die verschiedenen Angaben tatsächlich liefern können (incl.
Hinweise zu Erhebungs- und Messfehlern, Datenausfällen, Protokollverlusten, ...)
In einem zweiten Schritt sind Fragestellungen zu entwickeln, die zu einer
geeigneten Aufbereitung dieses Datenmaterials und zu einer darauf aufbauenden
statistischen Analyse führen.
Aus diesen Ergebnissen lassen sich dann Hinweise auf Schwachstellen und auf
Optimierungspotentiale ableiten.
Du schreibst, daß z.B. Stückzahlen und Taktzeiten (pro Zeitintervall?) protokolliert werden.
Du mußt klären, wie sich die verschiedenartigen Informationen aufeinander beziehen
und zu Informationsträgern verdichten lassen.
Bei gezieltem Vorgehen sollte daraus einiges zu ermitteln sein. | |
Re: Stoerdaten Trendanalyse | | | Autor: ERBRU | Datum: 23.05.17 06:39 |
| Danke Manfred X, deinen Vorschlag habe ich noch nicht ganz verstanden.
aber vorab noch etwas anderes: wie kann ich der Abfrage 2 Spalten hinzufügen
1. Prozentueller Anteil von (Count)
2. kummuliert in %
so das man ein Pareto draus machen könnte?
Dim dt As DataTable = TPMDB.Stoerungen
Dim cal As Globalization.Calendar = _
Globalization.CultureInfo.CurrentCulture.Calendar
'Stoerdauer = Reihe.UGruppe.Sum(Function(f) f.Stoerdauer)
'Minuten_Ausfallzeit = If(Störzeiten_Abfrage.Count > 0,
' Störzeiten_Abfrage.ToList.Select(Function(x) x.Stoerdauer).Sum, 0)
'Minuten_Ausfallzeit = BS_Maschinen_Liste.Where(Function(x) x.ID =
' IDMaschine).Select(Function(x) x.Taktzeit).FirstOrDefault
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))
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" | |
Datenaufbereitung für Pareto-Chart | | | Autor: Manfred X | Datum: 23.05.17 07:21 |
| Hallo!
Damit wird das Thema Trendanalyse verlassen.
Die Aufbereitung der Daten für den Pareto-Chart würde ich nicht
in die Linq-Abfrage packen, sondern direkt in der Häufigkeits-
Tabelle vornehmen, an die der Chart später gebunden wird.
In der Tabelle "df" eine zusätzliche Double-Spalte ("Cum") anfügen,
in die die kumulierten Werte der sortierten Spalte "Count" eingetragen
werden.
Für die prozentualen Werte von Count wird ggf. eine weitere
Double-Spalte benötigt.
Sei "bs" die Bindingsource ....
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("Cum") = Math.Round(CInt(row("Cum")) / sm * 100, 2)
'entsprechend für die Spalte "Count"
Next i Die Prozentwerte-Spalten können sich auch durch Expression-Columns
gebildet werden.
Beitrag wurde zuletzt am 23.05.17 um 07:31:04 editiert. | |
Re: Stoerdaten Trendanalyse | | | Autor: ERBRU | Datum: 23.05.17 12:12 |
| das Thema, Analyse habe ich noch nicht wirklich verworfen
So weit verstanden, Manfred
das kummulieren sieht auch plausibel aus, bei der Umrechnung noch einen Haken? und das im richtigen Format % anzeigen?
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("Cum") = Math.Round(CInt(row("Cum")) / sm * 100, 2)
'' 'entsprechend für die Spalte "Count"
''Next i | |
Hinweise zum Pareto-Chart | | | Autor: Manfred X | Datum: 23.05.17 13:07 |
| Der übliche Pareto-Chart besitzt zwei Y-Achsen.
Auf der linken Seite wird die Gesamtsumme der Häufigkeiten als Obergrenze gesetzt:
Chart.AxisY = sm
Auf der rechten Seite wird 100% als Obergrenze gesetzt: Chart.AxisY2 = 100
Die Spalte mit den fallend sortierten Häufigkeiten wird als Chart-Datenserie vom Typ
"Column" der linken Achse zugeordnet: Chart.Series("...").YAxisType = AxisType.Primary
Die Spalte mit den kumulierten und in Prozentwerte umgerechneten Häufigkeiten,
was Du oben auskommentiert hast, wird als ChartType "Line" gebunden und der
rechten Achse zugeordnet: Chart.Series("...").YAxisType = AxisType.Secondary
Beitrag wurde zuletzt am 23.05.17 um 13:11:31 editiert. | |
Re: Stoerdaten Trendanalyse | | | Autor: ERBRU | Datum: 23.05.17 13:42 |
| OK, werde ich dann so probieren ob es mir auch gelingt, haste schon viel geholfen.
zum obigen auskommentierten bin ich unsicher ob es passt habe da eine Spalte Proz hinzugefügt befülle die aber noch garnicht.
da brauche ich dich noch mal | |
Re: Stoerdaten Trendanalyse | | | Autor: ERBRU | Datum: 23.05.17 14:56 |
| 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. | |
Re: Stoerdaten Trendanalyse | | | Autor: ERBRU | Datum: 23.05.17 14:58 |
| Private Function GetFreq1(ByVal week As Integer, _
year As Integer, masch As Integer) As DataTable
Dim Minuten_Ausfallzeit As Integer
'Chart anzeigen
With Chart2
.ChartAreas.Clear()
.Series.Clear()
.Legends.Clear()
.AntiAliasing = AntiAliasingStyles.All
.TextAntiAliasingQuality = TextAntiAliasingQuality.High
.BorderWidth = 2
.Titles.Clear()
.Titles.Add("Titel")
.Titles(0).Text = tbx_SZ_Datumsbereich.Text
.Titles(0).Font = New Font("Thahoma", 10, FontStyle.Regular)
.Titles(0).ForeColor = Color.Blue
.Titles(0).BorderColor = Color.Transparent
.Titles(0).BackColor = Color.Transparent
.Titles(0).Alignment = System.Drawing.ContentAlignment.BottomCenter
.Titles(0).ToolTip = ""
.DataSource = bs
'hier könnte man auch mittels IF Bedingung 3D <> 2D umschalten
.ChartAreas.Add("Base").Area3DStyle.Enable3D = False
'X - Achse
With .ChartAreas("Base").AxisX
.Title = "Bezeichnung"
.TitleForeColor = Color.Black
.IsLabelAutoFit = True
.LabelStyle.Font = New Font("Arial", 10)
.LabelStyle.ForeColor = Color.Black
.LabelStyle.Angle = -45
.Interval = 1
.LineColor = Color.DarkGray
.MajorGrid.LineColor = Color.DarkGray
End With
'Y - Achse
With .ChartAreas("Base").AxisY
.Title = "Anzahl"
.LabelStyle.Font = New Font("Arial", 10)
.TitleForeColor = Color.Black
.LabelStyle.ForeColor = Color.Black
.LineColor = Color.Black
.MajorGrid.LineColor = Color.DarkGray
End With
.Series.Add("Störtyp")
With .Series("Störtyp")
.XValueMember = "ArtderStörung"
.YValueMembers = df.Columns(1).ColumnName
.CustomProperties = "PixelPointWidth = 25"
.BorderWidth = 3
.MarkerBorderWidth = 5
.ChartType = SeriesChartType.Column
.IsValueShownAsLabel = True
.ChartArea = "Base"
End With
.Legends.Add("Default")
.Legends("Default").Alignment = StringAlignment.Center
.Legends("Default").Docking = Docking.Top
.Legends("Default").BackColor = Color.Transparent
.Legends("Default").ForeColor = Color.Black
End With
Return df
End Function | |
Beispiel für Pareto-Chart | | | Autor: Manfred X | Datum: 23.05.17 16:35 |
| Den Code habe ich mir nicht im Detail angeschaut.
Meine Vorschläge zum Pareto-Chart scheinen nicht enigebaut worden zu sein
Hier ein Beispiel (Windows.Forms):
bs: Bindingsource
cht: Chart-Control
Dim dx As New DataTable
With dx.Columns
.Add("ArtderStörung", GetType(String))
.Add("Count", GetType(Integer))
.Add("Cum", GetType(Integer))
.Add("CumPerc", GetType(Double))
End With
'Die Daten
With dx.Rows
.Add("sonstige", 10)
.Add("Mechanik", 3)
.Add("Elektrik", 1)
End With
bs.DataSource = dx
bs.Sort = "Count Desc" 'Häufigkeit fallend sortieren
Dim sm As Integer = 0
For i As Integer = 0 To bs.Count - 1
Dim row As DataRow = DirectCast(bs(i), DataRowView).Row
'Häufigkeiten kumulieren
sm += CInt(row("Count"))
row("cum") = sm
Next i
'Kumulierte Werte in Prozentanteile umrechnen
For i As Integer = 0 To bs.Count - 1
Dim row As DataRow = DirectCast(bs(i), DataRowView).Row
row("CumPerc") = Math.Round(CInt(row("Cum")) / sm * 100, 2)
Next i
With cht
.DataSource = bs
.ChartAreas.Add("Base")
.Titles.Add("Pareto Demo")
'Einrichtung der Achsen
With cht.ChartAreas("Base")
.AxisX.Interval = 1
.AxisY.Title = "Häufigkeit"
.AxisY.Maximum = sm
.AxisY.MajorGrid.Enabled = False
.AxisY2.Title = "Cum. Häufigkeit /Prozent"
.AxisY2.MajorGrid.Interval = 10
.AxisY2.Maximum = 100
End With
'Zuordnung der Tabellenspalten zu Datenserien
.Series.Add("Störungsart")
With .Series("Störungsart")
.ChartType = SeriesChartType.Column
.XValueMember = "ArtderStörung"
.YValueMembers = "Count"
.YAxisType = AxisType.Primary
End With
.Series.Add("Cum")
With .Series("Cum")
.ChartType = SeriesChartType.Line
.XValueMember = "ArtderStörung"
.YValueMembers = "CumPerc"
.YAxisType = AxisType.Secondary
.BorderWidth = 2
End With
End With | |
Re: Beispiel für Pareto-Chart | | | Autor: ERBRU | Datum: 23.05.17 18:17 |
| Fabelhaft hast mir sehr geholfen
Danke! funktioniert super
leider kann man das hier nicht zeigen als Screenchot.
jetzt könnte man evtl. noch in A,B,C gliedern? | |
| 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 |
|
|
TOP! Unser Nr. 1
Neu! sevDataGrid 3.0
Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. 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
|