Lär dig skriva snygga rapporter i ASP
Förord
Du har säkert sett massor av stiliga rapporter som kan skrivas ut förrut, så med lite fantasi kan du faktiskt bygga snygga och fungerande rapporter med lite trix. Jag tänkte försöka mig på en rapport som har grafiskt gränssnitt i sig (kanske lite överdrivet)- men att skapa en rapport som ser snygg ut på skärmen. För att du skall kunna använda sådana rapporter- bör du ha en databas som innehåller sådan information att den går att summera. Exempel på detta kan vara besök/dag eller som i detta fall, en presentation om hurvida användare tycker att kurser är skrivna.
Att börja planera
Det första jag tänkte att vi skulle börja med är att bygga en liten gif-bild som vi kan använda till graf. Du kan egentligen använda dig av vilken grafisk editor som du vill, men jag har fastnat för PaintShop Pro. Dels för att den är lättanvänd, men även för att den är gratis. Du kan själv hämta hem en version från Jasc Inc. Vi behöver bygga en bild som är i storleksordning 5x10 pixlar och därefter färglägga den med någon färg.
Hur skall vår rapport se ut
* Här är ett exempel på en tänkvärd rapport som du ser ovan, jag har angett kursens nummer, antalet röster som räknats samt att jag använder den lilla gifbilden för att presentera ett läge mellan 0 och 100%. Jag har ritat tabellen på ett sådant sätt att 300 pixlar symboliserar 100% och 150 pixlar blir därmed 50%.
Formel för presentationen
Nu kan vi börja med att fundera hur rapporten skall se ut. Eftersom vi skall visa hur förhållandet mellan mycket bra och dåligt skall visas, så väljer vi att om alla har sagt att kursen är mycket bra betyder det 100%, men om resultatet istället visar på att alla tyckte kursen var dålig, då skall det vara 0%.
Lite matematik: (2=Mycket bra, 1=Bra, 0=Dålig) Genom att använda en selectsats kan vi snabbt få fram den informationen vi behöver för att kunna bestämma storleken på varje graf.
Med denna sql-sats får vi en summerad post per kurs och därmed kan vi reda ut detta genom att skriva en liten ASP-test på hur det ser ut när man kör.
<%
Sqlmsg = "select " & _
" kursnr, " & _
" sum(betyg) as summa, " & _
" count(betyg) as antal from kurs " & _
"group by kursnr "
' kör SQL scriptet
Rst.Open Sqlmsg, con , , , adCmdText
%>
Sql-satsen får nu en post per kurs som innehåller kursnummer, och en summering på av alla betyg samt antal registrerade betyg. Med denna så använder vi antal och multiplicerar det med 2 eftersom vi vill veta vad det högsta värdet hade varit om alla hade varit (2 = Mycket bra). Sist räknar du ut hur många procent som det var. För att sedan få ut bredden på linjen tar du och räknar hur mycket är exempelvis 62% av 300 pixlar. Genom att sätta vädet width på bit.gif till x pixlar- får du din rapport.
Presentationen
Resultatet i sqlsatsen gör nu att vi kan plotta ut en bar för varje kurs för att symbolisera vad användarna tycker om denna.
Do While NOT (Rst.EOF Or Rst.BOF)
summa = Rst("summa")
antal = Rst("antal") * 2
Percent = (summa/antal) * 100
PixWidth = 300 * abs(percent)/100
Response.Write ""
Response.Write " " & Rst("kursnr") & " "
Response.Write " " & antal/2 &"/" & summa & " "
Response.Write " "
Response.Write " "
Rst.MoveNext
Loop
Genom att först få reda på antalet betyg så multipliceras antalet med 2 för att få fram ett maxvärde. Därefter räknas det procentuella betyget ut. Slutligen tar vi reda på hur stor del av 300 pixlar denna procent symboliserar. Därefter använder vi detta värdet för att sätta gifbildens bredd till det antalet pixlar som räknats ut med .
Hela programmet
Mer än så var det inte. Nu avslutar vi allting med att presentera hela koden så om du vill använda den till egna projekt så går det bra. Du får kopiera denna fritt och använda det för privat bruk. Respektera att referera till mig om du använder den i något annat syfte.
Statistikrapport på kurser
Sammanställning av resultat för respektive kurser
Kursnr
Röster
0%
50%
100%
<%
' program : demo_report.asp
' kallas från : manuellt
' syfte : listar betygsättning av kurser grafiskt
' (c) 1999, Pelle Johansson, www.pellesoft.se
Const adCmdText = 1
' initierar ADO kontrollen
Set con = server.createobject("ADODB.Connection")
Set rst = server.createobject("ADODB.Recordset")
' Öppnar en anslutning till databasen som är satt i DSN
con.Open "system"
' förbereder SQLsats att göra en summering i
' tabellen kurs/databas system.mdb
sqlmsg = "select kursnr, sum(betyg) as summa, count(betyg) as antal from kurs "
sqlmsg = sqlmsg & "group by kursnr "
' kör SQL scriptet
Rst.Open sqlmsg, con , , , adCmdText
Do While NOT (Rst.EOF Or Rst.BOF)
summa = Rst("summa")
antal = Rst("antal") * 2
Percent = (summa/antal) * 100
PixWidth = 300 * abs(percent)/100
Response.Write ""
Response.Write " " & Rst("kursnr") & " "
Response.Write " " & antal/2 &"/" & summa & " "
Response.Write " "
Response.Write " "
Rst.MoveNext
Loop
Rst.Close
' stänger och tar bort recordset och connection
' från serverns arbetsminne
con.close
set rst=NOTHING
set con=NOTHING
%>
0 Kommentarer