Statistik-Konzept für allegro 
2007-02-19 
Ziel ist das Auswerten von Vorgängen, nicht von Datensatz-Inhalten (dafür gibt es bereits die`Zählungen` und`Summierungen`). 
Vorgänge - das ist ein weites Feld. Es kann sich um bestimmte Zugriffe handeln, um bestimmte Änderungen oder Neueinträge, die im laufenden Betrieb anfallen. So etwa beim Ausleihgeschäft die Ausleih- und Verlängerungsvorgänge oder Gebührenzahlungen. 
Das hier beschriebene Konzept wurde neu entwickelt. Es werden keine Statistik-Datensätze in der Datenbank angelegt. Die Vorteile werden in dieser Darstellung klar werden. Nicht zuletzt wird die Datenbank und ihre Parametrierung von dieser eigentlich sachfremden Aufgabe entlastet. 
Der erste Schritt ist immer das Schreiben der auszuwertenden Daten in eine Statistikdatei, und zwar unmittelbar im Zusammenhang mit jedem relevanten Vorgang. Was dabei geschrieben wird und wie es genau aussieht, das richtet sich nach dem Zweck der Auswertung. Dabei gilt :
-- Jeder auszuwertende Vorgang bildet eine Zeile 
-- Die Zeile muß beginnen mit dem Element, das gezählt werden soll. 
-- Die Strukturierung dieser Zeile ist ansonsten dem Anwender anheimgestellt 

1. Das Aufzeichnen der statistisch auszuwertenden Daten
HIer wird beschrieben, wie die Sache beim Ausleihpaket organisiert ist. Während jeder Sitzung entsteht eine neue Statistikdatei (Typ .STK). Voraussetzung ist, daß zu Beginn der Sitzung (etwa in _start.flx) die Variable $Stat belegt wird mit dem Namen der Statistikdatei. Ist dies nicht der Fall, unterbleibt die Statistikaufzeichnung während der betr. Sitzung!
In jeden FLEX, der einen zu zählenden Vorgang durchführt, ist dann ein Abschnitt einzubauen, der etwa so aussieht: 

var $Astk           // ist ein Dateiname fuer Statistik gesetzt? 
if "" jump weiter   // $Astk nicht vorhanden - nichts schreiben 
var "+" $Astk       // sonst die Datei zum Anhaengen oeffnen 
open x 
  schreiben:   ta:b;c/d    
wri "t" #nnn ":" #uxy ";" #uab "/" #ucd$x n 
close x 
:weiter 

Die STK-Dateien werden in einem Unterordner STAT des Datenbankverzeichnisses angelegt. Dort sollten demnach die ausleihberechtigten Mitarbeiter die Berechtigung zum Anlegen von Dateien haben. Wenn die Dateien woanders liegen sollen, ist nur der Verzeichnisname in a-init.flx zu ändern. Dieser wird in die $-Variable $Astd kopiert und ist damit während des Programmlaufs stets verfügbar. 

Die STK-Dateien haben lange Namen! Sie werden nicht von DOS-Programmen ausgewertet, daher ist das unkritisch. 

Der Dateiname sieht so aus: 

  DatumUhrzeitOperator.stk 

z.B. 
  200609140900meier.stk 
  20060914=Datum der Sitzung 14.9.2006
          0900=Uhrzeit 9:00 (Beginn der Sitzung) 
              meier=Operator 

Damit wird es dann möglich, gezielt die Transaktionen zu bilanzieren, die sich in einer Sitzung oder an einem Tage oder in einem Monat ereignet haben oder auch alle, die in einem bestimmten Zeitraum an einem Arbeitsplatz (vom selben "operator") ausgeführt wurden. 

Der "Operator" kann entweder in der INI-Datei mit dem Befehl 
Operator=... 
gesetzt werden oder mit der Environment-Variablen op, wobei letztere Vorrang hat. (Während des Programmlaufs steht der Name in der Sonderkategorie #op.) 

2. Inhalt einer STK-Datei
Jede relevante Transaktion wird in der Statistikdatei mit einer Zeile festgehalten, natürlich in der Reihenfolge der Ausführung. Das können diejenigen FLEXe mit erledigen, in denen die relevanten, zu erfassenden Aktionen ausgeführt werden. Dort kann man sich anschauen, wie es gemacht wird, und kann diese Prozedur bei Bedarf in eigene FLEXe übernehmen. Kommentiert mit "Statistik") 
Das erste Zeichen einer Zeile steht für die Art der Transaktion: 

