CiAgICA8IS0tIExpbmtlZEluIC0tPgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgIF9saW5rZWRpbl9wYXJ0bmVyX2lkID0gIjEyMzUwNzMiOwogICAgICAgIHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyA9IHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyB8fCBbXTsKICAgICAgICB3aW5kb3cuX2xpbmtlZGluX2RhdGFfcGFydG5lcl9pZHMucHVzaChfbGlua2VkaW5fcGFydG5lcl9pZCk7CiAgICA8L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgKGZ1bmN0aW9uKCl7dmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF07CiAgICAgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgICAgIGIudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiO2IuYXN5bmMgPSB0cnVlOwogICAgICAgICAgICBiLnNyYyA9ICJodHRwczovL3NuYXAubGljZG4uY29tL2xpLmxtcy1hbmFseXRpY3MvaW5zaWdodC5taW4uanMiOwogICAgICAgICAgICBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsIHMpO30pKCk7CiAgICA8L3NjcmlwdD4KICAgIDxub3NjcmlwdD4KICAgICAgICA8aW1nIGhlaWdodD0iMSIgd2lkdGg9IjEiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBhbHQ9IiIgc3JjPSJodHRwczovL3B4LmFkcy5saW5rZWRpbi5jb20vY29sbGVjdC8/cGlkPTEyMzUwNzMmZm10PWdpZiIgLz4KICAgIDwvbm9zY3JpcHQ+CiAgICA8IS0tIEVuZCBMaW5rZWRJbiAtLT4KICAgIA==
Generic filters
Exact matches only
Search in title
Search in excerpt
Search in content

Berichtsmappengenerator – Ein komplexeres Beispiel

Oft sehen wir, dass teilweise Dinge manuell vorgenommen werden, obwohl man diese automatisieren kann. Häufig wird dabei der Berichtsmappengenerator unterschätzt oder nicht bedacht, sodass wir mit diesem Blogbeitrag gerne einmal vorstellen möchten, was man mit wenigen Schritten bereits erreichen kann. Gute Einführungen bieten dafür die DeltaMaster clicks! 06/2006 und 01/2012. An dieses Grundlagenwissen über den Berichtsmappengenerator knüpfen wir an und zeigen an einem Beispiel, welche Funktionen man nutzen kann, um ganze Ordnerstrukturen aufzubauen.

Zielsetzung

Wir haben eine Analysesitzung mit dem folgenden Berichtsaufbau:

Abbildung 1: Beispielhafter Aufbau der Analysesitzung

Nun wollen wir für jede Kundenregion einen Übersichtsbericht (Quelle: Bericht 1) erhalten und darunter in jeweils einem Unterordner pro Kundenregion die Detailberichte für jeden Kunden in dieser Kundenregion (Quelle: Bericht 3). Alle anderen Berichte benötigen wir nicht und dienen nur für die interaktive Anzeige. Man kann die beschriebene Vorgehensweise auch innerhalb komplexer Analysesitzungen verwenden.

Nachfolgend werfen wir einen kleinen Blick auf das gewünschte Ergebnis:

Zielergebnis
Abbildung 2: Zielergebnis

Vorbereitung der Umsetzung

  1. Was müssen wir also tun?
  2. Wir müssen den Bericht 2 entfernen.
  3. Wir müssen den Bericht 1 für jede Region vervielfältigen.
  4. Wir brauchen weiterhin für jede Region einen Unterordner im Ordner „relevanter Ordner“.
  5. Wir brauchen innerhalb jedes Unterordners jeweils den Bericht 3 für jeden Kunden der jeweiligen Kundenregion.

Umsetzung

Ordner entfernen

Dieser Punkt ist bereits ohne Berichtsmappengenerator umsetzbar.
Wir wählen den Ordner „relevanter Ordner“ als zu exportierenden Ordner aus und haben zusätzlich noch die Funktion „andere Ordner entfernen“ für den Job aktiviert. Diese Option ist standardmäßig aktiviert.

Nicht benötige Berichte entfernen

Im Berichtsmappengenerator gibt es die Spalte „Original löschen“. In diesem speziellen Fall soll kein Output generiert werden. Letzteres erreichen wir, wenn wir über eine leere Menge iterieren (s. Einstellung im Feld „Elemente“ im Screenshot):

