Outils pour utilisateurs

Outils du site


issue81:python_-_p._51

Table des matières

1

This month, I’m going to discuss a product that is new to me, but has apparently been around for a number of years. It’s called NextReports from Advantage Software Factory, and you can get it free from http://www.next-reports.com/ . Not only that, but it’s open source and it runs under Windows and Linux! Before I start telling you about the product, let me get on my soapbox and vent for a moment or two. For a long time, I’ve been working with databases and reports. One of the things that I’ve had issues with is that while there are free database solutions out there, like SQLite and MySql, there was precious little available that was free for report designer tools. More times than not, any reports either had to be done with very expensive software tools, or the developer had to roll his own. Some tools were available, but were lacking. When it came to charting, well, you pretty much had no choice but to use the expensive stuff. Believe me, I’ve looked for years for really good free reporting tools, and I’m not sure how I have missed this package for so many years (version 2.1 was released in March of 2009 and they are currently up to version 6.3). But now that I’ve found it, I’m absolutely pumped about it.

Ce mois-ci je vais vous parler d'un outil que je ne connaissais pas, mais qui existe apparemment depuis un certain nombre d'années. Il s'agit de NextReports de Advantage Software Factory, et vous pouvez l'obtenir gratuitement sur http://www.next-reports.com/. En plus, il est Open Source et il fonctionne sous Windows et Linux !

Avant de commencer, laissez-moi de me vider le cœur enfourcher ma caisse à savon et vous révéler le fond de ma pensée pendant une minute ou deux. Je travaille avec des bases de données et des rapports depuis longtemps. Une des choses qui m'a pas mal embêté, c'est que, bien qu'il existe des solutions de base de données libres, comme SQLite et MySQL, il y a vraiment très peu d'outils de génération de rapports gratuits. Le plus souvent, les rapports devaient être réalisés à l'aide de logiciels très coûteux, ou alors le développeur devait se les fabriquer. Certains outils étaient disponibles, mais insatisfaisants. Et concernant les graphiques, vous n'aviez souvent pas d'autre choix que d'utiliser des produits chers. Croyez-moi, cela fait des années que je cherche de bons outils de reporting libres, et je ne sait vraiment pas comment j'ai pu manquer celui-ci pendant si longtemps (la version 2.1 est sortie en mars 2009 et ils en sont actuellement à la version 6.3). Mais maintenant que je l'ai trouvé, j'en suis absolument dingue.

2

Now that I’ve stepped down from my soap box, I can begin to sing its praises. It is a suite of three parts, a reports designer, a report engine and a report server. All I have had a chance to play with is the reports designer, but if the designer is any indication of the power, ease and flexibility of the rest of the suite, this thing is a winner. This month, we are going to concentrate on the designer. Because of some constraints on my time, I’m working on a Windows machine, but everything that I show can be done in Linux (so please forgive me in advance).

Maintenant que j'ai dit ce que je tenais à dire, je peux commencer à vous vanter ses qualités. C'est une suite en trois parties, un concepteur de rapports, un moteur de rapport et un serveur de rapports. J'ai seulement eu l'occasion de jouer avec le concepteur de rapports, mais si ce concepteur donne un indice de la puissance, la facilité et la flexibilité du reste de la suite, alors on tient là le gros lot.

Ce mois-ci, nous allons nous concentrer sur le concepteur. En raison de certaines contraintes de temps, je travaille sur une machine Windows, mais tout ce que je montre peut être fait sous Linux (donc s'il vous plaît ne m'en tenez pas rigueur).

3

One of the first things you should know is that it supports databases like Oracle, MySql, SQLite, MSSQL and more. Everything is based on queries and a really good thing is that only SELECT type queries are allowed. This means that nothing in the source database can be changed by accident. You can enter your own queries or use a visual designer. The screenshot shows how nice a UI it is. Things are pretty intuitive and it won’t take you long to be productive at this. Let’s take a look at the steps to get going. Start with File | New | Data Source. Next, name your source whatever you want to call it.

Une des premières choses que vous devez savoir, c'est que NextReports prend en charge les bases de données comme Oracle, MySql, SQLite, MSSQL et autres. Tout est basé sur les requêtes et une très bonne chose est que seules les requêtes de type SELECT sont autorisées. Cela signifie que rien dans la base de données source ne peut être modifié par accident. Vous pouvez entrer vos propres requêtes ou utiliser un concepteur visuel.