a  Ausleihe              in a-chkout.flx 
g  Gebuehreneinnahme     in a-func.flx
v  Verlaengerung         in a-verl.flx

Die Struktur der Zeilen ist folgende: 

aDatum:Leserkl;Medientyp/Signatur 
z.B. 
a20060803:2;CD-U/CD IDOL 
 Datum    Leserkl 
            Medientyp 
               Signatur 

gDatum:GebTyp/Betrag 
       0 = Verspaetete Rueckgabe 
              Betr. in Cent! 

vDatum:Leserkl;Medientyp/Signatur 
  Wie bei Typ a 

Hinweis: Medientyp wird auf ZZZ gesetzt, wenn dafür kein Eintrag vorhanden ist, d.h. wenn #9DG$m fehlt. 

Erweiterungen: Wenn weitere Aktionen zu protokollieren sind, muß man in die FLEXe an den entsprechenden Stellen die nötigen Ausgabebefehle nach dem in a-chkout.flx zu sehenden Beispiel einbauen, mit selbstdefinierten Kennbuchstaben. 

3. Verfahrensweise
Die Statistikdateien sind erst einmal nur Protokolle, sie müssen zur Auswertung dann noch vorverarbeitet werden. Das bei jeder Zeile gespeicherte Datum ist für die Auswertung nicht erforderlich! Es könnte evtl. dazu dienen, Probleme zu analysieren oder auch bestimmte Vorgänge vor der weiteren Verarbeitung wieder herauszunehmen. 
Man startet den FLEX  a-stat.flx ("Statistik" im aLF-Menü). Erst dieser FLEX erzeugt aus den Statistikzeilen die zu zählenden Elemente. Daher muß man im Falle von Erweiterungen hier entsprechend eingreifen, dazu findet man darin Kommentare. 

Es erscheint im Anzeigefeld die Liste der vorhandenen .STK-Dateien. 
Die auszuwertenden markiert man mit einem vorgesetzten +, dann mit Alt+9 die Auswertung starten. 
Dann wird erneut a-stat.flx gestartet, aber nun führt es die Auswertung der markierten Dateien durch. 
Es entsteht eine Datei stat.alg, die dann sortiert und mit dem Programm SRCH.EXE durchgearbeitet wird, wobei eine Parameterdatei a-stat.apr zum Einsatz kommt. In diese muß man im Falle von Erweiterungen normalerweise nicht eingreifen. Darin stehen Kommentare. 
So sieht eine Zeile in der stat.alg aus: 

<1>u1 L:1;SP-F<0>      (<1> und <0> sind die ASCII-Codes 1 bzw, 0) 

Diese Struktur ist nötig, weil dann die Verarbeitung mit SRCH.EXE und Exportparametern möglich ist. 
Heraus kommt dann aber eine Ergebnisliste, die so aussieht: (L:Leserklasse;Medientyp,  M:Medientyp) 

  aLF Ausleihstatistik 
  200611011002fritz.stk 
  200611011759meier.stk 
  ... 
L:1;BM       12 
L:1;CD-U     15 
L:1;CD-x      2 
L:1;MC-E      5 
L:1;SP-F      6 
L:1;ZZZ       2 
L:2;BM        2 
L:2;CD-X      1 
L:2;CD-x      1 
L:2;ZZZ       5 
L:3;CD-U      2 
L:3;MC-E      2 
L:4;BM        1 
L:4;CD-U      4 
L:4;MC-E      4 
L:4;SP-F      3 
 ________________________________________ 
M:BM         15 
M:CD-U       21 
M:CD-X        1 
M:CD-x        3 
M:MC-E       11 
M:SP-F        9 
M:ZZZ         7 
 ________________________________________ 

Entleihungen Gesamtzahl:      67 

 ________________________________________ 

Gebührensumme:   97.00 €

