Freigeben über


Verbessern der Berichtsleistung mit Filtern

Berichte, die große Datenmengen zurückgeben, könen schwer zu verwenden sein und können Leistungsprobleme verursachen. Um die Daten zu begrenzen, die in einem Bericht angezeigt werden, verwenden Sie Datenfilter.

Zusätzlich zur Datenfilterung, die von Reporting Services unterstützt wird, wird das Datenvorfiltern von Microsoft Dynamics 365 Customer Engagement (on-premises) unterstützt. Sie können Datenvorfilterung verwenden, um Folgendes zu tun:

  • Berichten kontextbezogen zu machen, indem Sie den Umfang eines Berichts einschränken, um mehr relevante Daten zurückzugeben.

  • Einen Ergebnissatz schneller abzurufen und anzuzeigen, da nur relevantere Daten zurückgegeben werden.

  • Lassen Sie en Bericht mithilfe der Funktion Erweiterte Suche filtern.

Wichtig

Derzeit können Berichtsabfragen mit hierarchischen Operatoren, beispielsweise dem Under-Operator, nicht mit der Berichtsfilterung verwendet werden. Wenn Sie versuchen, einen Bericht auszuführen, der einen hierarchischen Operator verwendet, wird der Bericht nicht gerendert.

Aktivieren von Datenvorfilterung in Fetch-basierten Berichten

Fetch-basierte Berichte unterstützen nur automatische Datenvorfilterung. Ein Bericht kann mehrere Datensätze und mehrere FetchXML Abfragen enthalten. Ein Dataset unterstützt eine FetchXML Abfrage. Um die Vorabfilterung für die primäre oder verknüpfte Entität in einem Fetch-basierten Bericht zu aktivieren, müssen Sie den Wert des Parameters enableprefiltering auf "1" festlegen sowie einen Parameternamen in der prefilterparametername-Eigenschaft angeben. Der Parametername sollte mit "CRM_" beginnen, um ihn als ausgeblendeten Parameter zu kennzeichnen. Wie beim SQL Server-basierten Bericht fungiert dieser in der FetchXML Abfrage angegebene Parameter als Unterabfrage innerhalb der FetchXML Abfrage, und die Unterabfrage wird mit dem vom Benutzer beim Ausführen eines Berichts im Bereich Erweiterte Suche angegebenen Wert erstellt.

Das folgende Beispiel zeigt, wie die Vorfilterung für die primäre Entität in der FetchXML Abfrage aktiviert wird.

<CommandText  
 <fetch distinct="false" mapping="logical">  
   <entity name="account" enableprefiltering="1" prefilterparametername="CRM_FilteredAccount">  
      <attribute name="name" />  
      <attribute name="accountid" />  
   </entity>  
 </fetch>  
</CommandText>  
<DataSourceName>CRM</DataSourceName>  
  1. Ebenso können Sie Vorabfilterung für die verknüpfte Entität aktivieren. Sie können auch eine andere Vorfilterbedingung für die verknüpfte Entität in der FetchXML Abfrage angeben, indem Sie in der prefilterparametername Eigenschaft einen anderen und eindeutigen Namen für den Parameternamen angeben.

    Wenn Sie manuell eine Fetch-basierte Berichtsdefinition ändern, ohne den Berichts-Assistenten oder SQL Server Data Tools für die Vorfilterung nach primären und verknüpften Entitäten zu verwenden, müssen Sie Folgendes sicherstellen:

    <fetch distinct="false" mapping="logical">  
    <entity name="account" enableprefiltering="1" refilterparametername="CRM_FilteredAccount">  
    
  2. Einen geeigneten Abfrageparameter mit demselben Namen erstellen, wie für die Eigenschaft prefilterparametername angegeben. Achten Sie darauf, dass der Parametername mit CRM_ beginnt, um ihn als ausgeblendeten Parameter zu kennzeichnen.

    <QueryParameters>  
    <QueryParameter Name="CRM_FilteredAccount">  
    <Value>=Parameters!CRM_FilteredAccount.Value</Value>  
    </QueryParameter>  
    
  3. Erstellen Sie einen geeigneten Berichtsparameter mit demselben Namen.

    <ReportParameters>  
    <ReportParameter Name="CRM_FilteredAccount">  
    <DataType>String</DataType>  
    <Prompt>CRM Filtered Account</Prompt>        
    </ReportParameter>  
    </ReportParameters>    
    

Aktivieren der Datenvorfilterung in SQL-basierten Berichten (nur Dynamics 365 On-premises)

Es gibt zwei Möglichkeiten, die Datenvorfilterung zu aktivieren in Microsoft Dynamics 365 SQL-basierten Berichten: automatisch und explizit.

Automatische Vor-Filterung

Die automatische Datenvorfilterung eignet sich für einfache Abfragen. Um die automatische Datenvorfilterung für einen Bericht zu aktivieren, können Sie Aliase für Entitätstabellen in Abfragen verwenden. Verwenden Sie dazu einen Aliasnamen, der mit CRMAF_ beginnt.