La capture d'écran montre à quel point l'interface est agréable. Les choses sont assez intuitives et être productif ne vous prendra pas longtemps. Jetons un regard sur les étapes à réaliser.

Commencez par Fichier | Nouveau | Source de données. Ensuite, nommez votre source comme vous le souhaitez.

4

Now tell NextReports what kind of database it is in the dropdown called “Type:”. You can skip over the Driver section and go to the URL: section. This is where you put the path to the database. If you are using, for example, a SQLite database, this will be filled in for you: “jdbc:sqlite:<dbfile-path>”. Replace the <dbfile-path> with the path to your database. Other types of databases have similar types of information already populated to help you. Next, click the “Test” button to make sure you can connect. If everything goes correctly, then click “Save” and you’ll see it added to the Connetions tree. The next thing you need to do is make a connection to your database that you have just added. Now, right click on the database and then click on Connect. Once you are connected, you’ll see that you have four possible things to choose from. The “%” is the database tables. The next three are so you can create new queries, reports and charts. Simple enough. Now click on the “+” sign to the left of “%” which will open up your database table display. Now you will have Tables, Views and Procedures in the tree. Once again, click on the “+” sign next to “Tables”. This will show all your tables. Now if you want to use the visual query designer, just drag the table(s) you want to deal with onto the designer canvas to the right.

Maintenant, indiquez à NextReports le type de base de données à l'aide de la liste déroulante « Type: ». Vous pouvez passer la section Pilote et aller à la section URL pour indiquer le chemin de la base de données. Si vous utilisez par exemple une base de données SQLite, ce sera pré-rempli pour vous : « jdbc:sqlite:<chemin-fichier-base> ». Remplacez <chemin-fichier-base> par le chemin d'accès à votre base de données. D'autres types de bases de données possèdent des informations similaires déjà pré-remplies pour vous aider. Ensuite, cliquez sur le bouton « Test » pour vous assurer que vous pouvez vous connecter. Si tout se passe correctement, cliquez sur « Enregistrer » et vous verrez une entrée supplémentaire dans l'arbre des connections. La prochaine étape est de créer une connexion à la base de données que vous venez d'ajouter. Maintenant, faites un clic droit sur ​​la base de données, puis cliquez sur Connecter.

Une fois connecté, vous verrez que vous avez quatre choix possibles. Le « % » est pour les tables de bases de données. Les trois choix suivants permettent de créer de nouvelles requêtes, rapports et graphiques… plutôt simple. Maintenant, cliquez sur le signe « + » à gauche de « % » pour ouvrir l'affichage des tables de votre base de données. Vous voyez alors les Tables, les Vues et les Procédures dans l'arbre. À nouveau, cliquez sur le signe « + » à côté de « Tables », cela affichera toutes vos tables. Maintenant, si vous voulez utiliser le concepteur visuel de requêtes, il suffit de glisser la(les) table(s) que vous voulez traiter sur le canevas du concepteur à droite.

5

Once you have all your tables there, you can start making connections between the tables. In the example here, I have two tables, one with information about kids in a confirmation class and the other with entries for worship notes taken. The worship note table doesn’t have the kid’s name in it, just an id that points to the kid information table. I did a drag and drop to make that link between the kidID field and the pkID of the kid table. Then I selected each field I wanted to have in the result set. In this case, the kid’s first and last name and an active (or not-deleted) flag in the kids table and multiple fields from the notes table. The grid below shows each of the fields, which table it comes from, and other information. As you can see, we can set criteria like “Active = 1”, choose to display a field or not, and set sort type and sort order. Once you are satisfied with this, you can click on the tab below and see your actual SQL query.

Une fois que toutes vos tables s'y trouvent, vous pouvez commencer à créer des liens entre les tables.

Dans mon exemple, j'ai deux tables, l'une avec des informations sur des enfants dans une classe de catéchisme et l'autre avec des entrées pour les notes de culte. La table des notes de culte ne contient pas le nom de l'enfant, juste un identifiant qui pointe vers la table d'informations sur l'enfant. J'ai fait un glisser-déposer pour créer le lien entre le champ kidID et le champ pkID de la table des enfants. Ensuite, j'ai choisi chaque champ que je voulais voir dans le jeu de résultats. Dans ce cas, le prénom et le nom de l'enfant et un drapeau actif (ou non supprimé) dans la table des enfants et plusieurs champs de la table des notes. La grille ci-dessous montre chacun des champs, de quelle table il provient, et d'autres informations.

