|
La
página Web de Emilio Sancha
|
|
|
Inicio | Access | Excel | Visual Script | Enlaces | Búsquedas | Apuntes | Libro de Visitas |
![]() |
| 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 |
|
|
|
|
'*********************************************************************
'* 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 |
||