La página Web de Emilio Sancha - MVP 2006/11
La página Web de Emilio Sancha

Inicio    |   Access    |   Excel    |    Visual Script    |   Enlaces    |   Búsquedas    |   Apuntes    |   Libro de Visitas

Suscripcion RSS

Gráficos en consultas SQL Access
Vaya por delante que la idea no es mía, hace unos días entre en el "Access Team Blog" y vi una imagen que me hizo pensar "¿cómo es posible no se me haya ocurrido antes?"

Me puse manos a la obra y funcionó a la primera, no exactamente igual, porque empecé a hacer las pruebas con el carácter ASCII 219 y ese no se ve en las consultas, así que lo cambié por un asterisco y funcionó, "de lujo", como dicen los andaluces.

Mi primera prueba fue está, la verdad es que no es ninguna preciosidad, pero si ilustrativa de la idea, se basa como en muchos de mis ejemplos en la base de datos Neptuno.
SELECT Clientes.País, Sum([Cantidad]*[PrecioUnidad]) AS Importe, String(Sum([cantidad]*[preciounidad])/3000, "*") AS Barra
FROM (Clientes
INNER JOIN Pedidos ON Clientes.IdCliente = Pedidos.IdCliente)
INNER JOIN [Detalles de pedidos]
ON Pedidos.IdPedido = [Detalles de pedidos].IdPedido
GROUP BY Clientes.País


Como ves solo se trata de jugar con la función VBA String y construir una cadena con un determinado carácter dándole el tamaño que queramos representar.

No me quedó mas remedio que entrar a ver el articulo de Mike Alexander (Excel MVP) para averiguar que él utilizaba el carácter Unicode 9608.

Después preparé esto otro mucho mas gráfico, ejecuta las siguientes sentencias SQL para crear la tabla y añadir los datos.
CREATE TABLE tblVentas
(Zona TEXT (25) CONSTRAINT PrimaryKey PRIMARY KEY, Ventas DOUBLE);
INSERT INTO tblVentas ( Zona, Ventas ) SELECT "Santander" AS Zona, 10000 AS Ventas;
INSERT INTO tblVentas ( Zona, Ventas ) SELECT "Huelva" AS Zona, 6000 AS Ventas;
INSERT INTO tblVentas ( Zona, Ventas ) SELECT "Tarragona" AS Zona, 8000 AS Ventas;
INSERT INTO tblVentas ( Zona, Ventas ) SELECT "Madrid" AS Zona, 12000 AS Ventas;
INSERT INTO tblVentas ( Zona, Ventas ) SELECT "Barcelona" AS Zona, 4000 AS Ventas;
INSERT INTO tblVentas ( Zona, Ventas ) SELECT "Burgos" AS Zona, 5000 AS Ventas;

Ahora ejecuta esta consulta, a ver que pasa
SELECT tblVentas.Zona, tblVentas.Ventas, String([Ventas]/DSum("Ventas","tblVentas")*100,Chrw(9608)) AS Barra
FROM tblVentas
GROUP BY tblVentas.Zona, tblVentas.Ventas



No está mal, ¿no?

Por último me puse a investigar sobre los caracteres con que podemos trabajar, hay un puñado de ellos, solo 65536, pero claro la inmensa mayoría no sirve para esto, pueden valer los siguientes: 8717, 9000, 9600, 9604, 9608, 9612, 9619, 9632, 9644, 9646, 9703, 10073, 10074, 65517, caray, ya me cansé de escribir, así que cada cual que escoja el que mas le guste

'*********************************************************************
'* CaracteresUnicode
'* crea una tabla "tblUnicode", si fuera necesario, y la rellena con
'* todos los caracteres Unicode
'* uso: CaracteresUnicode
'* Si utilizas este código, respeta la autoría y los créditos
'* ESH 19/03/09 18:45
'*********************************************************************
 
Public Sub CaracteresUnicode()
Dim strCadena As String, _
    i As Long, _
    strSQL As String
 
DoCmd.Hourglass True
If DCount("Name", "MSysObjects", "Name = 'tblUnicode' AND Type = 1") = 0 Then
   strSQL = "CREATE TABLE tblUnicode"
   strSQL = strSQL & " (Numero INTEGER CONSTRAINT PrimaryKey PRIMARY KEY, Caracter Text(1))"
Else
   If MsgBox("Se va a proceder al borrado de la tabla tblUnicode, ¿Continuar?", vbYesNo + vbQuestion, "Atención Pregunta") = vbNo Then Exit Sub
   strSQL = "DELETE FROM tblUnicode"
End If
 
CurrentDb.Execute strSQL, dbFailOnError
 