Die folgenden Beispiele zeigen beispielsweise zwei einfache Abfragen, von denen eine geändert wurde, um die Vorfilterung für die Firma-Entität zu aktivieren.

Abfrage ohne Vorfilterung.

   SELECT <column1>, <column2>, <columnN>
   FROM FilteredAccount; 

Wenn Sie die Funktion zum automatischen Vorfiltern von Daten mithilfe von CRMAF_ Präfix aktivieren, ändert Microsoft Dynamics 365 die Abfrage so, dass sie einen Parameter (z. B. P1) enthält, wenn sie in Dynamics 365 hochgeladen wird, wie in den folgenden Beispielen gezeigt.

Abfrage mit automatischer Vorfilterung.

   SELECT <column1>, <column2>, <columnN>
   FROM FilteredAccount AS CRMAF_FilteredAccount;

Dynamics 365 übergibt eine Abfrage an den P1-Parameter, je nachdem, wie der Bericht gefiltert wird. Mit anderen Worten, die automatische Datenvorfilterung fungiert als Unterabfrage innerhalb der vorhandenen Abfrage.

Die folgenden Beispiele veranschaulichen, wie Dynamics 365 Abfragen gemäß unterschiedlichen Filteranforderungen an den Parameter (P1) übergibt. In diesen Beispielen wird davon ausgegangen, dass Sie den Bericht vom Berichte Bereich in Dynamics 365 ausführen und die Datenfilteroption verwenden.

Beispiel 1

Wenn Sie nur aktive Konten anzeigen möchten, würde die resultierende Abfrage wie folgt aussehen:

SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* FROM FilteredAccount WHERE statecode = 0)
AS CRMAF_FilteredAccount

Beispiel 2

Wenn Sie sich in einem bestimmten Konto befinden und den Bericht ausführen, würde die resultierende Abfrage wie folgt aussehen:

SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* FROM FilteredAccount WHERE AccountId = '<CurrentAccountId>')
AS CRMAF_FilteredAccount

Beispiel 3

Wenn Sie eine Liste mit drei ausgewählten Konten haben und die Option auswählen, den Bericht für die ausgewählten Datensätze auszuführen, würde die resultierende Abfrage wie folgt aussehen:

