Está en la página 1de 8

Graficas Estadsticas en VB.

NET 2010 con instrucciones SQL

Para trabajar con graficas estadsticas en VB.NET 2010 y el objeto ChartControl, lo


podemos realizar utilizando:

Cuadros de texto, ingresando el nombre de la serie y los puntos o valores


para la seria.

Listas, creando una lista para las series y los valores.

Vectores o Arrays, alimentando la grafica a travs de vectores que


almacenan la informacin al igual como lo haramos mediante listas.

Instrucciones SQL, crear una solicitud de datos mediante la instruccin


Select-SQL, la cual la ejecutamos mediante el objeto comando y
almacenamos el resultado de registros en un DataReader, para despus
enlazar estos datos con la grafica a travs del mtodo DataBindTable. Caso
de estudio # 2 para esta publicacin.

Haciendo una compilacin de los anteriores para enlazarlos en la grafica a


travs del mtodo DataBindCrossTable, el cual solicita el origen de datos del
que alimentara la grafica, el nombre del campo usado para agrupar los datos
de la serie, nombre del campo para los valores X, lista separada por comas
de nombres de los campos para los valores Y; y otras propiedades de puntos
de datos que se pueden enlazar.

Cmo funciona el objeto ChartControl, al presentar una grafica estadstica?


El objeto Chart Control est compuesto por una coleccin (tiene un comportamiento
como los vectores o array) de propiedades, mtodos y eventos que permiten la
construccin del mismo, entre ellos tenemos:
1. ChartAreas: Es de tipo coleccin permite crear la zona donde se visualizara
el grafico, esta se puede dividir en ms de un rea para colocar graficas en
cada una de ellas. En el rea del grafico se puede configurar para mostrar en
forma 3D o 2D mediante la propiedad Enable3DStyle.
2. Series: Es de tipo coleccin, cada serie tiene la propiedad ChartType, que
determina el tipo de grafico que estar contenido en un ChartArea, los tipos
de grficos pueden ser, Pastel, Barras, Columnas, Lneas, reas, Puntos y
otros grficos que soporta el objeto ChartControl. Las series se pueden
agrupar en un solo ChartArea para crear una grafica comparativa en tipos de
grafico (Barras, Columnas, Lneas, reas y Puntos). No puede adjuntar dos
series en una grafica de tipo Pastel.
3. Las series en su interior tiene una coleccin de propiedades llamada puntos
(Point, tambin una coleccin), estos son los valores que toma la grafica si
es de columnas seria la altura que mostrara la barra.
4. Titles: Es de tipo coleccin, que permite agregar el titulo a una grafica
Una coleccin tiene mtodos Add, Clear que permiten agregar y limpiar el
contenido de un array o vector (en nuestro caso de estudio las propiedades
ChartAreas, Series, Point y Title son de tipo coleccion; por tanto tienen metodos
Add y Clear)

Cmo enlazar un objeto ChartControl con un DataSet para crear una grafica?
El enlace de datos simple de una tabla a un control grfico se puede lograr
utilizando el mtodo Chart.DataBindTable (requiere que un esquema de tablas
exista antes de hacer el enlace). Las series y puntos se crean automticamente y se
agregan al control grfico basado en el nmero de columnas del origen de datos.
Para este ejemplo usaremos una tabla de nombre Empresas, creada en Access, en
esta tabla se almacena la informacin de una ficha para encuesta de empresas, y
tiene la siguiente estructura:
Nombre de tabla: Empresas
Campo
Tipo
IdEmpresa
Autonum
Propietario
Texto
Empresa
Texto
Telefono
Numero
Celular
Numero
Direccion
Texto
Correo
Texto
Actividad
Texto
Constituido
Texto
Asociacin
Texto
Financiamiento
Texto
Asesoria
Texto
Distribucion
Texto
Observaciones
Turismo
Caficultura
Agroindustria
Ganaderia
Artesanias
Horticultura
Pisicultura
Ecoturismo
Apiario
Floricultura
Otros
Ninguno

Texto
Si/No
Si/No
Si/No
Si/No
Si/No
Si/No
Si/No
Si/No
Si/No
Si/No
Si/No
Si/No

Opcin de seleccin nica


Actividad Comercial
Cmo est constituida?
Est dispuesto a asociarse con otros?
Tiene acceso al sistema financiero?
Le han asesorado tcnicamente?
Conoce de canales de distribucin?

Opcin de seleccin mltiple, mediante


CheckBox en el formulario

Programar las graficas estadsticas para las preguntas Cul es la actividad


