Dynamics NAV – Verwendung von Queries #2 – Generische Diagramme

Von | 30. Oktober 2016

Hallo Leute,

im Beitrag Dynamics NAV – Verwendung von Queries habe ich über einen nützlichen Anwendungsfall von Queries (Abfragen) gesprochen. In diesem Beitrag möchte ich über eine weitere Einsatzmöglichkeit von Queries, den generischen Diagrammen, berichten. Wer sich zuerst einlesen möchte, der kann sich den Beitrag im MSDN ansehen (How to: Create Generic Charts). Des Weiteren gib es hier auch eine Einleitung auf deutsch, wie generische Diagramme eingerichtet werden können (Microsoft Dynamics NAV 2013 – neue Auswertungsmöglichkeiten).

In den generischen Diagrammen kann ich grundsätzlich zwischen zwei Datenquellen wählen:

  • Tabellen und deren Felder
  • Abfragen (Queries) und deren Spalten & Filter

queries2_1_generischediagramme

Generische Diagramme bieten sich für eine schnelle Auswertung bestimmter Daten an. In meinem Beispiel befassen wir uns daher mit Kunden- und Lieferanten-Stammdaten. Wir wollen beispielsweise wissen, welche Kunden oder Lieferanten ein Saldo von höher als 1.000 bzw. 10.000 € aufweisen. Wir schauen uns daher die Debitoren mit einem Saldo von mehr als 10.000 € an.

Diese Information steht uns im Microsoft Standard über das Feld Saldo in der Kundentabelle (Tabelle 18 Customer) und in der Lieferantentabelle (Tabelle 23 Vendor) bereits mit dem Flowfield “Balance” (Saldo) zur Verfügung.

queries2_2_flowfield_balance

Wenn wir nun versuchen unsere Anforderung mit einem generischen Diagramm umzusetzen, dann könnte das so aussehen:

  1. ID = T18_50000 (Tabelle 18 / 50000 erstes individuelles generisches Diagramm)
  2. Name = Debitor (Saldo MW > 10000)
  3. Herkunftsart = Tabelle
  4. Herkunfts-ID = 18
  5. Erforderliche Kennzahl (Balance LCY) -> Saldo (MW)
  6. y-Achse – Titel = Saldo (MW)
  7. x-Achse – Feld = Name
  8. x-Achse – Titel = Name
  9. Beschreibung = Zeigt alle Debitoren mit einem Saldo (MW) > 10.000 €
  10. Filter auf das Feld Balance (LCY) = “>10000”

queries2_3_generischediagramm_flowfieldbalance

Nun integrieren wir das Diagramm in unserer Rollencenter. Dafür führe ich folgende Schritte durch:

  • Öffnen des Rollencenters (Ich nutze für mein Beispiel das Rollencenter 9007 -> Profil Einkäufer)
  • Anpassen der Rollencenterseite

queries2_4_generischediagramm_rollencenter1

  • Diagrammabschnitt hinzufügen und somit ein “Leeres Diagramm” im Layout des Rollencenters erzeugen.

queries2_5_generischediagramm_rollencenter2

  • Im Rollencenter das “Leere Diagramm” auswählen und dort auf Anpassen klicken:

queries2_6_generischediagramm_rollencenter3

  • Das individuelle Diagramm auswählen “T18_50000” und mit “OK” bestätigen.

queries2_7_generischediagramm_rollencenter4

  • Nun können wir uns das Ergebnis ansehen:

queries2_8_generischediagramm_rollencenter5

Je nach Anzahl der detaillierten Debitorenposten kann die Performance hier stark schwanken. Ich habe per Stapelverarbeitung 500.000 detaillierte Debitorenposten in einem Cronus Mandanten erzeugt. Trotz meiner sehr leistungsstarken Testumgebung benötigt das generische Diagramm nun ca. 30 Sekunden zum Anzeigen der Daten. Es kann also festhalten werden: Umso mehr detaillierte Debitorenposten vorhanden sind umso länger braucht das Diagramm. Das liegt einfach daran, dass die folgenden Kriterien ungünstig sind:

  • Berechnung eines Flowfields pro Debitor
  • Filterung auf ein FlowField

So sieht das dann für den Anwender aus und das jedes Mal, wenn die Rollencenterseite geöffnet wird. Das ist dann nicht mehr so schön.

queries2_9_generischediagramm_rollencenter6

