Grenzwerte und einen Trend in einem Diagramm anzeigen
Zeichnen Sie ein Toleranzband und einen Mindestwert in ein Diagramm ein, zeigen Sie mehrere Messstellen als je eine Reihe, zählen Sie Datensätze pro Monat als Säulen, und lesen Sie die Steigung und das Datum ab, an dem ein Grenzwert erreicht wird.
Voraussetzungen: WKL Forms Object Library 1.60 oder höher.
Lösungsüberblick
AddReference FromValue, [ToValue], [Caption], [Kind]fügt eine Grenzlinie (ein Wert) oder ein Band (zwei Werte) in der Farbe einer Statusart hinzu (wskOk,wskWarn,wskBad,wskInfo). Die Werteachse schließt immer jeden Grenzwert und jedes Band ein.ClearReferencesentfernt sie alle.- Breite oder lange Daten:
YFields = "Wand;Soll"ergibt eine Reihe je Feld;YFields = "Wand"mitSeriesField = "Stelle"ergibt eine Reihe je Wert vonStelle. - Zusammenfassen:
Aggregate(wcaSum,wcaAverage,wcaCount,wcaMin,wcaMax) gruppiert zusammen mitPeriod(wcyDay…wcyYear) eine Datumsachse.wcaCountbraucht kein Y-Feld. - Trend: Mit
ShowTrend = Trueerhält jede Reihe eine gestrichelte Ausgleichsgerade nach der Methode der kleinsten Quadrate.TrendSlope(i)ist die Änderung je X-Einheit (auf einer Datumsachse je Tag),TrendReaches(i, Value)das Datum, an dem die GeradeValueerreicht, oderNull.
Umsetzung
Alle drei Diagramme werden in Form_Load eines Formulars mit den WKL-Chart-Steuerelementen chtWand, chtAlle und
chtMonat eingerichtet. Die Tabellen sind die des Tutorials
(Eine Messreihe mit Grenze und Trend anzeigen), dazu eine Abfrage qryMessStelle
(SELECT tblMess.Datum, tblMess.Wand, tblStelle.Name AS Stelle FROM tblMess INNER JOIN tblStelle ON tblMess.StelleID = tblStelle.ID).
Option Compare Database
Option Explicit
Private Sub Form_Load()
On Error GoTo ErrorHandler
' One point with its tolerance band and minimum.
With Me!chtWand.Object
.RecordSource = "SELECT Datum, Wand FROM tblMess WHERE StelleID = 1"
.XField = "Datum"
.YFields = "Wand"
.ShowTrend = True
.ClearReferences
.AddReference 9, 10, "Toleranz", wskOk
.AddReference 8.5, , "Soll-min", wskBad
End With
' All points, one series each, from long data.
With Me!chtAlle.Object
.RecordSource = "qryMessStelle"
.XField = "Datum"
.YFields = "Wand"
.SeriesField = "Stelle"
End With
' Measurements per year as columns.
With Me!chtMonat.Object
.RecordSource = "tblMess"
.XField = "Datum"
.ChartType = wctColumn
.Aggregate = wcaCount
.Period = wcyYear
End With
FinalHandler:
Exit Sub
ErrorHandler:
MsgBox Err.Description, vbExclamation
Resume FinalHandler
End Sub
Private Sub chtWand_DataLoaded(ByVal Points As Long)
On Error GoTo ErrorHandler
' Slope per day, shown per year; the date the minimum is reached, or Null.
Debug.Print "Pro Jahr: "; Format(Me!chtWand.Object.TrendSlope(0) * 365.25, "0.00"); " mm"
Debug.Print "Soll-min am: "; Nz(Me!chtWand.Object.TrendReaches(0, 8.5), "nie")
FinalHandler:
Exit Sub
ErrorHandler:
Debug.Print Err.Description
Resume FinalHandler
End Sub
Hinweise
- Werden die Eigenschaften nacheinander gesetzt, liest das Diagramm die Daten nach jeder Änderung neu. Ein zwischenzeitliches
DataLoadedmit einemLastErrorist normal, solange die Einstellungen unvollständig sind. Wer sie in der Entwurfsansicht (oder im Designer) setzt, vermeidet das. - Eine Zeile ohne lesbaren X-Wert wird nicht gezeichnet;
RowsWithoutXzählt sie. - Ein fehlender Y-Wert unterbricht die Linie (
Missing = wcvGap);wcvConnectlässt den Punkt aus,wcvZerozählt ihn als 0. Ein Zeitraum ganz ohne Wert ist eine Lücke, nicht 0. - Mehr als 2.000 Punkte auf einer Linie werden für die Darstellung verdichtet, und das Diagramm weist darauf hin; Trend und Achse verwenden alle Werte.
- Ein Klick auf einen Legendeneintrag blendet dessen Reihe aus oder ein (
SeriesVisible); ein Klick auf einen Punkt löstPointClick(Series, X, Y)aus.
Verwandte Themen
- WklChart: der vollständige Vertrag.
de/wiki/msaccess/comctl/how-to/show-limits-and-a-trend-in-a-chart.txt · Zuletzt geändert: von Wolfgang van der Stille