comercial de la empresa?, Cmo est constituida la empresa?, Est dispuesto a
asociarse con otras personas?, Tiene acceso al sistema financiero Nacional?, Ha
recibido asesora tcnica?, Tiene conocimiento sobre canales de distribucin?; se
debe escribir una instruccin SQL de resumen que obtiene el numero de respuestas
de esa pregunta (Select Actividad, count(Actividad) as Total from Empresas group
by Actividad), y se genera la fuente de datos para mostrar la grafica, este paso es
igual para las dems preguntas solo cambiando el nombre del campo.
Pero en las opciones de seleccin mltiple como lo es la pregunta En qu otras
actividades comerciales desea invertir?, aqu se debe contar el nmero de
empresas que han marcado por cada una de las opciones, en casos como estos que
se quiere crear la grafica estadstica de Actividades comerciales a invertir, se
debe programar para alimentar el esquema de tablas en el DataSet de VB.NET,
para generar la grafica que muestre el nmero de empresas que piensan invertir en
Turismo, Ecoturismo, etc..
Para tal fin comenzaremos por el formulario, las propiedades que deber modificar
sern:
Propiedad
Valor

Name
MinimizeBo
x
StartPositio
n
Text

frmGraficaporActividades
False
CenterScreen

Grafica de Actividades comerciales a


invertir
Al Formulario agregue el objeto Button, del Cuadro de Herramientas, seccin
Controles comunes, y cambie las siguientes propiedades:
Propiedad
Valor
Name
Cmdactualizar
Anchor
Bottom, Right
Text
Actualizar
La propiedad Anchor es para que el objeto al que se configura, mantenga la
posicin al maximizar o restaurar el formulario.
El tipo de grafica a mostrar es pastel, al generar la grafica se mostraran los valores
de cada categora, el objeto ChartControl cuenta con una propiedad dentro de las
series para que los valores de la grafica se muestren en porcentaje, pero la suma de
este porcentaje no resulta en 100%, por tanto agregare un cdigo que permita esa
opcin, mientras tanto agregue un objeto CheckBox del Cuadro de
Herramientas, seccin Controles comunes, y modifique las siguientes
propiedades:
Propiedad
Valor
Name
chkPorcentajes
Anchor
Bottom, Right
Text
Ver Porcentajes
Cuando la propiedad Checked de este objeto se encuentre activada (True),
entonces la grafica mostrara los porcentajes representativos de cada pieza del
pastel, ahora agregue el objeto Chart del Cuadro de Herramientas, seccin
Datos, y modifique las propiedades:
Propiedad
Valor
Name
oGrafico
Anchor
Top, Bottom, Left, Righ
Su formulario debe tener un aspecto como el de la siguiente imagen:

Ahora procederemos a configurar el conjunto de datos que alimentara la grafica,


para esto abra su DataSet, sino tiene uno haga el nuevo DataSet y le escribe el

nombre dsTablas, dentro del DataSet, clic derecho en una zona limpia y
selecciona Agregar/Table de Datos, al objeto nuevo que se ha creado llmele
EmpresasGrafico, cambiando la propiedad Name de la ventana de propiedades.
Luego haga clic derecho sobre la tabla creada y selecciones Agregar/Columna, a
la columna llmele Categoria y su tipo de dato (DataType) ser System.String
todo desde la ventana de propiedades, despus de eso, haga clic derecho sobre la
Columna Categoria y selecciona Agregar/Clave, se aparecer una ventana en la cual
deber cambiar algunos datos como se muestra en la imagen.

Una vez hecha la clave principal, agregue una nueva columna y le llama Total, con
tipo de dato System.Int16.
Si no se configura la clave principal, no se podr hacer uso del mtodo Find( ) del
objeto DataRow

La siguiente imagen muestra como deber quedar su conjunto de datos dentro del
DataSet.
Una vez configurado el formulario y la tabla dentro del conjunto de datos,
procedemos a programar el cdigo para crear la grafica, pero recuerde que siempre,
para programar se debe tener un camino a seguir para llegar a la solucin.
Cabe recordar que para generar las graficas donde la pregunta es seleccin nica
(en las respuestas), se realiza con la instruccin SQL-Select (Select Actividad,
count(Actividad) as Total from Empresas group by Actividad), y esta creara una
tabla de informacin para la grafica donde muestra:
Actividad Total
Si
##
Pero para construir nuestra grafica de Actividades comerciales a invertir, nuestra
tabla de datos deber quedar formada de la siguiente forma:
Categori
Total
a
Turismo
##
Caficultur
##
a

