Kexi/Tutorials/Drilling Down on Facebook Data/da: Difference between revisions

    From KDE UserBase Wiki
    (Importing a new version from external source)
    No edit summary
     
    (41 intermediate revisions by 2 users not shown)
    Line 1: Line 1:
    <languages />
    <languages />
    {{Note/da|Selv om denne artikel blev offentliggjort mens Kexi .2 var den aktuelle version, så skulle den kunne bruges uden problemer med Kexi 2.4.}}
    {{Note/da|Selv om denne artikel blev offentliggjort mens Kexi 2.2 var den aktuelle version, så skulle den kunne bruges uden problemer med nyere udgaver af Kexi.}}


    == Introduktion ==
    == Introduktion ==


    Dene artikel tager en ny bruger igennem en række begreber i '''Kexi''', '''Koffices''' program til håndtering af databaser. '''Kexis''' funktioner går fra simpel oprettelse af tabeller og forespørgsler til mere avanceret rapportering og scriptning. '''Kexi''' er netop blevet udgivet som en del af '''KOffice 2.2'''. Denne artikel er rettet mod nye brugere og eksisterende brugere af '''Kexi 1.6''' som en demonstration af, hvor brugbar '''Kexi''' kan være.
    Dene artikel tager en ny bruger igennem en række begreber i '''Kexi''', '''Calligras''' program til håndtering af databaser. '''Kexis''' funktioner går fra simpel oprettelse af tabeller og forespørgsler til mere avanceret rapportering og scriptning. Denne artikel er rettet mod nye brugere og eksisterende brugere som en demonstration af, hvor brugbar '''Kexi''' kan være.


    '''Kexi 2''' har været 3 år i udvikling for at komme fra '''Kexi 1.6''' til den nuværende tilstand og nåede ikke at komme med i udgivelserne af '''KOffice 2.0''' og '''2.1''' på grund af det lille antal udviklere. Helt i open-source-ånden arbejder '''Kexis''' udviklere i deres fritid som en hobby. Det håbes, at denne første udgave nu er stabil nok til at blive brugt og vil være noget, det kan bygges videre på i fremtidige udgivelser.
    '''Kexi 2''' har været 3 år i udvikling for at komme fra '''Kexi 1.6''' til den nuværende tilstand og nåede ikke at komme med i udgivelserne af '''KOffice 2.0''' og '''2.1''' på grund af det lille antal udviklere. Helt i open-source-ånden arbejder '''Kexis''' udviklere i deres fritid som en hobby. Det håbes, at denne første udgave nu er stabil nok til at blive brugt og vil være noget, det kan bygges videre på i fremtidige udgivelser.
    Line 16: Line 16:
    == Første skridt, lav en database og tabel ==
    == Første skridt, lav en database og tabel ==


    Hvis '''Kexi''' ikke er inkluderet i din installation, så se om den er tilgængelig som en opdatering i din pakkehåndtering. Hvis ikke, så skal du installere den fra kilden ved at følge vejledningerne på '''KOffices'''<ref>[http://wiki.koffice.org/index.php?title=Building/Building_KOffice Building_KOffice]</ref> websted og KDE's wikier<ref>[http://techbase.kde.org/Getting_Started/Build/KDE4 Build KDE4]</ref>.
    Hvis '''Kexi''' ikke er inkluderet i din installation, så se om den er tilgængelig som en opdatering i din pakkehåndtering. Hvis ikke, så skal du installere den fra kilden ved at følge vejledningerne på Calligras<ref>[https://community.kde.org/Calligra/Building Building Calligra]</ref> og KDE's wikier<ref>[http://techbase.kde.org/Getting_Started/Build/KDE4 Build KDE4]</ref>.


    Jeg begynder med at starte '''Kexi''' op og vælger at lave en <menuchoice>Blank database</menuchoice> fra guiden '''Nyt projekt'''. Afhængigt af, hvilke plugins du har installeret vil du kunne oprette en database gemt som en fil eller på en eksisterende databaseserver som PostgreSQL eller MySQL. Det nemmeste for en ny bruger er at vælge at gemme i en fil, og det er også passende, når der kun vil være et begrænset antal bruger af databasen i gang samtidigt. '''Kexis''' filbaserede databaser bruger sqlite som det underliggende format og kan derfor læses af ethvert sqlite-kompatibelt program.
    Jeg begynder med at starte '''Kexi''' op og vælger at lave en <menuchoice>Blank database</menuchoice> fra guiden '''Nyt projekt'''. Afhængigt af, hvilke plugins du har installeret vil du kunne oprette en database gemt som en fil eller på en eksisterende databaseserver som PostgreSQL eller MySQL. Det nemmeste for en ny bruger er at vælge at gemme i en fil, og det er også passende, når der kun vil være et begrænset antal bruger af databasen i gang samtidigt. '''Kexis''' filbaserede databaser bruger sqlite som det underliggende format og kan derfor læses af ethvert sqlite-kompatibelt program.


    Databasen skal have et navn; jeg valgte kexi_facebook fulgt at en placering, hvor den skal gemmes &ndash; standarden er o.k. Jeg blev så præsenteret for '''Kexis''' hovedvindue. Hovedvinduet indeholder en værktøjslinje langs toppen og en projektnavigator ned langs venstre side. Hovedværktøjslinjen i '''Kexi''' er forskellig fra de andre '''KOffice'''-programmer og bruger et layout med faneblade. Hvert vindue der åbnes har også sin egen lokale værktøjslinje til funktioner, som er specifikke for det vindue, så som tabeller, forespørgsler, formularer, rapporter og scripts.
    Databasen skal have et navn; jeg valgte kexi_facebook fulgt at en placering, hvor den skal gemmes &ndash; standarden er o.k. Jeg blev så præsenteret for '''Kexis''' hovedvindue. Hovedvinduet indeholder en værktøjslinje langs toppen og en projektnavigator ned langs venstre side. Hovedværktøjslinjen i '''Kexi''' er forskellig fra de andre '''Calligra'''-programmer og bruger et layout med faneblade. Hvert vindue der åbnes har også sin egen lokale værktøjslinje til funktioner, som er specifikke for det vindue, så som tabeller, forespørgsler, formularer, rapporter og scripts.


    I fanebladet <menuchoice>Opret</menuchoice> i den øverste menu valgte jeg <menuchoice>Tabel</menuchoice> for at starte tabeldesigneren.
    I fanebladet <menuchoice>Opret</menuchoice> i den øverste menu valgte jeg <menuchoice>Tabel</menuchoice> for at starte tabeldesigneren.
    Line 26: Line 26:
    Statistikken jeg modtager via e-mail inkluderer dato, antal nye fans, antal wall posts, antal besøg og det samlede antal fans, så jeg lavede en tabel med følgende designskema:
    Statistikken jeg modtager via e-mail inkluderer dato, antal nye fans, antal wall posts, antal besøg og det samlede antal fans, så jeg lavede en tabel med følgende designskema:


    [[Image:01_table_design_mini.png|center|500px|frame|Table Design]]
    [[Image:01_table_design_mini.png|center|500px|frame|Design af tabel]]


    <br style="clear: both" />
    <br style="clear: both" />
    Line 43: Line 43:
    Et script har kun få egenskaber: typen og fortolkeren. Den fortolker jeg ønsker er qtscript, og typen er Executable. Et script med egenskaben Executable er beregnet til at blive kørt manuelt. Egenskaben Module betyder, at scriptet indeholder kodemoduler, som kan bruges af andre scripts og egenskaben Object betyder, at scriptet er knyttet til et andet databaseobjekt, så som en rapport.
    Et script har kun få egenskaber: typen og fortolkeren. Den fortolker jeg ønsker er qtscript, og typen er Executable. Et script med egenskaben Executable er beregnet til at blive kørt manuelt. Egenskaben Module betyder, at scriptet indeholder kodemoduler, som kan bruges af andre scripts og egenskaben Object betyder, at scriptet er knyttet til et andet databaseobjekt, så som en rapport.


    [[Image:02_script_import_mini.png|center|500px|frame|Script Design]]
    [[Image:02_script_import_mini.png|center|500px|frame|Design af script]]


    Hele scriptet var:
    Hele scriptet var:
    Line 130: Line 130:
    Da scriptet blev kørt fra script-værktøjslinjen  blev der indsamlet 11 poster med data, som kan ses i tabeldata-visningen.
    Da scriptet blev kørt fra script-værktøjslinjen  blev der indsamlet 11 poster med data, som kan ses i tabeldata-visningen.


    [[Image:03_table_data_mini.png|center|500px|frame|Table Data]]
    [[Image:03_table_data_mini.png|center|500px|frame|Tabeldata]]


    <br style="clear: both" />
    <br style="clear: both" />
    Line 139: Line 139:
    I øjeblikket optræder data i den rækkefølge det tilfældigvis kom fra '''KMail''' i. Jeg skal bruge dem i stigende rækkefølge, så jeg oprettede en forespørgsel til at sorteredem. Fra fanebladet <menuchoice>Opret</menuchoice> vælger jeg denne gang <menuchoice>Forespørgsel</menuchoice>. Jeg ville have alle felter undtagen den autonummererede primære nøgle, så jeg opsætter den som:
    I øjeblikket optræder data i den rækkefølge det tilfældigvis kom fra '''KMail''' i. Jeg skal bruge dem i stigende rækkefølge, så jeg oprettede en forespørgsel til at sorteredem. Fra fanebladet <menuchoice>Opret</menuchoice> vælger jeg denne gang <menuchoice>Forespørgsel</menuchoice>. Jeg ville have alle felter undtagen den autonummererede primære nøgle, så jeg opsætter den som:


    [[image:04_query_design_mini.png|center|500px|frame|Query Design]]
    [[image:04_query_design_mini.png|center|500px|frame|Design af forespørgsel]]


    <br style="clear: both" />
    <br style="clear: both" />
    Går jeg nu til 'datavisning', så udføres forespørgslen og fremviser resultatet:
    Går jeg nu til 'datavisning', så udføres forespørgslen og fremviser resultatet:


    [[Image:05_query_data_mini.png|center|500px|frame|Query Data]]
    [[Image:05_query_data_mini.png|center|500px|frame|Forespørgselsdata]]


    <br style="clear: both" />
    <br style="clear: both" />
    Line 151: Line 151:
    == Sæt det hele sammen i en rapport ==
    == Sæt det hele sammen i en rapport ==


    En ny funktion i '''Kexi 2''' er rapportpluginet. Dette lader dig designe rapporter og udføre dem direkte i '''Kexi''' ved brug af en GUI-editor svarende til rapportdesignere i andre satabasesystemer så som Microsoft Access, Crystal Reports og Oracle Reports. I '''Kexi 1.6''' var rapporter tilgængelige som en særskilt tilføjelse fra kde-apps.org, men den indeholdt ikke lige så mange funktioner som udgaven i '''Kexi 2''' og ver ikke fuldt integreret i programmet, da designeren var et eksternt program.
    En ny funktion i '''Kexi 2''' er rapportpluginet. Dette lader dig designe rapporter og udføre dem direkte i '''Kexi''' ved brug af en GUI-editor svarende til rapportdesignere i andre databasesystemer så som Microsoft Access, Crystal Reports og Oracle Reports. I '''Kexi 1.6''' var rapporter tilgængelige som en særskilt tilføjelse fra kde-apps.org, men den indeholdt ikke lige så mange funktioner som udgaven i '''Kexi 2''' og var ikke fuldt integreret i programmet, da designeren var et eksternt program.


    Rapporter kan udskrives, gemmes som PDF, eksporteres til HTML eller OpenDocument regnearksfiler eller bare blive i databasen til aktualiseret visning på skærmen. Det er muligt at gemme rapporter i alle disse formater på grund af en genereringsproces i to stadier: rappporter dannes først i en intern beskrivelse, og denne beskrivelse bruges så til at danne den endelige version i det format, der nu er valgt. I fremtidige versioner vil yderligere formater formentlig blive understøttet, for eksempel OpenDocument tekst og XML, som kan viderebehandles med XSLT.
    Rapporter kan udskrives, gemmes som PDF, eksporteres til HTML eller OpenDocument regnearksfiler eller bare blive i databasen til aktualiseret visning på skærmen. Det er muligt at gemme rapporter i alle disse formater på grund af en genereringsproces i to stadier: rappporter dannes først i en intern beskrivelse, og denne beskrivelse bruges så til at danne den endelige version i det format, der nu er valgt. I fremtidige versioner vil yderligere formater formentlig blive understøttet, for eksempel OpenDocument tekst og XML, som kan viderebehandles med XSLT.
    Line 159: Line 159:
    Til at begynde med vil jeg blot have en enkel tabelvisning af data, så alle felterne skal med i sektionen "Detalje", bortset fra et rapporthoved og felttitlerne, som enten skal være et sidehoved eller et rapporthoved. Fra afsnitseditoren i raportens værktøjslinje tilføjede jeg et rapporthoved og ved hjælp af fanebladet <menuchoice>Rapportdesign</menuchoice> i menulinjen tilføjede jeg felter og etiketter til rapportens layout. I fanebladet <menuchoice>Datakilde</menuchoice> i egenskabseditoren satte jeg rapportens datakilde til at være forespørgslen qryStats, som jeg oprettede ovenfor. Endelig satte jeg egenskaben Datakilde for hvert felt til det tilsvarende felt i forespørgslen og gav etiketterne passende tekst. Sådan endte det med at se ud:
    Til at begynde med vil jeg blot have en enkel tabelvisning af data, så alle felterne skal med i sektionen "Detalje", bortset fra et rapporthoved og felttitlerne, som enten skal være et sidehoved eller et rapporthoved. Fra afsnitseditoren i raportens værktøjslinje tilføjede jeg et rapporthoved og ved hjælp af fanebladet <menuchoice>Rapportdesign</menuchoice> i menulinjen tilføjede jeg felter og etiketter til rapportens layout. I fanebladet <menuchoice>Datakilde</menuchoice> i egenskabseditoren satte jeg rapportens datakilde til at være forespørgslen qryStats, som jeg oprettede ovenfor. Endelig satte jeg egenskaben Datakilde for hvert felt til det tilsvarende felt i forespørgslen og gav etiketterne passende tekst. Sådan endte det med at se ud:


    [[Image:06_rpt_tabular_design_mini.png|center|500px|frame|Report Tabular Design]]
    [[Image:06_rpt_tabular_design_mini.png|center|500px|frame|Design af rapporttabel]]


    <br style="clear: both" />
    <br style="clear: both" />
    og det dannede en rapport som denne:
    og det dannede en rapport som denne:


    [[Image:07_rpt_tabular_plain_mini.png|center|500px|frame|Report Tabular View]]
    [[Image:07_rpt_tabular_plain_mini.png|center|500px|frame|Visning af rapporttabel]]


    <br style="clear: both" />
    <br style="clear: both" />
    Dette får opgaven løst, men det er ikke helt så "fancy" som jeg gerne ville have.. Det er lmindeligt i skrivebordsprogrammer at skifte imellem to baggrundsfarver for rækker for at gøre det mere synligt, hvor det ene datasæt begynder og det andet slutter, så lad os prøve det.
    Dette får opgaven løst, men det er ikke helt så "fancy" som jeg gerne ville have.. Det er almindeligt i skrivebordsprogrammer at skifte imellem to baggrundsfarver for rækker for at gøre det mere synligt, hvor det ene datasæt begynder og det andet slutter, så lad os prøve det.


    Jeg oprettede endnu et script, men satte denne gang dets type til "Objekt", da det skal knyttes til rapportobjektet. Rapportscripts drives af begivenheder, hvilket vil sige at når en bestemt begivenhed indtræffer under oprettelsen af rapporten, så bliver den tilknyttede kode i scriptet kaldt. Rapportscripts udnytter funktionerne i Kross::Object, hvor hvert objekt i en rapport kan knyttes til et scriptobjekt, sådan at det får en mere objektorienteret natur. Hvert scriptobjekt kan have sine egne variable og funktioner. Rapportobjektet kan være rapporten selv eller ethvert af dens sektioner. Her er det endelige script for at gøre det tydeligere:
    Jeg oprettede endnu et script, men satte denne gang dets type til "Objekt", da det skal knyttes til rapportobjektet. Rapportscripts drives af begivenheder, hvilket vil sige at når en bestemt begivenhed indtræffer under oprettelsen af rapporten, så bliver den tilknyttede kode i scriptet kaldt. Rapportscripts udnytter funktionerne i Kross::Object, hvor hvert objekt i en rapport kan knyttes til et scriptobjekt, sådan at det får en mere objektorienteret natur. Hvert scriptobjekt kan have sine egne variable og funktioner. Rapportobjektet kan være rapporten selv eller ethvert af dens sektioner. Her er det endelige script for at gøre det tydeligere:


    [[Image:08_script_rptstats_mini.png|center|500px|frame|Report Script]]
    [[Image:08_script_rptstats_mini.png|center|500px|frame|Script til rapport]]


    <br style="clear: both" />
    <br style="clear: both" />
    Dette er et ret enkelt script; der er et objekt kaldet "Detail" som indeholder en funktion "OnRender", som bliver kaldt hver gang en "detail"-sektion bliver fremstillet. Funktionen holder styr på, hvor mange gange den er blevet kaldt og alternerer baggrundsfarven. Den sidste linje i scriptet knytter funktionen "detail" sammen med sektionen "detail" i rapporten.
    Dette er et ret enkelt script; der er et objekt kaldet "Detail" som indeholder en funktion "OnRender", som bliver kaldt hver gang en "detail"-sektion bliver fremstillet. Funktionen holder styr på, hvor mange gange den er blevet kaldt og alternerer baggrundsfarven. Den sidste linje i scriptet knytter funktionen "detail" sammen med sektionen "detail" i rapporten.


    I rapporten sætter jeg så egenskaberne script-format til qtscript og objekt-script til scriptets navn. Det er vigtigt, at script-format matcher scriptets fortolker, ellers dukker scriptet ikke op som en valgmulighed i listen af objek-scripts.
    I rapporten sætter jeg så egenskaberne script-format til qtscript og objekt-script til scriptets navn. Det er vigtigt, at script-format matcher scriptets fortolker, ellers dukker scriptet ikke op som en valgmulighed i listen af objekt-scripts.


    Den dannede rapport ser nu sådan ud:
    Den dannede rapport ser nu sådan ud:


    [[Image:09_rpt_tabular_1_mini.png|center|500px|frame|Tabular Report 2]]
    [[Image:09_rpt_tabular_1_mini.png|center|500px|frame|Rapporttabel 2]]


    <br style="clear: both" />
    <br style="clear: both" />
    Not so great with the white background on the fields, so back in the designer, I changed the Opacity property of each of the fields to 0 to make them transparent, resulting in a more reasonable:
    Det ser ikke godt ud med den hvide baggrund på felterne, så tilbage i designeren ændrede jeg egenskaben uigennemsigtighed for hvert felt til 0 for at gøre dem gennemsigtige, hvilket giver dette mere rimelige resultat:


    [[Image:10_rpt_tabular_2_mini.png|center|500px|frame|Tabular Report 2]]
    [[Image:10_rpt_tabular_2_mini.png|center|500px|frame|Rapporttabel 2]]


    <br style="clear: both" />
    <br style="clear: both" />


    == Adding Something Trendy ==
    == Tilføj noget smart ==


    My final requirement at this stage was to have something more graphical; a nice chart to show the trend of fans we have over time. The report designer allows the creation of charts using the KDChart library from KDAB and is used in the '''KOffice''' program '''KChart'''. It can be quite powerful, allowing the joining of chart data to the main report data (called master-child links), but for now, all I needed was a simple, single chart. The chart object expects data in a certain format. There must be 2 or more columns of data. The first column is used for the labels on the X axis, all other columns are used as series in the chart. I started by creating a query with 2 columns, date in ascending order and total fans, then created a new report. The report itself is not based on any data, so its Data Source was left empty. An empty data source will produce a report with 1 detail section, providing an area to add a minimal set of items to a report.
    Mit sidste ønske på dette stadium var at få noget mere grafisk; et pænk diagram til at vise trenden i antallet af fans over tid. Rapportdesigneren tillader oprettelse af diagrammer ved brug af biblioteket KDChart fra KDAB, som også bruges i '''Calligra'''-programmet '''KChart'''. Det ret stærkt med mulighed for at føje diagrammets data til hovedrapportens data (kaldet master-child-links), men lige nu skal jeg blot bruge et simpelt diagram. Diagramobjektet forventer data i et særligt format. Der skal være to eller flere kolonner med data. Den første kolonne bruges til etiketter på x-aksen, lle andre kolonner bruges som serier i diagrammet. Jeg startede med at lave en forespørgsel med 2 kolonner, dato i stigende rækkefølge og samlet antal fans og oprettede så en ny rapport. Raporten selv er ikke baseret på data, så jeg lod egenskaben datakilde forblive tom. En tom datakilde producerer en rapport med en detaljesektion med et område til at tilføje et minimlt sæt af punkter til en rapport.


    In my detail section I added a chart object from the report designer toolbar and set its data source to the query I had just produced
    I min detaljesektion tilføjede jeg et diagram fra rapportdesignerens værktøjslinje og satte den datakilde til den forespørgsel, jeg netop havde oprettet.


    [[Image:11_rpt_chart_design_mini.png|center|500px|frame|Chart Design]]
    [[Image:11_rpt_chart_design_mini.png|center|500px|frame|Design af diagram]]


    <br style="clear: both" />
    <br style="clear: both" />
    As you can see, even at design time, the chart object is able to gather data and draw a preview of the chart. Switching to the data view shows the chart without any of the extra lines and text from the designer:
    Som du kan se er diagramobjektet i stand til at indsamle data allerede i designfasen og tegne en forhåndsvisning af diagrammet. Skift til datavisning for at se diagrammet uden designerens ekstra linjer og tekst:


    [[Image:12_rpt_chart_mini.png|center|500px|frame|Chart View]]
    [[Image:12_rpt_chart_mini.png|center|500px|frame|Visning af diagram]]


    <br style="clear: both" />
    <br style="clear: both" />


    == Hard Copies ==
    == Udskrift ==


    When printed, both the tabular report and chart report look as they do in the Data view. When printed using the PDF printer option in KDE, the chart even retains all its detail, as it is not converted to a bitmap, but saved as lines which makes it completely zoomable!
    Ved udskrivning ser både tabelrapporten og diagramrapporten ud som i datavisningen. Når man udskriver ved hjælp af KDE's PDF-printerfunktion, så bevarer diagrammet endda alle dets detaljer, da det ikke konverteres til en bitmap men gemmes som linjer, hvilket betyder at det kan zoomes!


    Saving the tabular report as a HTML document produces 2 options, saving as a table, or using CSS. The table option produces a HTML file where the text from each field in a report is saved as a table cell, and each section is a row. The CSS options uses the <div> attribute and tries to create a HTML file that closely resembles the original, allowing text and images to be rendered at arbitrary positions.
    Gemmes tabelrapporten som et HTML-dokument, så fremkommer to valgmuligheder: gem som tabel eller brug CSS. Tabelmuligheden producerer en HTML-fil, hvor teksten fra hvert felt i en rapport gemmes som en tabelcelle og hvert afsnit er en række. CSS-funktionen bruger <nowiki><div></nowiki>-attributten og prøver at lave en HTML-fil, der er så tæt på originalen som muligt, hvor tekst og billeder kan fremstilles hvor som helst.


    The tabular report also exports nicely into an OpenDocument Spreadsheet file for use in either '''KSpread''' or '''OpenOffice''':
    Tabelrapproten kan også uden problemer eksporteres som en OpenDocument regnearksfil, som kan bruges i '''KSpread''' og '''OpenOffice''':


    [[Image:13_kspread_stats_mini.png|center|500px|frame|Spreadsheet View]]
    [[Image:13_kspread_stats_mini.png|center|500px|frame|Visning i regneark]]


    <br style="clear: both" />
    <br style="clear: both" />
    As you can see from the image, one problem is that the title of the report has taken a cell with the other field headings, this is because it is in the same section and easily fixed by putting the title into a separate section such as a Page Header.
    Et problem, som du kan se i billedet er at rapportens titel har fået en celle bland feltoverskrifterne. Dette er fordi den er i samme sektion og kan let rettes ved at placere titlen i et særskilt afsnit som for eksempel et sidehoved.


    That concludes this write-up on some of the features of '''Kexi''' in '''KOffice 2.2'''. Find out what else is possible by giving it a go and if you can, please contribute more documentation @ <ref>[[Special:myLanguage/Kexi|Kexi]]</ref>, or join the team by dropping into #kexi or #koffice on freenode IRC.
    Det var det for denne gennemgang af nogle funktioner i '''Kexi 2.2'''. Find ud af hvilke andre muligheder der er ved at prøve dig frem, og hvis du kan, så bidrag gerne med mere dokumentation @<ref>[[Special:myLanguage/Kexi|Kexi]]</ref> eller slut dig til teamet ved at dukke op #kexi eller #calligra på Libera Chat IRC.


    Resources
    Ressourcer
    <references />
    <references />


    {{Info|This article was published in [http://www.linuxjournal.com/article/10828 Linux Journal Issue #202, February 2011], titled '''Kexi in Use''' and was authored by Adam Pigg}}
    {{Info/da|Denne artikel blev offentliggjort i [http://www.linuxjournal.com/article/10828 Linux Journal Nr 202, februar 2011] under titlen  '''Kexi in Use''' og er forfattet af Adam Pigg}}


    [[Category:Office]]
    [[Category:Kontor/da]]
    [[Category:Tutorials]]
    [[Category:Vejledning/da]]

    Latest revision as of 15:12, 6 October 2022

    Other languages:

    Note

    Selv om denne artikel blev offentliggjort mens Kexi 2.2 var den aktuelle version, så skulle den kunne bruges uden problemer med nyere udgaver af Kexi.


    Introduktion

    Dene artikel tager en ny bruger igennem en række begreber i Kexi, Calligras program til håndtering af databaser. Kexis funktioner går fra simpel oprettelse af tabeller og forespørgsler til mere avanceret rapportering og scriptning. Denne artikel er rettet mod nye brugere og eksisterende brugere som en demonstration af, hvor brugbar Kexi kan være.

    Kexi 2 har været 3 år i udvikling for at komme fra Kexi 1.6 til den nuværende tilstand og nåede ikke at komme med i udgivelserne af KOffice 2.0 og 2.1 på grund af det lille antal udviklere. Helt i open-source-ånden arbejder Kexis udviklere i deres fritid som en hobby. Det håbes, at denne første udgave nu er stabil nok til at blive brugt og vil være noget, det kan bygges videre på i fremtidige udgivelser.

    Når man skal skrive en brugbar vejledning er det nyttigt at have et virkeligt eksempel at arbejde med. Som ejer af Kexis Facebook-side[1] får jeg hver uge opdateringer via e-mail med diverse statistikker. Målet med denne artikel er at få disse data ud af e-mailene og ind i en Kexi-database for at blive i stand til at udføre søgninger i dem og lave rapporter over dem for at vise tendenser over tid.

    De rå data

    For at få data til databasen eksporterede jeg et udvalg af data fra KMail. Dette oprettede en .mbox-fil, som i bund og grund er en tekstfil, som indeholder alle e-mailene. Det ville have været muligt at gå igennem hver mail og skrive detaljerne ind i en tabel, men da jeg allerede har nogle mails liggende, så ønskede jeg indsamle data automatisk, og det er en god udfordring til at skrive et script i Kexi til at gøre dette.

    Første skridt, lav en database og tabel

    Hvis Kexi ikke er inkluderet i din installation, så se om den er tilgængelig som en opdatering i din pakkehåndtering. Hvis ikke, så skal du installere den fra kilden ved at følge vejledningerne på Calligras[2] og KDE's wikier[3].

    Jeg begynder med at starte Kexi op og vælger at lave en Blank database fra guiden Nyt projekt. Afhængigt af, hvilke plugins du har installeret vil du kunne oprette en database gemt som en fil eller på en eksisterende databaseserver som PostgreSQL eller MySQL. Det nemmeste for en ny bruger er at vælge at gemme i en fil, og det er også passende, når der kun vil være et begrænset antal bruger af databasen i gang samtidigt. Kexis filbaserede databaser bruger sqlite som det underliggende format og kan derfor læses af ethvert sqlite-kompatibelt program.

    Databasen skal have et navn; jeg valgte kexi_facebook fulgt at en placering, hvor den skal gemmes – standarden er o.k. Jeg blev så præsenteret for Kexis hovedvindue. Hovedvinduet indeholder en værktøjslinje langs toppen og en projektnavigator ned langs venstre side. Hovedværktøjslinjen i Kexi er forskellig fra de andre Calligra-programmer og bruger et layout med faneblade. Hvert vindue der åbnes har også sin egen lokale værktøjslinje til funktioner, som er specifikke for det vindue, så som tabeller, forespørgsler, formularer, rapporter og scripts.

    I fanebladet Opret i den øverste menu valgte jeg Tabel for at starte tabeldesigneren.

    Statistikken jeg modtager via e-mail inkluderer dato, antal nye fans, antal wall posts, antal besøg og det samlede antal fans, så jeg lavede en tabel med følgende designskema:

    Design af tabel


    Felterne har et navn, en type og en kommentar og også adskillige egenskaber, som er tilgængelige i egenskabseditoren i højre side, så som begrænsninger og en standardværdi, hvis ingen værdi angives. Hvert objekt i databasen vil have mange egenskaber tilknyttet, og egenskabseditoren lader dig se og redigere dem et sted.

    Skifter man til datavisning, så spørges der om tabellen skal gemmes og tabeldataeditoren vises, så man manuelt kan indskrive poster, med det er ikke særlig sjovt!

    Få fat i data

    Med min nyligt oprettede, tomme tabel skulle jeg automatisk have fat i data. Som tidligere nævnt var data i en enkelt .mbox-fil, som indeholder alle e-mailene. Kexi understøtter scripts, som kan skrives i ecmascript (javascript), python eller ethvert af de andre sprog, som understøttes af KDE's scripting-fundament Kross. Jeg valgte at bruge qtscript-motoren, som lader mig bruge javascript, da jeg er mere fortrolig med det end med python.

    Mit script skulle åbne mbox-filen, læse den linje for linje, få fat i de data det skulle bruge ved hjælp af streng-manipulation og efter at have læse et fuldt datasæt, føje det til databasen som en post. Scripts har ikke blot adgang til Kexis indbyggede metoder, de kan også importere biblioteker, som indeholder store mængder nyttige funktioner; de nyttigste er QT-bibliotekerne. Jeg vil bruge funktioner fra Core for at få adgang til filsystemet hvor QTextStream kan bruges til at læse data og Gui-funktioner for adgang til QMessageBox, som gør det muligt at vise eventuelle fejlmeddelelser i en dialog.

    I fanebladet Opret vælger jeg denne gang Script. Dette vil starte script-editoren i det centrale vindue og i egenskabseditoren til højre.

    Et script har kun få egenskaber: typen og fortolkeren. Den fortolker jeg ønsker er qtscript, og typen er Executable. Et script med egenskaben Executable er beregnet til at blive kørt manuelt. Egenskaben Module betyder, at scriptet indeholder kodemoduler, som kan bruges af andre scripts og egenskaben Object betyder, at scriptet er knyttet til et andet databaseobjekt, så som en rapport.

    Design af script

    Hele scriptet var:

    //This script will import data from exported emails into the facebook_stats table
    include("qt.core");
    include("qt.gui");
    
    var statsFile = new QFile("/home/piggz/kexi_fb/updates.mbox");
    var stat_date;
    var new_fans;
    var new_posts;
    var visits;
    var total_fans;
    var idx;
    
    var conn = Kexi.getConnection();
    var table = conn.tableSchema("facebook_stats");
    
    if (statsFile.open(QIODevice.ReadOnly)) {
      var ts = new QTextStream(statsFile);
      var i = 0;
      while (!ts.atEnd()) {
        //Process the file line by line, grabbing data and adding records 
        var line = ts.readLine();
        
        //Check date email sent
        idx = line.indexOf("Date:");
        if (idx == 0) {
          stat_date = Date.parse(line.slice(6, 40));
        }
        
        //Check for fans
        idx = line.indexOf("ans this week");
        if ( idx >= 0) {
          new_fans = line.slice(0, idx-2);
          total_fans = line.slice(line.indexOf("(") + 1, line.indexOf("total") - 1);
        }
        
        //Check for wall posts
        idx = line.indexOf("all posts");
        if (idx >= 0) {
          new_posts = line.slice(0, idx-2) + 0;
        }
        
        //Check for visits
        idx = line.indexOf("isits to your");
        if (idx >= 0) {
          visits = line.slice(0,idx-2);
          
          //Should have all the data now so insert a record
          
          stat_date = new Date(stat_date);
          var short_date = stat_date.getFullYear() + "-" + pad(stat_date.getMonth() + 1, 2) + "-" + pad(stat_date.getDate(), 2);
          
          if (!conn.insertRecord(table, [++i, short_date, new_fans, new_posts, visits, total_fans])) {
    	var msg = "Cannot insert into " + table.caption() + '\n';
    	msg += "Date: " + stat_date.toDateString() + " " + short_date + '\n';
    	msg += "New Fans: " + new_fans + '\n';
    	msg += "Total Fans: " + total_fans + '\n';
    	msg += "New Posts: " + new_posts + '\n';
    	msg += "Visits: " + visits;
    	
    	QMessageBox.information(0,"Error", msg);
          }
        }
      }
      QMessageBox.information(0, "Records Added:", i);
    }
    
    statsFile.close();
    
    function pad(number, length) {
      var str = '' + number;
      while (str.length < length) {
        str = '0' + str;
      }
      return str;
    }
    
    

    Et muligt problem i ovenstående script er, at det antager at der ikke allerede er poster i tabellen og at det opretter primære nøgler startende fra 1. Det er o.k. at køre scriptet en gang, man hvis det køres igen vil det ikke overskrive poster med ID'er som matcher den, det prøver at indsætte. For at gøre scriptet mere robust skal det først finde den aktuelle maksimum for ID-feltet. Dette er en god øvelse i at skrive scripts.

    Da scriptet blev kørt fra script-værktøjslinjen blev der indsamlet 11 poster med data, som kan ses i tabeldata-visningen.

    Tabeldata


    Det er værd at pointere, at det involverede en hel del prøven sig frem at skrive ovenstående script, da det ikke er umiddelbart indlysende, at det er muligt at importere ekstra biblioteker eller at bruge specifikke Kexi-funktioner. En ting, som mangler i dokumentationen er at gøre det lettere for nye brugere; bidrag er meget velkomne på KDE's UserBase wiki.

    Sortér data og opret en forespørgsel

    I øjeblikket optræder data i den rækkefølge det tilfældigvis kom fra KMail i. Jeg skal bruge dem i stigende rækkefølge, så jeg oprettede en forespørgsel til at sorteredem. Fra fanebladet Opret vælger jeg denne gang Forespørgsel. Jeg ville have alle felter undtagen den autonummererede primære nøgle, så jeg opsætter den som:

    Design af forespørgsel


    Går jeg nu til 'datavisning', så udføres forespørgslen og fremviser resultatet:

    Forespørgselsdata


    Jeg gemte forespørgslen som qryStats til brug i en rapport.

    Sæt det hele sammen i en rapport

    En ny funktion i Kexi 2 er rapportpluginet. Dette lader dig designe rapporter og udføre dem direkte i Kexi ved brug af en GUI-editor svarende til rapportdesignere i andre databasesystemer så som Microsoft Access, Crystal Reports og Oracle Reports. I Kexi 1.6 var rapporter tilgængelige som en særskilt tilføjelse fra kde-apps.org, men den indeholdt ikke lige så mange funktioner som udgaven i Kexi 2 og var ikke fuldt integreret i programmet, da designeren var et eksternt program.

    Rapporter kan udskrives, gemmes som PDF, eksporteres til HTML eller OpenDocument regnearksfiler eller bare blive i databasen til aktualiseret visning på skærmen. Det er muligt at gemme rapporter i alle disse formater på grund af en genereringsproces i to stadier: rappporter dannes først i en intern beskrivelse, og denne beskrivelse bruges så til at danne den endelige version i det format, der nu er valgt. I fremtidige versioner vil yderligere formater formentlig blive understøttet, for eksempel OpenDocument tekst og XML, som kan viderebehandles med XSLT.

    Fra fanebladet Opret vælger jeg Rapport for at oprette en blank rapport med et enkelt afsnit, "Detaljer". Rapportens struktur er bygget op omkring sektioner; disse kan være sidehoveder og -fødder, rapporthoveder og -fødder og gruppesektioner, hvor data grupperes efter en feltværdi.

    Til at begynde med vil jeg blot have en enkel tabelvisning af data, så alle felterne skal med i sektionen "Detalje", bortset fra et rapporthoved og felttitlerne, som enten skal være et sidehoved eller et rapporthoved. Fra afsnitseditoren i raportens værktøjslinje tilføjede jeg et rapporthoved og ved hjælp af fanebladet Rapportdesign i menulinjen tilføjede jeg felter og etiketter til rapportens layout. I fanebladet Datakilde i egenskabseditoren satte jeg rapportens datakilde til at være forespørgslen qryStats, som jeg oprettede ovenfor. Endelig satte jeg egenskaben Datakilde for hvert felt til det tilsvarende felt i forespørgslen og gav etiketterne passende tekst. Sådan endte det med at se ud:

    Design af rapporttabel


    og det dannede en rapport som denne:

    Visning af rapporttabel


    Dette får opgaven løst, men det er ikke helt så "fancy" som jeg gerne ville have.. Det er almindeligt i skrivebordsprogrammer at skifte imellem to baggrundsfarver for rækker for at gøre det mere synligt, hvor det ene datasæt begynder og det andet slutter, så lad os prøve det.

    Jeg oprettede endnu et script, men satte denne gang dets type til "Objekt", da det skal knyttes til rapportobjektet. Rapportscripts drives af begivenheder, hvilket vil sige at når en bestemt begivenhed indtræffer under oprettelsen af rapporten, så bliver den tilknyttede kode i scriptet kaldt. Rapportscripts udnytter funktionerne i Kross::Object, hvor hvert objekt i en rapport kan knyttes til et scriptobjekt, sådan at det får en mere objektorienteret natur. Hvert scriptobjekt kan have sine egne variable og funktioner. Rapportobjektet kan være rapporten selv eller ethvert af dens sektioner. Her er det endelige script for at gøre det tydeligere:

    Script til rapport


    Dette er et ret enkelt script; der er et objekt kaldet "Detail" som indeholder en funktion "OnRender", som bliver kaldt hver gang en "detail"-sektion bliver fremstillet. Funktionen holder styr på, hvor mange gange den er blevet kaldt og alternerer baggrundsfarven. Den sidste linje i scriptet knytter funktionen "detail" sammen med sektionen "detail" i rapporten.

    I rapporten sætter jeg så egenskaberne script-format til qtscript og objekt-script til scriptets navn. Det er vigtigt, at script-format matcher scriptets fortolker, ellers dukker scriptet ikke op som en valgmulighed i listen af objekt-scripts.

    Den dannede rapport ser nu sådan ud:

    Rapporttabel 2


    Det ser ikke godt ud med den hvide baggrund på felterne, så tilbage i designeren ændrede jeg egenskaben uigennemsigtighed for hvert felt til 0 for at gøre dem gennemsigtige, hvilket giver dette mere rimelige resultat:

    Rapporttabel 2


    Tilføj noget smart

    Mit sidste ønske på dette stadium var at få noget mere grafisk; et pænk diagram til at vise trenden i antallet af fans over tid. Rapportdesigneren tillader oprettelse af diagrammer ved brug af biblioteket KDChart fra KDAB, som også bruges i Calligra-programmet KChart. Det ret stærkt med mulighed for at føje diagrammets data til hovedrapportens data (kaldet master-child-links), men lige nu skal jeg blot bruge et simpelt diagram. Diagramobjektet forventer data i et særligt format. Der skal være to eller flere kolonner med data. Den første kolonne bruges til etiketter på x-aksen, lle andre kolonner bruges som serier i diagrammet. Jeg startede med at lave en forespørgsel med 2 kolonner, dato i stigende rækkefølge og samlet antal fans og oprettede så en ny rapport. Raporten selv er ikke baseret på data, så jeg lod egenskaben datakilde forblive tom. En tom datakilde producerer en rapport med en detaljesektion med et område til at tilføje et minimlt sæt af punkter til en rapport.

    I min detaljesektion tilføjede jeg et diagram fra rapportdesignerens værktøjslinje og satte den datakilde til den forespørgsel, jeg netop havde oprettet.

    Design af diagram


    Som du kan se er diagramobjektet i stand til at indsamle data allerede i designfasen og tegne en forhåndsvisning af diagrammet. Skift til datavisning for at se diagrammet uden designerens ekstra linjer og tekst:

    Visning af diagram


    Udskrift

    Ved udskrivning ser både tabelrapporten og diagramrapporten ud som i datavisningen. Når man udskriver ved hjælp af KDE's PDF-printerfunktion, så bevarer diagrammet endda alle dets detaljer, da det ikke konverteres til en bitmap men gemmes som linjer, hvilket betyder at det kan zoomes!

    Gemmes tabelrapporten som et HTML-dokument, så fremkommer to valgmuligheder: gem som tabel eller brug CSS. Tabelmuligheden producerer en HTML-fil, hvor teksten fra hvert felt i en rapport gemmes som en tabelcelle og hvert afsnit er en række. CSS-funktionen bruger <div>-attributten og prøver at lave en HTML-fil, der er så tæt på originalen som muligt, hvor tekst og billeder kan fremstilles hvor som helst.

    Tabelrapproten kan også uden problemer eksporteres som en OpenDocument regnearksfil, som kan bruges i KSpread og OpenOffice:

    Visning i regneark


    Et problem, som du kan se i billedet er at rapportens titel har fået en celle bland feltoverskrifterne. Dette er fordi den er i samme sektion og kan let rettes ved at placere titlen i et særskilt afsnit som for eksempel et sidehoved.

    Det var det for denne gennemgang af nogle funktioner i Kexi 2.2. Find ud af hvilke andre muligheder der er ved at prøve dig frem, og hvis du kan, så bidrag gerne med mere dokumentation @[4] eller slut dig til teamet ved at dukke op #kexi eller #calligra på Libera Chat IRC.

    Ressourcer

    Information

    Denne artikel blev offentliggjort i Linux Journal Nr 202, februar 2011 under titlen Kexi in Use og er forfattet af Adam Pigg