Report Manager
-
Hi,
mal wieder eine Frage zu Reports…
Ich möchte gerne über den Abfrage-Editor einen Report erstellen, der u.a. die installierte Software enthält. Dazu wähle ich die Attribute wie im angehängten Bild aus.
Überraschenderweise (zumindest überraschend für mich) stehen im Report unter "Anwendungen" die installierten Betriebssysteme.
Wo liegt mein Fehler?
Bis denn
Thomas Wallutis
PS: Im SQL Editor sieht die Abfrage wie folgt aus:
SELECT
obj_main.isys_obj__id AS 'id',
obj_main.isys_obj__title AS 'LC__UNIVERSAL__TITLE###1',
j14.isys_obj__title AS 'LC__UNIVERSAL__TITLE#LC__CMDB__CATG__APPLICATION_OBJ_APPLICATION###1',
j7.isys_catg_cpu_list__cores AS 'LC__CMDB__CATG__CPU_CORES###4',
j9.isys_memory_title__title AS 'LC__CMDB__CATG__TITLE###5',
j10.isys_catg_memory_list__id AS 'isys_cmdb_dao_category_g_memory::dynamic_property_callback_capacity::isys_catg_memory_list__id::LC__CMDB_CATG__MEMORY_CAPACITY',
j1.isys_catg_stor_list__id AS 'isys_cmdb_dao_category_g_stor::dynamic_property_callback_capacity::isys_catg_stor_list__id::LC__CMDB_CATG__MEMORY_CAPACITY',
j13.isys_obj__title AS 'LC__UNIVERSAL__TITLE#Betriebssystem###1'FROM isys_obj AS obj_main
INNER JOIN isys_cmdb_status AS obj_main_status ON obj_main_status.isys_cmdb_status__id = obj_main.isys_obj__isys_cmdb_status__id
LEFT JOIN isys_catg_stor_list AS j1 ON j1.isys_catg_stor_list__isys_obj__id = obj_main.isys_obj__id
LEFT JOIN isys_catg_application_list AS j4 ON j4.isys_catg_application_list__isys_obj__id = obj_main.isys_obj__id AND j4.isys_catg_application_list__isys_catg_application_priority__id IS NOT NULL
LEFT JOIN isys_connection AS j3 ON j3.isys_connection__id = j4.isys_catg_application_list__isys_connection__id
LEFT JOIN isys_obj AS job3 ON j3.isys_connection__isys_obj__id = job3.isys_obj__id
LEFT JOIN isys_catg_cpu_list AS j7 ON j7.isys_catg_cpu_list__isys_obj__id = obj_main.isys_obj__id
LEFT JOIN isys_catg_memory_list AS j10 ON j10.isys_catg_memory_list__isys_obj__id = obj_main.isys_obj__id
LEFT JOIN isys_memory_title AS j9 ON j9.isys_memory_title__id = j10.isys_catg_memory_list__isys_memory_title__id
LEFT JOIN isys_obj AS j13 ON j13.isys_obj__id = job3.isys_obj__id
LEFT JOIN isys_obj AS j14 ON j14.isys_obj__id = job3.isys_obj__id
LEFT JOIN isys_obj_type AS j15 ON j15.isys_obj_type__id = obj_main.isys_obj__isys_obj_type__id
LEFT JOIN isys_catg_global_list AS j18 ON j18.isys_catg_global_list__isys_obj__id = obj_main.isys_obj__id
LEFT JOIN isys_purpose AS j17 ON j17.isys_purpose__id = j18.isys_catg_global_list__isys_purpose__id
LEFT JOIN isys_cmdb_status AS j12 ON j12.isys_cmdb_status__id = obj_main.isys_obj__isys_cmdb_status__idWHERE TRUE
AND ( (j15.isys_obj_type__id != '60' ) AND (j15.isys_obj_type__id != '63' ) ) AND ( (j15.isys_obj_type__id = '5' ) ) AND ( (j17.isys_purpose__id != '4' ) ) AND ( (j12.isys_cmdb_status__id = '6' ) ) ORDER BY obj_main.isys_obj__title DESC;
-
Nachtrag: ich habe jetzt mal eine ganz kleine Abfrage erstellt. Unter "Gewählte Attribute" habe ich nur "Name (Allgemein)" und "Anwendung (Softwarezuweisung)" ausgewählt. Bei "Anwendung (Softwarezuweisung)" habe ich über die Lupe noch "Name (Allgemein)" ausgewählt.
Trage ich bei den Bedingungen nur einen Hostnamen ein, so werden mir für diesen Server auch alle installierten SW-Produkte angezeigt (inkl. Betriebssystem).
Nehme ich die Bedingung raus, dann erhalte ich einen report mit zwei Spalten: "Name" und "Anwendung -> Name"
Unter "Name" finde ich dann bunt gemixt die Namen von Applikationen, Servern und Betriebssystemen.
Hier die Abfrage im SQL Editor:
Snip–---
SELECT
obj_main.isys_obj__id AS 'id',
obj_main.isys_obj__title AS 'LC__UNIVERSAL__TITLE###1',
j6.isys_obj__title AS 'LC__UNIVERSAL__TITLE#LC__CMDB__CATG__APPLICATION_OBJ_APPLICATION###1'FROM isys_obj AS obj_main
INNER JOIN isys_cmdb_status AS obj_main_status ON obj_main_status.isys_cmdb_status__id = obj_main.isys_obj__isys_cmdb_status__id
LEFT JOIN isys_catg_application_list AS j3 ON j3.isys_catg_application_list__isys_obj__id = obj_main.isys_obj__id
LEFT JOIN isys_connection AS j2 ON j2.isys_connection__id = j3.isys_catg_application_list__isys_connection__id
LEFT JOIN isys_obj AS job2 ON j2.isys_connection__isys_obj__id = job2.isys_obj__id
LEFT JOIN isys_obj AS j6 ON j6.isys_obj__id = job2.isys_obj__id
LEFT JOIN isys_obj_type AS j7 ON j7.isys_obj_type__id = obj_main.isys_obj__isys_obj_type__idWHERE TRUE
AND ( (j7.isys_obj_type__id != '60' ) AND (j7.isys_obj_type__id != '63' ) ) ORDER BY obj_main.isys_obj__title DESC;
Snip-----
Bei einigen Servern steht unter "Name" der Server und unter "Anwendung (Name)" die installierte SW bzw. das OS.
Nicht ganz was ich erwartet hätte...
-
Gerade gesehen: auch die Lizenzen stehen unter "Name".
-
Hallo twallutis,
wenn ich mir Deine WHERE Bedingung so anschaue, wundert mich nicht, dass Dir so viele verschiedene Objekttypen dargestellt werden.
AND ( (j7.isys_obj_type__id != '60' ) AND (j7.isys_obj_type__id != '63' ) ) ORDER BY obj_main.isys_obj__title DESC;
Die Bedingung beinhaltet ja nur, dass die Objekttypen weder Beziehungen noch parallele Beziehungen sein duerfen, alles andere ist erlaubt.
Du kannst eine Bedingung einfuegen, die prueft, dass die Objekte in der ersten Spalte (obj_main) nur Server sein duerfen und die Objekte in der zweiten Spalte (j6) nur Software sein darf.
Das auf einem Server installierte Betriebssystem wird in der Kategorie Softwarezuweisung dargestellt, auch wenn es ueber die Kategorie Betriebssystem gepflegt wird. Dadurch taucht diese Information ebenfalls in dem Report auf.Gruss,
jkondek -
Tja, nur habe ich keine Ahnung, woher diese Bedingung kommt. Ich erstelle alle Abfragen über die GUI, da mein SQL-KnowHow eher bescheiden ist.
-
So, noch mal überprüft:
AND ( (j7.isys_obj_type__id != '60' ) AND (j7.isys_obj_type__id != '63' ) ) ORDER BY obj_main.isys_obj__title DESC;
Das steht in jeder Abfrage. Schon mal was gelernt.
Das auf einem Server installierte Betriebssystem wird in der Kategorie Softwarezuweisung dargestellt, auch wenn es ueber die Kategorie Betriebssystem gepflegt
wird. Dadurch taucht diese Information ebenfalls in dem Report auf.Das halte ich für eher unglücklich.
Aber vielleicht sollte ich mal formulieren, was ich eigentlich will: eine Liste aller Server, in denen Folgendes drin steht:
- Name des Servers
- Anzahl CPUs/Kerne
- RAM-Größe gesamt
- Größe der Festplatten (nicht zwingend Partitionen)
- Betriebssystem
- installierte Anwendungen (ohne(!) OS)
Bis denn
Thomas Wallutis
-
So langsam habe ich echt Zweifel an der Qualität des Report Managers…
Ich habe jetzt mal zwei Testabfragen erstellt. Es sollen nur die unter "Server" eingetragenen Objekte angezeigt werden und auch nur dann, wenn sie "In Betrieb" sind. Angezeigt werden sollen im ersten Fall nur "Anwendungen (Name)" und "Betriebssystem (Name)", im zweiten Fall nur "Anwendungen (Name)".
Hier die SQL-Abfragen:
Abfrage 1:
SELECT
obj_main.isys_obj__id AS 'id',
j5.isys_obj__title AS 'LC__UNIVERSAL__TITLE#Betriebssystem###1',
j6.isys_obj__title AS 'LC__UNIVERSAL__TITLE#LC__CMDB__CATG__APPLICATION_OBJ_APPLICATION###1'FROM isys_obj AS obj_main
INNER JOIN isys_cmdb_status AS obj_main_status ON obj_main_status.isys_cmdb_status__id = obj_main.isys_obj__isys_cmdb_status__id
LEFT JOIN isys_catg_application_list AS j2 ON j2.isys_catg_application_list__isys_obj__id = obj_main.isys_obj__id AND j2.isys_catg_application_list__isys_catg_application_priority__id IS NOT NULL
LEFT JOIN isys_connection AS j1 ON j1.isys_connection__id = j2.isys_catg_application_list__isys_connection__id
LEFT JOIN isys_obj AS job1 ON j1.isys_connection__isys_obj__id = job1.isys_obj__id
LEFT JOIN isys_obj AS j5 ON j5.isys_obj__id = job1.isys_obj__id
LEFT JOIN isys_obj AS j6 ON j6.isys_obj__id = job1.isys_obj__id
LEFT JOIN isys_obj_type AS j7 ON j7.isys_obj_type__id = obj_main.isys_obj__isys_obj_type__id
LEFT JOIN isys_cmdb_status AS j4 ON j4.isys_cmdb_status__id = obj_main.isys_obj__isys_cmdb_status__idWHERE TRUE
AND ( (j7.isys_obj_type__id != '60' ) AND (j7.isys_obj_type__id != '63' ) ) AND ( (j7.isys_obj_type__id = '5' ) ) AND ( (j4.isys_cmdb_status__id = '6' ) ) ORDER BY j5.isys_obj__title DESC;
Abfrage 2:
SELECT
obj_main.isys_obj__id AS 'id',
j5.isys_obj__title AS 'LC__UNIVERSAL__TITLE#LC__CMDB__CATG__APPLICATION_OBJ_APPLICATION###1'FROM isys_obj AS obj_main
INNER JOIN isys_cmdb_status AS obj_main_status ON obj_main_status.isys_cmdb_status__id = obj_main.isys_obj__isys_cmdb_status__id
LEFT JOIN isys_catg_application_list AS j2 ON j2.isys_catg_application_list__isys_obj__id = obj_main.isys_obj__id
LEFT JOIN isys_connection AS j1 ON j1.isys_connection__id = j2.isys_catg_application_list__isys_connection__id
LEFT JOIN isys_obj AS job1 ON j1.isys_connection__isys_obj__id = job1.isys_obj__id
LEFT JOIN isys_obj AS j5 ON j5.isys_obj__id = job1.isys_obj__id
LEFT JOIN isys_obj_type AS j6 ON j6.isys_obj_type__id = obj_main.isys_obj__isys_obj_type__id
LEFT JOIN isys_cmdb_status AS j4 ON j4.isys_cmdb_status__id = obj_main.isys_obj__isys_cmdb_status__idWHERE TRUE
AND ( (j6.isys_obj_type__id != '60' ) AND (j6.isys_obj_type__id != '63' ) ) AND ( (j6.isys_obj_type__id = '5' ) ) AND ( (j4.isys_cmdb_status__id = '6' ) ) ORDER BY j5.isys_obj__title DESC;
Im ersten Fall habe ich angeblich 31 Treffer, wobei aber maximal 20 Zeilen angezeigt werden. In beiden Spalten steht dasselbe, nämlich das Betriebssystem.
Bei der zweiten Abfrage (Kopie der ersten Abfrage; nur eine Anzeigeoption entfernt) bekomme ich 212 Treffer. Hier sind die ersten angezeigten Anwendungen zwar auch Betriebssysteme, aber danach folgen zumindest "richtige Anwendungen".
Die Logik dahinter will sich mir nicht erschliessen.
Bis denn
Thomas Wallutis
Edit: nur um die Anmerkung "Die Logik dahinter will sich mir nicht erschliessen" mal zu erklären: ich gehe davon aus, dass die meisten Leute die Abfragen über die GUI erstellen. Das erhaltene Ergebnis weicht IMHO von dem erwarteten Ergebnis ab; insbesondere wenn ich nur einen Punkt ändere.
-
Hallo Thomas,
Tja, nur habe ich keine Ahnung, woher diese Bedingung kommt. Ich erstelle alle Abfragen über die GUI, da mein SQL-KnowHow eher bescheiden ist.
Die Bedingung kommt durch folgenden Teil in der GUI (Ausgabe):
Beziehungsobjekte mit ausgeben? Ja/Nein
Da "Nein" vorausgewaehlt ist und Du das vermutlich nicht auf "Ja" geaendert hast, kommt diese Bedingung zustande.Zu Abfrage 1:
Es war mir zu kompliziert, durch das ganze GUI-produzierte SQL durchzublicken, daher hier eine passende Abfrage:SELECT
a.Server,
a.Betriebssystem,
b.AnwendungFROM
(SELECT
j1.isys_obj__id AS ID,
j1.isys_obj__title AS Server,
j4.isys_obj__title AS BetriebssystemFROM isys_obj AS j1
LEFT JOIN isys_catg_application_list AS j2
ON j2.isys_catg_application_list__isys_obj__id = j1.isys_obj__id
AND j2.isys_catg_application_list__isys_catg_application_type__id = 2LEFT JOIN isys_connection AS j3
ON j3.isys_connection__id = j2.isys_catg_application_list__isys_connection__idLEFT JOIN isys_obj AS j4
ON j4.isys_obj__id = j3.isys_connection__isys_obj__idWHERE TRUE
AND j1.isys_obj__isys_cmdb_status__id = 6
AND j1.isys_obj__isys_obj_type__id = 5) aLEFT JOIN
(SELECT
j1.isys_obj__id AS ID,
j4.isys_obj__title AS AnwendungFROM isys_obj AS j1
LEFT JOIN isys_catg_application_list AS j2
ON j2.isys_catg_application_list__isys_obj__id = j1.isys_obj__id
AND j2.isys_catg_application_list__isys_catg_application_type__id = 1LEFT JOIN isys_connection AS j3
ON j3.isys_connection__id = j2.isys_catg_application_list__isys_connection__idLEFT JOIN isys_obj AS j4
ON j4.isys_obj__id = j3.isys_connection__isys_obj__idWHERE TRUE
AND j4.isys_obj__isys_obj_type__id = 2) bNicht ueber die verschachtelten SELECT-Statements wundern, musste die Anwendungen auslagern, damit auch Server ohne Anwendungen in der Ergebnisliste auftauchen. Es werden nun alle in Betrieb befindlichen Server im Ergebnis dargestellt, egal ob mit/ohne Betriebssystem oder Anwendung.
Falls Du bei der weiteren Report-Erstellung mit den noch benoetigten Informationen Hilfe brauchst meld Dich gerne.
- Anzahl CPUs/Kerne
- RAM-Größe gesamt
- Größe der Festplatten (nicht zwingend Partitionen)
Gruss,
jkondek -
Es war mir zu kompliziert, durch das ganze GUI-produzierte SQL durchzublicken, daher hier eine passende Abfrage:
YMMD!
Ja, das sieht gut aus. Danke!
- Anzahl CPUs/Kerne
- RAM-Größe gesamt
- Größe der Festplatten (nicht zwingend Partitionen)
Bei den ersten beiden Punkten scheint die Schwierigkeit zu sein, die Gesamtzahl herauszubekommen (und nicht die Einzelpunkte).
Ich bastle auch gerade mit dem Dokumente-AddOn herum; vielleicht kriege ich es ja da hin.
Bis denn
Thomas
Edit: die SQL Statements könnten auch in Alt-Aramäisch sein…;-)
-
Hallo Thomas,
- Anzahl CPUs/Kerne
- RAM-Größe gesamt
- Größe der Festplatten (nicht zwingend Partitionen)
Bei den ersten beiden Punkten scheint die Schwierigkeit zu sein, die Gesamtzahl herauszubekommen (und nicht die Einzelpunkte).
Dafuer wirst Du nicht um SQL drum herum kommen, da der Report Manager keine Funktion zum Summieren der Ergebnisse hat.
Gruss,
jkondek