Comme vous le constatez, nous pouvons indiquer des critères comme « actif = 1 », choisir d'afficher un champ ou pas, et définir le type de tri et l'ordre de tri. Une fois le résultat voulu obtenu, vous pouvez cliquer sur l'onglet en-dessous et voir votre requête SQL réelle.

6

To test your query, simply click on the “running man” and you will (hopefully if you did it correctly) get the query results in a grid below the editor. If you want to add manual lines you can. For example, I want to combine the kids first and last names (fname and lname) into a full name. We can do that by putting a line after the “k1.lname,” line like this: k1.fname || “ “ || k1.lname as FullName, The “||” characters are concatenation characters so we will have the two fields with a space between in a field named “FullName”. Don’t forget the comma at the end. Once you have your query the way you want it, click on the save button to save the query. You will be asked what you want to call it.

Pour tester votre requête, il suffit de cliquer sur l'icône représentant « l'homme qui court » et vous obtiendrez (si vous avez tout fait correctement) les résultats de la requête dans une grille sous l'éditeur. Si vous voulez ajouter des lignes manuellement, vous pouvez le faire. Par exemple, je veux combiner les prénoms et noms des enfants (fname et lname) dans un nom complet. Nous pouvons le faire en ajoutant une ligne après la ligne « k1.lname, » comme ceci :

k1.fname || “ “ || k1.lname as FullName,

Les caractères « || » sont des caractères de concaténation et nous obtiendrons les deux champs avec un espace entre eux dans un champ nommé « FullName ». N'oubliez pas la virgule à la fin. Une fois que votre requête vous convient, cliquez sur le bouton Enregistrer pour enregistrer la requête ; vous devrez indiquer son nom.

7

Next, click on the Query item in the tree and right click on the query you just created. Select “New Report from Query”. The query designer canvas goes away and is replaced by the report designer. On the left is the properties window for any given field or the entire report. On the right is the report designer itself. Notice that it looks like a spreadsheet. Each row is considered a “band” and holds information for that report row. In the case of this example, we have four rows, two header rows, one detail row and a footer row. You can add or delete rows as needed. This method is not quite as free-form as some other report designers, but makes for a very nice and clean report. The two header rows hold our report title and column headers. The detail row has each field we will be reporting on and the footer row is the report footer. Let’s take a look at how the report looks as a default. Click on the button at the top of the bar marked “To Html” to see the report. (I blurred the kids last names, that’s not an issue in the generator.)

Ensuite, cliquez sur Requête dans l'arborescence et faites un clic droit sur la requête que vous venez de créer. Sélectionnez « Nouveau rapport à partir de la requête ». Le concepteur de requêtes disparaît, remplacé par le concepteur de rapport.

Sur la gauche se trouve la fenêtre des propriétés pour un champ donné ou l'ensemble du rapport. Sur la droite se trouve le concepteur de rapport lui-même. Remarquez que cela ressemble à une feuille de calcul. Chaque ligne est considérée comme une « bandeau » et contient des informations pour cette ligne de rapport. Dans cet exemple, nous avons quatre lignes : deux lignes d'en-tête, une ligne de détail et une ligne de bas de page. Vous pouvez ajouter ou supprimer des lignes à volonté. Cette méthode n'est pas aussi souple que celle d'autres concepteurs de rapports, mais fournit néanmoins un rapport très agréable et propre.

Les deux rangées d'en-tête contiennent le titre et les en-têtes de colonnes du rapport. La ligne de détail contient chaque champ pour lequel nous ferons un rapport et il reste le pied de page. Jetons un coup d'œil à la présentation par défaut du rapport. Cliquez sur le bouton en haut de la barre marquée « Version Html » pour voir le rapport. (J'ai flouté le nom de famille des enfants, ce n'est pas un problème dans le générateur.)

8