Ganaderi
##
a
.
.
.
.
.
.
Para crear una tabla de informacin con los datos anteriores, usaremos la
instruccin SQL-Select (Select Turismo, count(Turismo) as Total from Empresas
group by Turismo), y los datos devueltos por esta instruccin se almacenaran en la
tabla del DataSet, EmpresasGrafico, y luego continuaremos de la misma forma solo
que cambiando la actividad comercial, todo esto se puede hacer manualmente,
pero Cmo actualizar los datos del grafico cuando se agregue nueva informacin a
la tabla?, si se est construyendo una aplicacin, se debe de programar todo el
cdigo necesario para construir la grafica, y para ello seguiremos un procedimiento
o secuencia de pasos que nos ayudaran a formar nuestra grafica estadstica.
1.
Realizar un array o vector donde se almacenen todos los rubros (Turismo,
Caficultura, )
2.
Crear un ciclo repetitivo que recorra el array o vector de los rubros.
2.1. Crear una instruccin SQL-Select que obtenga los datos de cada uno de los rubros
por separado.
2.2. Alimentar los datos del DataSet con los datos devueltos por la instruccin SQLSelect de cada rubro.
3.
Generar la grafica.
Procedimiento:
Haga clic derecho sobre el formulario y seleccione la opcin Ver Cdigo, y antes
del comando Public Class frmGraficaporActividades, presione la tecla ENTER y
escriba
Imports System.Data.OleDb
Esta lnea de cdigo es para adjuntar referencias a la librera de clases OleDb, la
cual nos permite objetos para trabajar con tablas de Access.
Durante el procedimiento haremos uso del Objeto DataRow, el cual representa una
fila primaria de una tabla, a la cual se le pueden asignar valores para agregar o
actualizar en la tabla. Un DataRow tiene una estructura de la tabla, en nuestro caso
de la tabla EmpresasGrafico, y se representa de la siguiente forma:
Categori Total
a
Informacin
que
guarda
el
DataRow
Luego presione las teclas Shift + F7, para ir a la parte grafica del formulario, y
estando aqu, haga doble clic sobre el botn actualizar y escriba el siguiente cdigo:
'Crear la cadena de conexion y abrir una conexion de datos con la BD Empresas
Dim Cadena As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=C:\IIIBTC_2012\Registro_de_Empresas.accdb"
Dim oConexion As New OleDbConnection(Cadena)
oConexion.Open()
'Limpiar el contenido del DataSet para la nueva informacion
DsTablas.EmpresasGrafico.Clear()
'Paso 1, Array con todos los rubros
Dim aRubros As String() = {"Turismo", "Caficultura", "Ganaderia", "Artesanias",
"Horticultura", "Pisicultura", "Ecoturismo", "Apiario", "Floricultura", "Otros",
"Ninguno"}
'Variable para estar cambiando la instruccin SQL
Dim cSQL As String = ""

'Paso 2, Ciclo repetitivo que recorre el array


For i As Integer = 0 To aRubros.Length - 1
'Paso 2.1, Crear un Select para obtener los datos segun cada rubro
cSQL = "Select " & aRubros(i) & ", count(" & aRubros(i) & ") as Total from
Empresas where " & aRubros(i) & "= true group by " & aRubros(i)
Dim oComando As New OleDbCommand(cSQL, oConexion)
Dim lector As OleDbDataReader = oComando.ExecuteReader
'El objeto DataRow es usado para representar una fila primaria, en nuestro caso
con la
'estructura de la tabla EmpresasGrafico, para las columnas Categoria y Total
Dim Fila As DataRow = DsTablas.EmpresasGrafico.NewRow
If lector.Read Then
If lector("Total") <> 0 Then
'Asignar los valores a cada campo, el del Rubro y # Total para ese rubro
Fila("Categoria") = aRubros(i)
Fila("Total") = lector("Total")
'Paso 2.2 Alimentar el DataSet con los datos de cada rubro
DsTablas.EmpresasGrafico.Rows.Add(Fila)
'Guardar los valores y convertirlos a porcentajes si as se desea
Valores(i) = lector("Total")
'Esta variable fue creada como array despus de la declaracin Public Class
End If 'End if para la condicin lector(Total)<> 0
End If 'End if para la condicin lector.Read()
Next
'Aplicar cambios al DataSet
DsTablas.EmpresasGrafico.AcceptChanges()
'Cerrar conexin de datos
oConexion.Close()
'Limpiar el contenido del grafico antes de enlazar con los nuevos datos
oGrafico.Series.Clear()
oGrafico.Titles.Clear()
'Activar las opciones para visualizar la grafica en 3D
oGrafico.ChartAreas(0).Area3DStyle.Enable3D = True
'Agregar el titulo de la grafica
oGrafico.Titles.Add("Otras actividades comerciales a invertir")
'Cambiar el tipo de letra para la grafica
oGrafico.Titles(0).Font = New Font("Tahoma", 15, FontStyle.Bold)
'Cambiar opciones de rotacin y profundidad de la grafica en 3D
oGrafico.ChartAreas(0).Area3DStyle.Rotation = 20
oGrafico.ChartAreas(0).Area3DStyle.PointDepth = 75
oGrafico.ChartAreas(0).Area3DStyle.PointGapDepth = 35
'Paso 3, Generar la grafica, enlazando a travs del mtodo DataBindTable
oGrafico.DataBindTable(EmpresasGraficoBindingSource, "Categoria")
'EmpresasGraficoBindingSource proporciona el enlace a de datos a la grafica
' Categoria, permite dar el nombre a cada pieza del pastel
'adems que estas categoras son mostradas como rtulos en la leyenda de la
grafica
'Cambiar el tipo de grafico a Pastel
oGrafico.Series(0).ChartType = DataVisualization.Charting.SeriesChartType.Pie