SELECT <column1>, <column2>, <columnN>
FROM  (SELECT FilteredAccount.* FROM FilteredAccount WHERE AccountId in ('<1stAccountId>', '<2ndAccountId>', '<3rdAccountId>') 
AS CRMAF_FilteredAccount

Wenn Entitätstabellennamen Aliasnamen haben, wird die Benutzeroberfläche „Erweiterte Suche“ automatisch in den bereitgestellten Bericht aufgenommen, wenn er von Dynamics 365 ausgeführt wird.

Um einen Entitätstabellennamen im Abfrage-Generator zu aliasieren, klicken Sie mit der rechten Maustaste auf jede Tabelle in Ihrem Bericht, wählen Sie Eigenschaften aus, und geben Sie dann den Aliaswert in das Formular CRMAF_FilteredEntity ein, zum Beispiel RMAF_FilteredAccount.

Einschränkung der automatischen Vorfilterung

Wenn Sie das CRMAF_ Präfix verwenden, um die automatische Vorfilterung zu aktivieren, fügt Dynamics 365 einen Parameter in der Abfrage hinzu. Bei einer komplexeren Abfrage, z. B. einer Abfrage, die UNION-Anweisungen verwendet, kann dies zu unerwarteten Ergebnissen führen, da Dynamics 365 den Parameter möglicherweise nur zur ersten Abfrage hinzufügt.

Betrachten Sie beispielsweise die folgende Abfrage, die UNION-Anweisungen enthält:

SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = ‘FL'
UNION
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = 'CA'

Wenn Sie den Bericht hochladen, filtert Dynamics 365 möglicherweise nur die erste Abfrage mit dem Parameter. Dies führt dazu, dass die Filterung nicht auf die zweite Abfrage angewendet wird:

SELECT <column1>, <column2>, <columnN>
FROM  (@P1) AS CRMAF_FilteredAccount WHERE address1_stateorprovince = 'FL'
UNION
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = 'CA'

Im vorherigen Beispiel wird beim Ausführen des Berichts vom Bereich Berichte in Dynamics 365 der Filter als Jahresumsatz größer als 1.000.000 ausgewählt, wonach Dynamics 365 eine Abfrage an den P1-Parameter wie folgt übergibt:

SELECT <column1>, <column2>, <columnN>
FROM  (SELECT FilteredAccount.* from FilteredAccount where AnnualRevenue > 1000000) AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = 'FL'
UNION
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = 'CA'

Dies bedeutet, dass die Abfrage nur die Konten in Florida mit einem Jahresumsatz von mehr als $1.000.000 und alle Konten in Kalifornien zurückgeben würde, was nicht Ihre Absicht war. Sie wollten alle Konten in Florida und Kalifornien mit einem Jahresumsatz von mehr als $1.000.000 anzeigen.

Wenn Sie den Bericht von Dynamics 365 herunterladen und in Microsoft Visual Studio öffnen, sehen Sie die Originalversion des Berichts, den Sie in Dynamics 365 hochgeladen haben. Wenn Sie den Bericht direkt von Microsoft SQL Server Berichterstellung herunterladen, werden Sie feststellen, dass Dynamics 365 die Abfrage geändert hat, aber den Parameter nicht dort platziert hat, wo Sie ihn haben wollten.

Für komplexe Abfragen wie diese müssen Sie eine explizite Vorfilterung verwenden.

Explizite Vorfilterung

Bei komplexen Abfragen wie Abfragen mit UNION-Anweisungen müssen Sie möglicherweise eine explizite Vorfilterung verwenden. Anders als bei der automatischen Vorfilterung schreibt Dynamics 365 die Berichtsabfrage nicht neu, indem Werte während der expliziten Vorfilterung an die Parameter übergeben werden, wenn ein solcher Bericht in Dynamics 365 hochgeladen wird. Sie müssen die erforderlichen Änderungen explizit am Bericht vornehmen, indem Sie den Vorfilterungsparameter zum Bericht hinzufügen und dann in der Abfrage auf den Parameter verweisen. Sie können dann die Abfrage mit der dynamischen SQL ausführen.

Wenn Sie dynamisches SQL verwenden, wird das Filtern über die erweiterte Suche aktiviert, indem ein verborgener Parameter mit dem Namen CRM_FilteredEntity erstellt wird, zum Beispiel CRM_FilteredAccount und indem Sie diesen Parameter in einem dynamischen SQL-Abfrageausdruck verwenden. Dieser Parameter ermöglicht das Filtern der Tabellendaten, die von der angegebenen gefilterte Ansicht erhalten wurden.

Anhand des gleichen zuvor erläuterten Beispiels zur Hervorhebung der Einschränkung der automatischen Vorfilterung, zeigt die folgende Tabelle eine Abfrage mit automatischer Vorfilterung, die geändert wurde, um eine explizite Vorfilterung mithilfe von dynamischem SQL zu verwenden. Es wird auch davon ausgegangen, dass während der Ausführung des Berichts vom Bereich Berichte in Dynamics 365 der Filter als Jahresumsatz größer als 1.000.000 angewendet wurde.

Abfrage mit automatischer Vorfilterung.

   SELECT <column1>, <column2>, <columnN>
   FROM FilteredAccount AS CRMAF_FilteredAccount
   WHERE address1_stateorprovince = ‘FL'
   UNION
   SELECT <column1>, <column2>, <columnN>
   FROM FilteredAccount AS CRMAF_FilteredAccount
   WHERE address1_stateorprovince = 'CA'

Notiz

Die meisten SQL-basierten Standardberichte von Dynamics 365 verwenden die explizite Vorfilterungsoption.

Übergeben von Filtern in der Filterzusammenfassung

Eine Filterzusammenfassung zeigt den Wert des Filters an, der verwendet wird, wenn ein Bericht ausgeführt wird. In Berichten wird er als Textfeldberichtselement im Berichtskopf angezeigt, der den Filtertextwert enthält. Wenn der Benutzer den Bericht ausführt, wird im Berichts-Viewer eine Schaltfläche Filter bearbeiten angezeigt. Wenn der Benutzer auf die Schaltfläche klickt wird, kann er einen Datenfilter definieren. Ein Beispiel einer Filterzusammenfassung findet sich im Benutzerzusammenfassungsbericht, der in Customer Engagement (on-premises) enthalten ist.

Um eine Filterzusammenfassung einem Bericht hinzuzufügen, gehen Sie folgendermaßen vor:

  1. Erstellen Sie einen ausgeblendeten Zeichenfolgenparameter mit dem Namen CRM_FilterText.

  2. Fügen Sie ein Textfeldberichtselement zu dem Bericht hinzu, und legen Sie dessen Value-Eigenschaft wie folgt fest:
    =Parameters!CRM_FilterText.Value.

    Wenn der Bericht ausgeführt wird, wird der Wert des Parameters CRM_FilterText vom System auf den Text des aktuellen Filters festgelegt.

Standardfilter

Beim Veröffentlichen eines Berichts können Sie einen Standardfilter festlegen. Für alle Berichte, die mit dem Berichts-Assistenten erstellt wurden, wird der Filter, wenn Sie keinen Standardfilter festlegen, automatisch für alle Datensätze der Entität festgelegt, die in den letzten 30 Tagen geändert wurden. Das Verfahren zum Festlegen eines Standardberichtfilters finden Sie unter Berichte veröffentlichen.

Siehe auch

Handbuch zu Berichterstellung und Analyse
Dynamics 365 for Customer Engagement (on-premises) Berichterstellungsüberlegungen