For a report with almost no work, that’s really nice. But let’s pretty it up a bit. Let’s create a group that puts all of the data for any given kid under the kid’s name. Right click on the first column of the data row. Select Group and then Add. You will be presented with a new window asking which of the fields you want to create the group upon. In this case, I select FullName and then click the Ok button. Now we have a grouping break. We can also get rid of the three fields (fname, lname and FullName) in the detail section, since we’ll be displaying the name in the group band. SImply right-click on them and select “Delete Cell”. Now you can resize the three empty cells on the left to make the gap less obvious.

Pour un rapport presque sans effort, c'est vraiment pas mal. Mais améliorons-le un peu. Créons un groupe qui place toutes les données concernant un enfant sous le nom de l'enfant.

Faites un clic droit sur ​​la première colonne de la ligne de données. Sélectionnez Groupe, puis Ajouter.

Vous obtiendrez une nouvelle fenêtre pour indiquer sur quels champs vous voulez créer le groupe. Dans ce cas, je sélectionne FullName puis je clique sur le bouton OK. Maintenant, nous avons un regroupement. Nous pouvons également nous débarrasser des trois champs (fname, lname et FullName) dans la section Détails, puisque nous afficherons le nom dans le bandeau de groupe. Un simple clic droit sur ces champs et un clic sur « Supprimer cellule » suffit. Maintenant, vous pouvez redimensionner les trois cellules vides sur la gauche pour rendre l'espace moins évident.

9

Taking a quick peek at what the report looks like now will show you that the information for each kid is all nicely grouped together. That’s nicer, but now let’s do something kind of fun. All the 1s and 0s obviously stand for yes and no. That’s rather boring for a report, so let’s add an advanced conditional statement for each of those fields that will show a box with a check for Yes (or 1) and an empty box for No (or 0). It’s really easy to do, but makes your report look like you spent days on it. By using the Wingdings font from Windows, the two characters we want are 0x6F(0168) for an empty box and 0xFE (0254) for a checked box.

Jetez un coup d'œil au nouvel aspect du rapport et vous verrez que l'information pour chaque enfant est joliment regroupée.

C'est plus agréable, mais maintenant faisons quelque chose d'amusant. Tous les 1 et 0 signifient oui et non. Puisque c'est plutôt ennuyeux pour un rapport, nous allons ajouter une instruction conditionnelle avancée pour chacun de ces champs afin d'afficher une case ; elle sera cochée Oui (ou 1) et vide pour Non (ou 0). C'est vraiment facile à faire et on pourrait croire que vous avez passé des jours à créer votre rapport. En utilisant la police Wingdings de Windows, les deux caractères dont nous avons besoin sont 0x6F (0168) pour une case vide et 0xFE (0254) pour une case cochée.

10

Before I go on, the one thing that Windows does better than Linux (that I have found) is the use of the Alt+NumPad entry of special characters. Linux doesn’t allow that. There was a work around that used Ctrl+Shift+U then the unicode value for the character you wanted. However, that doesn’t work on all machines. The easiest way I’ve found to do this on Linux, is to open Character Map, use the search function to find the unicode character you want, double-click the character to copy it to the “Text to copy:” box, then click the “Copy” and then paste it into your document. The unicode characters for them are 2610 (empty box) and 2611 (checked box) using the WingDings 2 font. I’m sure there are many other easier ways to deal with this, but I’m shy on time. (Be sure you have Common selected in the Script list.) We’ll start with the WorshipNotes field. On the detail row, right click on the field you want to do. In this case it’s marked $C{WorshipNote}. Choose Insert, then Expression. Yet another wonderful thing that NextReports gives us it the ability to do pretty much everything with as little typing as possible. Look in the center of window where it says Operators. Double click on the “if..else..” selection, and it will fill that into the editor for you as a template so you don’t make a mistake.

Avant de continuer, la seule chose que Windows fait mieux que Linux (selon moi) est la possibilité d'utiliser Alt+pavé numérique pour saisir des caractères spéciaux. Linux ne le permet pas. Il y a un contournement avec Ctrl+Maj+U puis la valeur Unicode pour le caractère souhaité. Toutefois, cela ne fonctionne pas sur toutes les machines. La meilleure façon que j'ai trouvé pour faire cela sous Linux est d'ouvrir la table des caractères, utiliser la fonction de recherche pour trouver le caractère Unicode que vous voulez, puis de double-cliquer sur le caractère pour le copier dans la zone « Caractères à copier : », puis cliquer sur « Copier » et, enfin, le coller dans votre document. Les caractères Unicode correspondants sont 2610 (case vide) et 2611 (case cochée) en utilisant la police WingDings 2. Je suis sûr qu'il y a beaucoup d'autres façons plus faciles de le faire, mais je manque de temps. (Assurez-vous que « Commun » est sélectionné dans la liste Script.)

