'生成图表
Dim Chart As New ChartBuilder '定义一个图表变量
Dim Series As WinForm.ChartSeries '定义一个图系变量
Chart.SeriesList.Clear() '清除图表原来的图系
Chart.HeaderText = "设备分时在线率"
Dim projects As List(Of String) = DataTables("ssls_make_device_status_count").GetValues("PROJECT")
For Each project As String In projects
Series = Chart.SeriesList.Add() '每个项目一个图系
Series.DataLabelText = "{#YVAL:0.00%}"
Dim ln As String = project
Dim fdr As DataRow = DataTables("ssls_dw_project").Find("PROJECT_ID='" & project & "'")
If fdr IsNot Nothing Then
ln = fdr("PROJECT_NAME")
End If
Series.Text = ln '指定图系名称为项目(到时改名称)
Dim sjs As List(Of String) = DataTables("ssls_make_device_status_count").GetValues("sj", "", "sj")
Dim x As Integer = 4 '每个8个点取一个
Series.Length = sjs.count \ x '指定图系的数据点数
' Output.Logs("调试日志").Add(Series.Length)
' Output.Logs("调试日志").Save(ProjectPath & "logs\调试日志" + format(Date.today, "yyyy-MM-dd") + ".txt", True)
Dim i As Integer = 0
Dim j As Integer = 0
For Each sj As String In sjs
If (j Mod x) = 0 Then
Series.X(i) = i '指定水平坐标为月份
Chart.AxisX.SetValueLabel(i, sj.SubString(11, 5)) '指定字符表示
Dim p As DataRow = DataTables("ssls_make_device_status_count").Find("PROJECT = '" & project & "' And SJ = '" & sj & "' And lx = '总数'")
Dim it As Integer = 0
If p IsNot Nothing Then
it = p("COUNT(PRODUCTION)")
End If
Dim zx As Integer = 0
p = DataTables("ssls_make_device_status_count").Find("PROJECT = '" & project & "' And SJ = '" & SJ & "' And lx = '在线'")
If p IsNot Nothing Then
zx = p("COUNT(PRODUCTION)")
End If
If it > 0 AndAlso zx > 0 Then
Series.Y(i) = zx / it '指定数量作为垂直坐标
Else
Series.Y(i) = 0 '指定数量作为垂直坐标
End If
' Output.Logs("调试日志").Add(Series.Y(i))
' Output.Logs("调试日志").Save(ProjectPath & "logs\调试日志" + format(Date.today, "yyyy-MM-dd") + ".txt", True)
i = i + 1
End If
j = j + 1
' Series.TooltipText = "X = {#XVAL}, Y = {#YVAL}"
Next
Next
Chart.AxisX.AnnoWithLabels = True '启用字符标示
Chart.LegendVisible = True '显示图列
Chart.LegendCompass = CompassEnum.South '图列显示在南方(底端)
Chart.AxisY.AnnoFormatString = "0%"
Chart.PrintWidth = 120
Chart.PrintHeight = 70
'打印图表
Dim rm As New prt.RenderImage
rm.Image = Chart.Image
doc.Body.Children.Add(rm)