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

6 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
  2. Zeljko

    Hallo Robert,
    eine Frage. Ist es möglich, ein Diagramm so aufzubereiten, dass es in einer Liste verwendet werden kann?
    Zum Beispiel, in der freigegebenen FA-Liste wird ein Wert dynamisch angezeigt, wenn ein Dokument ausgewählt wird.

    LG Zeljko

    Antworten
    1. Robert Beitragsautor

      Hi Zeljko,

      ich glaube nicht das generische Diagramme in Listen überhaupt in einer Liste anzeigen lassen.

      Aus meiner Sicht würde ich bei der Anforderung ein Diagramm in einer Liste einzublenden folgende Optionen in Betracht ziehen:

      – Power BI Factbox – das kann Daten in Bezug auf den gewählten Datensatz anzeigen, aber setzt auch voraus, dass man Power BI nutzt,
      – eigenes Javascript/.NET Addin in einer Factbox zur Umsetzung der grafischen Anforderung. Es müsste möglich sein Diagramme zu zeichnen (System.Web.DataVisualization / System.Drawing) – habe ich persönlich aber noch nicht gemacht.
      – Je nachdem welches business intelligence man nutzt, kann man auch dort die geforderte Auswertung vornehmen und per WebAdding (Darstellung einer Webseite as Addin einfach den Link zu dem gefilterten Diagramm aufrufen).

      Sofern die Daten nicht in real time zur Verfügung stehen müssen, könnte man auch einfach mit Bildern arbeiten.

      Beispiel:
      – Eine Aufgabenwarteschlage erstellt pro Fertigungsauftrag ein RDLC Bericht. Dieser Bericht kann beispielsweise ein Diagramm enthalten, welches als PDF oder Word gespeichert wird. Solche Daten kann man auch in ein Bild umwandeln und dieses dann in ein Blob oder in neueren Versionen in ein Mediaset einlesen. Bilder lassen sich leicht als Factbox zu einer Liste hinzufügen.

      Es kann aber auch gut sein, dass keine der genannten Wege eine gute Lösung für dein Problem darstellt. Das hängt sicher davon ab, was genau erreicht werden soll.

      VG
      Robert

      Antworten
  3. Engelhuber

    Hi und Danke für die Erklärung. Ich beschäftige mich zum ersten mal mit den Gen. Diagrammen und versuche nun ein Diagramm auf einer von mit erstellten Query zu erstellen.
    Wenn ich über die Tabelle gehe funktioniert alles, nur da kann ich keinen dynamischen Datumsfilter integrieren, also habe ich mir eine Query gebaut.

    Wenn ich aber nun versuche eine Aggregation per “Anzahl” zu erstellen, bekomme ich die Fehlermeldung “Sie können keine Anzahl für dieses Diagramm auswählen, weil die Quellenanfrage diese Aggregationsmethode nicht unterstützt.”

    Hast du vielleicht eine Idee was das sein könnte? Hab schon diverse Propertys an der Query ausprobiert, aber bekomme es nicht hin.

    Antworten
    1. Robert Beitragsautor

      Hey,

      kannst du vielleicht kurz beschreiben, was das generische Diagramm anzeigen soll und aus welcher Tabelle die Daten dazu kommen?

      Antworten

Schreibe einen Kommentar

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