Die Alternative dazu stellt eine Query da, die wesentlich schneller ist. Ich orientiere mich am Flowfield, da ich das exakt gleiche Ergebnis haben möchte. So sieht dann meine Query aus:

  • No. – aus der Debitorentabelle
  • Name – aus der Debitorentabelle
  • Amount / Amount (LCY) aus der Detaillierten Debitorenpostentabelle und die Verknüpfung über das Feld Debitorennr.

queries2_10_querydebitorensalden

Die Einrichtung des generischen Diagramms ist fast identisch mit der Einrichtung der Debitorentabelle (siehe oben). Folgende Änderungen sind vorhanden:

  • Herkunftart = Abfrage
  • Herkunfts-ID: 50001
  • Erforderliche Kennzahl -> Aggragation “Summe”

Ansonsten sind nur die Feldnamen etwas anders.

queries2_11_queryeinrichtunggenerrischesdiagramm

Nun können wir das Diagramm im Rollencenter austauschen und müssen dann den Client einmal neustarten:

queries2_12_einbindungrollencenter

Nach dem Neustart ist das generische Diagramm sofort geladen. Keine Wartezeit! Hier ist die Query wesentlich schneller als die Flowfield Variante.

Auch wenn ich viel Kritik über Query gelesen habe und es auch berechtigte Kritik gibt, weil es beispielsweise keine Standardintegration von Queries in Seiten oder Berichten als SourceTable gibt, so darf man nicht vergessen, dass Queries in manchen Bereichen sehr große Vorteile aufweisen können.

Das Query Objekt (Debitorensalden) könnt ihr hier herunterladen: 161030_CustomerBalanceQuery.zip

2 Gedanken zu “Dynamics NAV – Verwendung von Queries #2 – Generische Diagramme

  1. Hermann Schubert

    Hallo Robert,

    vielen Dank erst mal für die Arbeit, die Du dir für uns alle machst.

    Ich habe mal einen Query für ein Diagramm erstellt und bin an Grenzen gestossen:
    Fragestellung / Anzeige: 10-20 Kreditoren mit dem größten Einkaufswert in Zeitraum
    Poblem: a) ich hätte die Werte gern positiv dargestellt
    b) Ich weiss nicht, wie ich Query so einen Filter setzen soll. Der Diagramm-Filter passt auch nicht
    c) wie kann ich einen variablen Zeitraum verwenden ?
    Oder muss ich hier doch mit einer Zwischentabelle arbeiten ?
    Grüße
    ATLAN / Hermann Schubert

    Antworten
    1. Robert Beitragsautor

      Hi Hermann,

      a) Query können Werte nicht negieren oder positiv darstellen. Soweit ich weiß geht das auch nicht über die generischen Diagramme.
      b) Filterungen sind auf alle Felder der Tabelle oder der jeweiligen Query möglich (http://robert-dynamicsnav.de/wp-content/uploads/2016/10/Queries2_11_QueryEinrichtungGenerrischesDiagramm.jpg). In diesem Fall habe ich somit einen direkten Filter auf das Feld SUM_Amount_LCY gesetzt. Den Namen habe ich in der Query für dieses Feld hinterlegt, bzw. der Standard hat dies vorgegeben.
      c) Das ist mit Queries nicht machbar.

      Zwischentabellen wären eine Lösung, aber nach meiner Meinung nach nicht die Beste. Wenn du dich in SQL auskennst, bzw. SQL Skripte schreiben kannst, dann kannst du auch deine Query zu einer SQL View machen. Diese SQL View kannst du in Dynamics NAV anzeigen, wnen du eine neue Tabelle anlegst und diese mit dem gleichen Namen + der Eigenschaft “LinkedObject” = “Yes” hinterlegst.

      Dann hast du eine Tabelle, die dann all deine Anforderungen erfüllen kann:
      a) in einer SQL View kannst du Werte negieren oder nur positiv darstellen
      b) Du kannst dynamische Filter setzen
      c) Zeiträumen kannst du ebenso variabel deklarieren

      Mehr dazu findet man hier:
      – LinkedObject: http://www.msdynamics.de/viewtopic.php?t=2008 / https://msdn.microsoft.com/en-us/library/dd339076.aspx / https://msdn.microsoft.com/en-us/library/dd338595.aspx
      – SQL Views: http://techblog.byllemos.com/2008/05/using-sql-views-in-navision/ / https://dynamicsuser.net/nav/b/waldo/posts/how-to-display-an-sql-server-view-in-microsoft-dynamics-nav

      VG
      Robert

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.