Mit dem Menüpunkt "Heute" werden alle STK-Dateien des jeweiligen Tages zusammengefaßt  (wir sagen kumuliert) und eine solche Datei daraus erstellt. In diesem Fall hätte sie den Namen 20061101.STT = Tagesdatei 1.11.2006 
Diese Form kann einerseits als Endprodukt angesehen werden: man kann sich die Liste kopieren und dann in der Form beliebig verändern. 
Diese Form ist andererseits geeignet, stufenweise mit weiteren Prozeduren kumuliert zu werden zu Monats-, Jahres- oder anderen Zeitraum-Statistiken, wie unten beschrieben. Dies ist ein weiterer Vorteil gegenüber dem DOS-Konzept. 

Das Kumulieren besorgt allein der FLEX  a-statk.flx. (Exportparameter werden keine gebraucht.) 
Bei den kumulierenden Aktionen müssen jeweils mehrere Dateien einer Stufe gesammelt und zu einer Datei zusammengefaßt werden. Das Prinzip ist, daß die auszuwertenden Zeilen alle am linken Rand beginnen, ohne Leerzeichen also. Der Zeilenanfang vor dem ersten Spatium wird dann als Name einer Variablen verwendet: z.B. aus  M:SP-F  wird  $alfM:SP-F. Durch diesen Trick muß man die Variablennamen nicht ausdrücklich programmieren, sondern alle vorkommenden Leserklassen, Medientypen und was immer man sonst noch protokollieren mag werden automatisch berücksichtigt. D.h. in a-statk.flx braucht man nicht einzugreifen, wenn man Erweiterungen gemacht hat. 

Tagesstatistik
Alle STK-Dateien des Tages sind zu kumulieren, die Ergebnisse werden als STT-Datei ausgegeben, Form siehe oben, z.B.
   20061130.STT = Tagesstatistik 30.11.2006 
Die STK-Dateien können dann beseitigt werden.

Monatsstatistik
Die STT-Tagesdateien des Monats werden eingesammelt, d.h. z.B.
   200611*.STT -> 200611.STM 
Die STT-Dateien können dann beseitigt werden.

Jahresstatistik
Alle 12 STM-Monatsdateien werden eingesammelt: 
   2006*.STM -> 2006.STJ 
Die STM-Dateien können dann beseitigt werden.

Jederzeit kann man mehrere Tages-, Monats- oder Jahresdateien zu ad-hoc-Statistiken für einen gewünschten Zeitraum zusammenfassen, z.B. für ein Quartal oder Halbjahr! Dabei löscht man die STT, STM- bzw. STJ-Dateien jedoch nicht, weil sie für die reguläre Statistik noch gebraucht werden. 

Nach jeder Kumulationsstufe, wenn man keine weiteren Auswertungen plant, kann man die ausgewerteten Dateien der Typen *.ST? gefahrlos entsorgen. Gerne löschen wird man insbes. die zahlreich anfallenden STK-Dateien jeden Tag nach Erstellung der STT-Datei. 

4. Der Ablauf kurz und knapp

1. Datenprotokollierung:  (in  a-chkout.flx  u.a.) 
a99 schreibt Datei  200611071432.stk    (Sitzung beginnt am 7.11.2006 um 14:32) 
      Der Dateiname steht in $Astk, der Verzeichnisname in $Astd 

2. Datenaufbereitung: ("Statistik" etc. auf aLF-Menü) 
a) ad-hoc Auswertung
Jederzeit kann man eine beliebige Auswahl von STK-Dateien aufbereiten lassen: 
a99: 	Dateien *.STK  --> (a-stat.flx) -->  STAT.ALG 
asort: 	STAT.ALG --> STATS.ALG 
srch:  	STATS.ALG  --> (a-stat.apr) --> A-STAT.LST 

b) Tagesstatistik
Wenn in dieser Weise die STK-Dateien eines Tages ausgewertet werden, entsteht z.B. 
           20061107*.STK  -->  20061107.STT 
Es ergibt sich also für jeden Arbeitstag eine Datei  JJJJMMTT.STT 

3. Kumulierung: ("Monat" und "Jahr" auf aLF-Menü) 
Dabei werden Tages- zu Monats- bzw. die Monats- zu Jahresdateien kumuliert: 
a) Monatsstatistik
a99:  JJJJMM??.STT --> (a-statk.flx) --> JJJJMM.STM 
b) Jahresstatistik
a99:  JJJJ??.STM --> (a-statk.flx) --> JJJJ.STJ 

Aus den STJ-Dateien können auch Mehrjahreskumulationen erstellt werden. 

?Zählungen=h ct 
?Summierungen=X summe