For i = 1 To 2 ^ 16 - 1
   strSQL = "INSERT INTO tblUnicode ( Numero, Caracter )"
   strSQL = strSQL & " SELECT " & i & ", '" & Replace(Replace(ChrW(i), "'", "''"), Chr(34), """") & "'"
   CurrentDb.Execute strSQL, dbFailOnError
Next i
DoCmd.Hourglass False
End Sub        ' CaracteresUnicode
 

así podrás ver todos y elegir el que mas te guste..., como verás mas adelante, todo es cuestión de echarle imaginación. 

Por ejemplo, aquí va otra prueba

SELECT Zona,Ventas, String([Ventas] /DSum("Ventas","tblVentas")*100,Chrw(10121 + DCount("Zona", "tblVentas", "Ventas > " & [Ventas])+1)) AS Barra
FROM tblVentas
GROUP BY Zona, Ventas




Ah, se me olvidaba, se puede ordenar la columna en cuestión.

Mas leña al fuego, ejecuta las siguientes sentencias SQL para crear la tabla y añadir los datos.

CREATE TABLE tblVentas (Zona TEXT (25), Ventas DOUBLE, Fecha DATE);
INSERT INTO tblVentas ( Zona, Ventas, Fecha )
SELECT "Santander" AS Zona, 10000 AS Ventas, #01/01/09#;
INSERT INTO tblVentas ( Zona, Ventas, Fecha )
SELECT "Huelva" AS Zona, 6000 AS Ventas, #01/01/09#;
INSERT INTO tblVentas ( Zona, Ventas, Fecha )
SELECT "Tarragona" AS Zona, 8000 AS Ventas, #01/01/09#;
INSERT INTO tblVentas ( Zona, Ventas, Fecha )
SELECT "Madrid" AS Zona, 12000 AS Ventas, #01/01/09#;
INSERT INTO tblVentas ( Zona, Ventas, Fecha )
SELECT "Barcelona" AS Zona, 4000 AS Ventas, #01/01/09#;
INSERT INTO tblVentas ( Zona, Ventas, Fecha )
SELECT "Burgos" AS Zona, 5000 AS Ventas, #01/01/09#;
INSERT INTO tblVentas ( Zona, Ventas, Fecha )
SELECT "Santander" AS Zona, 14000 AS Ventas, #02/01/09#;
INSERT INTO tblVentas ( Zona, Ventas, Fecha )
SELECT "Huelva" AS Zona, 7000 AS Ventas, #02/01/09#;
INSERT INTO tblVentas ( Zona, Ventas, Fecha )
SELECT "Tarragona" AS Zona, 7000 AS Ventas, #02/01/09#;
INSERT INTO tblVentas ( Zona, Ventas, Fecha )
SELECT "Madrid" AS Zona, 13000 AS Ventas, #02/01/09#;
INSERT INTO tblVentas ( Zona, Ventas, Fecha )
SELECT "Barcelona" AS Zona, 3000 AS Ventas, #02/01/09#;
INSERT INTO tblVentas ( Zona, Ventas, Fecha )
SELECT "Burgos" AS Zona, 4000 AS Ventas, #02/01/09#;

Guarda esta otra consulta como tblVentas_Tabla de referencias cruzadas
TRANSFORM Sum(tblVentas.Ventas) AS SumaDeVentas SELECT tblVentas.Zona
FROM tblVentas
GROUP BY tblVentas.Zona
PIVOT Format([Fecha],"mmm") In ("ene","feb")

y ejecuta esta otra
SELECT Zona, Ene, Feb, iif([Feb]-[Ene] >0,String([Feb]/1000, Chrw(9658)), String([Feb]/1000, Chrw(9668))) AS Barra
FROM [tblVentas_Tabla de referencias cruzadas]
GROUP BY Zona, Feb, Ene




Ahí va otra, pero esta te dejo reconstruirla a ti.


¿Quién necesita de MS Project, teniendo Access?  

Emilio Sancha 22/03/09


SELECT Fase, Comienzo, Fin, String(([Comienzo]-DMin("Comienzo","tblProyecto"))/7,chrw(32)) & String(([Fin]-[Comienzo])/7,chrw(9608)) AS Barra
FROM tblProyecto


 


  • NOTA: La información contenida en esta página, así como el código fuente incluido en la misma, se proporciona TAL CUAL, sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo explicado, recomendado o sugerido en la presenta página.

    This page is provided AS IS with no warranties, and confers no rights. You assume all risk for your use.

    Ultima actualización:  Sábado, 15 de Octubre de 2016
    © Emilio Sancha 2.004-2.016