'Mostrar como etiqueta de datos, los valores totales que alimentan la grafica
oGrafico.Series(0).IsValueShownAsLabel = True
La declaracin del Array Valores, esta creada de la siguiente forma, y usted la
deber ubicar en el lugar que le corresponde como se muestra en la imagen

Creo que explicar cada lnea de cdigo del botn Actualizar seria redundante,
debido a que rotule cada una Asi que solo explicara la
Como el usuario puede pedir que se muestren los porcentajes que representa cada
pieza del pastel, se agrego el CheckBox Ver Porcentajes para tal fin, vuelva a la
parte grafica del formulario (Shift + F7) y haga doble clic sobre el CheckBox Ver
Porcentajes, y en el editor de cdigo escriba las siguientes lneas:
Dim aRubros As String() = {"Turismo", "Caficultura", "Ganaderia", "Artesanias",
"Horticultura", "Pisicultura", "Ecoturismo", "Apiario", "Floricultura", "Otros",
"Ninguno"}
Dim Sumatoria As Integer = 0
'Obtener 1ro una sumatoria de todos los valores visualizados en la grafica
For i As Integer = 0 To Valores.Count - 1
Sumatoria += Valores(i)
Next
If chkPocentajes.Checked = True Then
'Se trabajara con la actualizacion de los totales en el dataset
For i As Integer = 0 To aRubros.Count - 1
Dim Fila As DataRow
'Se buscara cada uno de los rubros para obtener el porcentaje que representa
' en la grafica, para eso se hizo la clave principal Categoria
Fila = DsTablas.EmpresasGrafico.Rows.Find(aRubros(i))
If Fila IsNot Nothing Then
'Si se ha encontrado la categoria, entonces se calcula el porcentaje
Fila("Total") = (Int(Fila("Total")) / Sumatoria) * 100
End If
Next
oGrafico.Series.Clear()
oGrafico.Titles.Clear()
oGrafico.ChartAreas(0).Area3DStyle.Enable3D = True
oGrafico.Titles.Add("Otras actividades comerciales a invertir, valores en
porcentajes")
oGrafico.Titles(0).Font = New Font("Tahoma", 15, FontStyle.Bold)
oGrafico.ChartAreas(0).Area3DStyle.Rotation = 20
oGrafico.ChartAreas(0).Area3DStyle.PointDepth = 75
oGrafico.ChartAreas(0).Area3DStyle.PointGapDepth = 35
DsTablas.EmpresasGrafico.AcceptChanges()
oGrafico.DataBindTable(EmpresasGraficoBindingSource, "Categoria")
oGrafico.Series(0).ChartType = DataVisualization.Charting.SeriesChartType.Pie
oGrafico.Series(0).IsValueShownAsLabel = True
Else
Call cmdActualizar_Click(Nothing, Nothing)
'Si el usuario no quiere porcentajes, se hace el llamado del evento clic del botn
Actualizar
End If

Ahora si, usted puede compilar su formulario presionando la combinacion de teclas


Ctrl + F5, siempre utilice esta combinacion de teclas para compilar y ejecutar su
formulario, ya que si solo presiona F5 su formulario no sera compilado y puede que
se esten produciendo errores de los que no se dara cuenta.
Ademas recuerde estas lineas de codigo pueden variar, es importante que usted
sepa lo que est haciendo o tratando de hacer con cada una de ellas, ya que ningun
programa es igual con otro, al igual que las soluciones con las operaciones
matemticas, existen muchos caminos para llegar a la solucion, solo es que usted
elija el indicado.

"Las Matemticas no son un recorrido prudente por una autopista despejada, sino
un viaje a un terreno salvaje y extrao, en el cual los exploradores se pierden a
menudo."