Der vorliegende Artikel enthält weitere Beispiele für die Auswertungen von Benutzerprofilen mit Db2 Web Query. Welche Benutzer sind zurzeit interaktiv tätig und mit welchen Funktonen und Einschränkungen? Dazu werden interessante Techniken von Db2 Web Query wie Drilldown und moderne Funktionalitäten von SQL gemeinsam verwendet. Die Erstellung von Reports auf der Grundlage von SQL-Scripts kann auf recht einfache Art erfolgen. Die Generierung des Reports inklusive der erforderlichen Synonyme erfolgt mit EZ-Report, ein Tool von Db2 Web Query.
Interaktive Benutzer und Drilldown
Im ersten Beispiel werden Benutzer ermittelt, die interaktiv auf der IBM i tätig sind. Über verschiedene Links, die bei Db2 Web Query auch Drilldown genannt werden, können verschiedene Funktionen und Eigenschaften zu ausgewählten Benutzern ermittelt werden.
Die Beispielanwendung setzt sich zusammen aus 5 Reports:
- K0_Interaktive_Benutzer
- K1_IAU_Functions_Summary Zusammenfassung der ausgeführten Funktionen des Benutzers
- K2_IAU_Functions Detail Ausgeführte Funktionen des Benutzers detailiert
- K3_IAU_Locks Durch Benutzer gesperrte Objekte
- K4_IAU_Open Files Durch Benutzer geöffnete Dateien
Der erste Report K0_Interaktive_Benutzer listet alle Benutzer, die augenblicklich interaktiv tätig sind.
Über die Auswahl eines Benutzers kann von hier aus über einen Link der Aufruf der anderen Reports erfolgen. Als Parameter wird beim Aufruf einfach der ausgewählte Bentzername übergeben. Voraussetzung für eine erfolgreiche Parameterübergabe ist, dass jeder der Berichte über einen Filter für den übergebenen Parameter verfügt. Jeder dieser Berichte kann auch einzeln aufgerufen werden. Dabei kann/können ein, mehrere oder alle Benutzer ausgewählt werden.
Grundlage für die einzelnen Reports ist jeweils ein eigenes SQL-Script. Anhand dieser SQL-Scripte wierden mit EZ-Report das erforderliche Synonym und ein Beispielreport erstellt. Jeder so erstellte Report muß dann noch überarbeitet werden, damit die Parameterübergabe stattfinden kann.
Report K0_Interaktive_Benutzer
Das SQL-Script verwendet die beiden Services qsys2.user_info und qsys2.active_job_info.
select j.authorization_name as user_name, u.text_description as description,
count(*) as job_count, 'Functions' as "K1-Functions", 'Functions detail' as "K2-Functions detail", 'Locks' as "K3-Locks", 'Open files' as "K4-Open files"
from qsys2.user_info as u
join table (
qsys2.active_job_info(
subsystem_list_filter => 'QINTER', detailed_info => 'ALL')
) as j
on u.authorization_name = j.authorization_name
and j.job_type = ('INT')
group by j.authorization_name, u.text_description
order by 3 desc;
stop;
Für die Auswahl der anderen vier Programme habe ich 4 Pseudofelder K1-K4 hinzugefügt. Hinter diesen Feldern wird die Drlldown-Funktion von Db2 Web Query implementiert. Dieses Script bildet nun die Grundlage für die Verarbeitung mit EZ-Report.
Hinweis: Der Aufruf von EZ-Report erfolgt über den von IBM gelieferten Hauptordner IBM Db2 Web Query Developer Utilities
Quelle: BärDie einzugebenden Filterwerte können Sie aus der folgenden Abbildung entnehmen. Bei SQL-Statement wird einfach das SQL-Script eingefügt.
Quelle: BärDamit wird ein Report mit dem Namen K0_Interaktive_Benutzer erstellt. Für den Parameter Target Folder kann nur der Name eines Hauptordners angegeben werden. Die Angabe eines Unterordners ist nicht zulässig und auch nicht möglich Bei Erstellung eines Reports mit EZ-Report wird dieser Report immer im Hauptordner erstellt.
Hinweis: Bei der Erstellung der anderen Reports ändern Sie den Namen des Reports und fügen Sie das jeweils entsprechende SQL-Script ein. Und so sieht der soeben erstellte Report bei Ausführung aus:
Quelle: BärHinter die Felder mit den Inhalten K1, K2, K3 und K4 wird die Drilldown-Funktion für den Aufruf des entsprechenden Reports gelegt. Dazu müssen aber zunächst die vier Berichte erstellt werden.
Report K1_IAU_Functions_Summary
Dieser Report stellt eine Zusammenfassung der aktuellen Funktionen eines Benutzers dar.
select j.authorization_name as user_name, function, count(*) as function_count
from table (
qsys2.active_job_info(subsystem_list_filter => 'QINTER', detailed_info => 'ALL')
) as j
group by j.authorization_name, function
order by 1, 3 desc; ;
stop;
Mit diesem Script und EZ-Report wird nun der Report K1_IAU_Functions_Summaryerstellt.
Diesem Report wird nun ein dynamischer Parameter als Filterbedingung für den USER_NAME hinzugefügt. Wahlweise kann auch die Auswahl für mehrere Werte zur Aisführungszeit aktiviert werden.
Quelle: BärDieser Report kann nun ausgeführt werden und liefert das folgende Ergebnis:
Quelle: BärHinweis: Die Erstellung der anderen drei Berichte und das Hinzufügen des dynamischen Parameters als Filterwert erfolgt auf die gleiche Art und Weise. Daher gebe ich für diese Berichte nur noch die SQL-Scripte an.
Report K3_IAU_Locks
select j.authorization_name as user_name, job_name, u.text_description as description, jl.*
from qsys2.user_info as u
join table (
qsys2.active_job_info(
subsystem_list_filter => 'QINTER', detailed_info => 'ALL')
) j
on u.authorization_name = j.authorization_name, lateral (
select *
from table (
qsys2.job_lock_info(job_name)
)
) jl
where j.job_type = ('INT') and lock_category not like 'INTERNAL%'
order by lock_state;
stop;
Quelle: BärReport K4_IAU_Open Files
select j.authorization_name as user_name, job_name, u.text_description as description, op.*
from qsys2.user_info as u
join table (
qsys2.active_job_info(
subsystem_list_filter => 'QINTER', detailed_info => 'ALL')
) j
on u.authorization_name = j.authorization_name, lateral (
select *
from table (
qsys2.open_files(job_name)
)
) op
where j.job_type = ('INT');
STOP;
Quelle: BärNun erfolgt der letzte Schritt. Dazu wird unser Ausgangsproramm K0_Interaktive_Benutzer mit den entsprechenden Drilldowns für die vier Programme versehen.
Drilldowns in K0_Interaktive_Benutzer implementieren
Über die Pseudofelder mit den Inhalten K1 – K4 sollen die entsprechenden Reports aufgerufen werden. Dabei soll als Parameter für den ausgewählten Benutzer der Benutzername übergeben werden. Der so aufgerufene Report wird dann sofort für den ausgewählten Benutzerausgeführt, ohne dass eine zusätzlche Auswahl – wie beim Direktaufruf des Reports – erforderlich ist.
Als Beispiel aktiviere ich den Drilldown für den ersten Report. Der Aufruf der anderen drei Reports wird auf die gleiche Weise durchgeführt.
Über das Kontextmenü der Spalte What functions mit dem Inhalt K1 wird die Funktion Drilldown ausgewähl:
Quelle: BärIm darauf folgenden Fenster werden der auszuführende Report und der zu übergebende Parameter ausgewählt:
Quelle: BärDanach sollten alle Werte mit K1 mit einem Unterstrich dargestellt werden:
Quelle: BärDies ist ein Hinweis dafür, dass hinter diesen Feldern eine Verknüpfung existiert, in unserem Fall ein Drilldown zum Report K1_IAU_Functions_Summary. Auf dieselbe Art können Sie die anderen Drilldowns implementieren. Sie können auch zusätzlich bei den vier Reports ein Drilldown zu dem jeweils nachfolgenden Report einrichten.
Viel Spaß dabei!
Der Autor Theo Bär schreibt regelmäßig für den MIDRANGE Deep Dive.