Loeschen_eines_Berichts
Abbildung 3: Löschen eines Berichts

Bericht vervielfältigen

Dies wird bereits in den genannten DeltaMaster Clicks ausführlich beschrieben, sodass wir hier nicht näher darauf eingehen und das folgende Zwischenergebnis erhalten:

Duplizieren_eines_Berichts
Abbildung 4: Duplizieren eines Berichts

Ordnerstruktur und Berichte anlegen

Nun müssen wir eine Ordnerstruktur anlegen (für jede Kundenregion einen Unterordner) und dann darunter den Bericht mit der ID 2 für die jeweiligen Kunden hinzufügen.

Die Aufgabe lässt sich mit zwei weiteren Iteratoren in unserem Beispiel lösen:

Erstellen_Unterordnerstruktur
Abbildung 5: Erstellen der Unterordnerstruktur mit dazugehörigen Berichten

Der erste Iterator als Typ „Ohne” sorgt dafür, dass über die Kundenregionen iteriert wird. Er hat aber keinen Output.

Bei dem zweiten Iterator wird die ParentID mit der IteratorID mit dem Typ „Ohne“ gefüllt. Dadurch werden diese beiden Iteratoren ineinander verschachtelt ausgeführt und mit dem Befehl Descendants(,3) erhalten wir die Kunden der jeweiligen Kundenregion.

Damit wurde das Ziel schon erreicht, aber die Anordnung in der Vorschau ist noch nicht so, wie es gewünscht war:

  • Die vier Deckungsbeitagsschema-Berichte sollen oberhalb der Unterordner zu sehen sein.
  • Die Reihenfolge der Unterordner stimmt nicht mit der Anordnung der Kundenregionen in der Dimension überein.

Reihenfolge Berichte zu Unterordner

Wir ändern die Ausführungsreihenfolge in der Spalte Reihenfolge, sodass Iterator 2 für die Übersichtsberichtsduplizierung als letztes ausgeführt wird. Dadurch zeichnet der Publisher die Berichte als letztes und hängt sie oben an.


Abbildung 6: Anordnung verbessern

Reihenfolge der Regionen

Generell hängt der Publisher die Dinge stets oben innerhalb eines Ordners an. Damit nun bei der verschachtelten Ausführung die Reihenfolge der Kundenregionen auch korrekt ist, muss man die Reihenfolge der Elemente im Iterator 3 einmal umdrehen. Dies kann per MDX mit der Funktion ORDER erreicht werden, z.B.

ORDER([Kunde].[Kunde].[Region].members,[Kunde].[Kunde].currentMember.Properties("Key"),DESC),

Ein manueller Austausch funktioniert auch, wird hier aber nicht genauer betrachtet.

Damit erhalten wir das in der Zielsetzung vorgestellte Ergebnis.

Abbildung 7: Ergebnis

Anwendungsfall und Fazit

Wenn man eine Verbindung zur Datenbank hat, ist ein Vervielfachen eines Berichts natürlich nicht so spannend. Bei Exporten nach PDF und Office hätten wir uns die Unterordnerstruktur sparen können, da diese nicht exportiert wird.

Ideal geeignet ist dieses Beispiel also für Fälle ohne Verbindung zur Datenbank, aber mit einer Oberfläche, in der die Ordnerstruktur angezeigt wird. Die Berichtsformate offline und mobile sind Beispiele. Damit hat man automatisiert Daten strukturiert offline zur Verfügung ohne ständiges manuelles Eingreifen, auch wenn sich etwas in der Kundendimension ändert.

Natürlich lassen sich Teile des Beispiels in vielen weiteren Anwendungsfällen nutzen.

Behandelt haben wir hier nur zwei Funktionen neben den Grundfunktionalitäten, nämlich das Löschen von Objekten und die verschachtelte Iteration. Mit diesen zwei Erweiterungen kann man sehr viel automatisieren.

Hinweis: Die Publisherdatenbank (Version 6.2.6) und die dazugehörigen Analysesitzungen Ausgangssituation und Ergebnis stehen als Material zur Verfügung. Sie können bei Bissantz angefragt werden. Dort kann jede Einstellung nachvollzogen werden, da die Bilder nur die wichtigsten Einstellungen zeigen.