Nous allons commencer par le champ NoteCulte ; sur la ligne Détails, faites un clic-droit sur le champ concerné. Dans ce cas, il est marqué $C{NoteCulte}. Choisissez Insérer, puis Expression. Une autre chose merveilleuse que nous fournit NextReports est la possibilité de faire à peu près tout avec très peu de saisie. Regardez au centre de la fenêtre Opérateurs. Double-cliquez sur la sélection « if..else.. », et il la saisira comme modèle dans l'éditeur pour vous éviter les erreurs.

11

Now, we want to put the WorshipNotes field in the parentheses of the editor. Simply click in between the two parentheses to place the cursor and then double-click on the field you want to go in there. BAM! It’s filled in for you. Now click after the field name in the editor and then double-click on the “== (eq)” operator. Then add a “1”, so the editor line reads if ( $C_WorshipNote == 1 ) { ; } else { ; } We are almost finished with our expression The first set of curly brackets define what to do if the expression is True and the second is what to do if it’s false. In this case, we’ll use the CharMap (in windows, Linux has one as well, for example gucharmap if you are using Gnome) to copy the characters into our editor string. Or, under windows, you can hold the {Alt} key and press 0168 for the empty box and 0254 for the checked box. So now our expression is (at least in Windows): if ( $C_WorshipNote == 1 ) { “þ”; } else { “o”; }

Maintenant, nous voulons mettre le champ NoteCulte dans les parenthèses de l'éditeur. Il suffit de cliquer entre les deux parenthèses pour placer le curseur, puis de double-cliquer sur le champ que vous voulez insérer. BAM ! Il est rempli automatiquement. Maintenant, cliquez après le nom du champ dans l'éditeur, puis double-cliquez sur l'opérateur « == (eq) ». Puis ajoutez un « 1 » pour qu'on lise ceci :

if ( $C_NoteCulte == 1 ) { ; } else { ; }

Nous avons presque terminé notre expression. La première série d'accolades définit ce qu'il faut faire si l'expression est vraie et la seconde indique quoi faire si c'est faux. Dans ce cas, nous allons utiliser le CharMap (dans Windows, Linux en a un aussi, par exemple gucharmap si vous utilisez Gnome) pour copier les caractères spéciaux dans l'éditeur ou bien, sous Windows, vous pouvez maintenir la touche Alt et appuyez sur 0168 pour la case vide et sur 0254 pour la case cochée. Maintenant, notre expression est (au moins sous Windows) :

if ( $C_NoteCulte == 1 ) { "þ"; } else { "o"; }**

12

Name the expression ( I used WNotes ) and save it. Under properties for that field, select the font (WingDings is what I used here) and this is what it will look like. There’s our pretty little boxes. Doing this to the other fields is just as simple. It only took me about 3 hours of playing with the package to get to this point and a whole lot further. I can truly say that I have a great amount more to learn but that’s for another day. You can use templates to color your report, you can add images, and much more. Next time, I’ll talk about how we might go about embedding these reports into a Python program. Until then, have fun playing with this wonder FREE software.

Nommez l'expression (j'ai utilisé NotesR) et enregistrez-la. Sous les propriétés de ce champ-là, sélectionnez la police (ici j'ai utilisé WingDings) et voici à quoi cela va ressembler.

Voici nos jolies petites cases. Faire de même pour les autres champs est tout aussi simple.

Il ne m'a fallu qu'environ 3 heures de prise en main avec cet outil pour arriver à ce stade, voire un peu plus loin. Je peux vraiment dire que j'ai encore beaucoup de choses à apprendre, mais ce sera pour un autre jour. Vous pouvez utiliser des modèles pour colorer votre rapport, vous pouvez ajouter des images, et bien plus encore.

La prochaine fois, je parlerai de la façon dont nous pourrions améliorer l'intégration de ces rapports dans un programme Python. Jusque-là, amusez-vous bien avec ce formidable logiciel GRATUIT.

issue81/python_-_p._51.txt · Dernière modification : 2014/06/04 15:09 de auntiee