Sviluppo di oggetti query e pagina per Power BI

Completato

Per sviluppare un report Power BI, è buona norma sviluppare i set di dati richiesti dal report. È possibile usare l'ambiente di sviluppo per creare questi set di dati. In genere, questo processo prevede la creazione di una piccola estensione che contiene le query o le pagine richieste per un report. Per i servizi Web è richiesta anche una raccolta dei servizi Web per assicurare la pubblicazione automatica di query e pagine nella tabella dei servizi Web al momento dell'installazione e pubblicazione dell'estensione.

Quando si sviluppano query o pagine API, queste saranno automaticamente disponibili dopo la distribuzione dell'estensione. Le query e le pagine API non richiedono un file di raccolta dei servizi Web e non vengono pubblicate nella tabella Servizi Web.

Prima di iniziare a sviluppare l'estensione, per Power BI, si consiglia per prima cosa di analizzare in modo più dettagliato i requisiti. Ad esempio, potrebbe essere chiesto di creare un determinato report Power BI che richiede alcuni dati specifici e, in base a tale requisito, creare i set di dati. La prossima volta che verrà chiesto di creare un altro report Power BI, si ricomincia da capo e si creano più set di dati.

Invece di questo approccio sarebbe meglio pensare alle tabelle che spesso sono necessarie nella totalità o nella maggior parte dei report Power BI e crearle come set di dati separati. In questo modo è possibile riutilizzarle quando necessario. Pertanto, si creano innanzitutto i blocchi predefiniti di un report Power BI tipico, che si potranno poi riutilizzare per la creazione di altri report. Alla fine, si avranno meno set di dati e non sarà necessario ricominciare sempre da capo per ogni nuovo report Power BI.

Nel prossimo modulo di questo percorso di apprendimento, spiegheremo come pensare al modello di dati di un report tipico. Sulla base di quel modello di dati, in genere chiamato schema star o snowflake, è possibile creare query (o pagine) e pubblicarle come servizi Web.

La procedura seguente spiega come creare una nuova estensione che includa nuove pagine e query, per renderle disponibili come servizi Web per Power BI.

Per prima cosa è necessario scaricare e installare Visual Studio Code.

Poi, dopo aver avviato Visual Studio Code, aggiungere l'estensione AL per Business Central.

È disponibile un esempio dettagliato di come eseguire questa operazione. Usare questi collegamenti per accedere alle informazioni su ciascun argomento.

Dopo aver installato Visual Studio Code e abilitato l'estensione AL Language, è necessario creare un nuovo progetto, come descritto qui.

Creazione di una nuova estensione Business Central in Visual Studio Code

Dopo aver creato la nuova estensione in Visual Studio Code, è possibile modificare il file launch.json e app.json, come descritto qui.

Uso dei file di configurazione JSON

Ora è possibile aggiungere nuove pagine e query in questa estensione.

Come esempio, si creerà una query basata sulla tabella Movimento contabile clienti e una pagina basata sulla tabella Customer.

Per creare una pagina basata sulla tabella Customer, effettuare i seguenti passaggi:

  1. In Visual Studio Code, aggiungere un nuovo file .al al progetto e assegnargli il nome Customers.Page.al.

  2. Usare il frammento tpage per creare lo scheletro della nuova pagina.

  3. Cambiare la proprietà SourceTable in Customer.

  4. Rimuovere ora tutti gli elementi tranne il ripetitore. Il codice dovrebbe ora apparire come segue.

    page 50101 Customers
    {
        PageType = List;
        ApplicationArea = All;
        UsageCategory = Lists;
        SourceTable = Customer;
        SourceTableView = where(Blocked = filter(" "));
        Editable = false;
        InsertAllowed = false;
        DeleteAllowed = false;
        ModifyAllowed = false;
    
        layout
        {
            area(Content)
            {
                repeater(GroupName)
                {
                    field(Name; NameSource)
                    {
                        ApplicationArea = All;
    
                    }
                }
            }
        }
    }
    
  5. Nella sezione del ripetitore, è possibile aggiungere i campi richiesti dalla tabella Cliente. Come esempio, è possibile aggiungere i campi seguenti.

                repeater(GroupName)
                {
                    field(CustomerNo; Rec. "No.")
                    {
                        ApplicationArea = All;
                        ToolTip = 'CustomerNo'
                    }
                    field(CustomerName; Rec.Name)
                    {
                        ApplicationArea = All;
                        ToolTip = 'CustomerName'
                    }
                    field(CustomerCity; Rec.City)
                    {
                        ApplicationArea = All;
                        ToolTip = 'CustomerCity'
                    }
                    field(CustomerCountry; Rec. "Country/Region Code")
                    {
                        ApplicationArea = All;
                        ToolTip = 'CustomerCountry'
                    }
                }
    
  6. Quando si forniscono nomi per i campi provenienti dalla tabella Customer, è buona norma assicurarsi che tutti i nomi siano di facile comprensione e indichino le informazioni disponibili nelle colonne.

  7. Facoltativamente, è inoltre possibile filtrare la pagina, in modo che restituisca solo i record di interesse. È possibile farlo usando la proprietà SourceTableView della pagina e/o aggiungendo codice nei trigger di pagina. Come esempio, si userà la proprietà SourceTableView per rimuovere eventuali clienti bloccati dalla pagina. Per farlo, implementare la proprietà seguente.

    SourceTableView = where(Blocked = filter(" "));

  8. Ulteriori informazioni sulla proprietà SourceTableView sono disponibili qui: Proprietà SourceTableView.

  9. Quindi, usare la proprietà Editable per rendere la pagina di sola lettura: Editable = false;.

  10. Infine, impostare le seguenti proprietà per assicurarsi che la pagina possa solo leggere i dati dalla tabella Customer.

    • Modificabile = false;

    • InsertAllowed = false;

    • DeleteAllowed = false;

    • ModifyAllowed = false;

  11. Il codice completo della pagina dovrebbe essere simile a quello dell'esempio seguente.

    page 50101 Customers
    {
        PageType = List;
        ApplicationArea = All;
        UsageCategory = Lists;
        SourceTable = Customer;
        SourceTableView = where(Blocked=filter(" "));
        Editable = false;
        InsertAllowed = false;
        DeleteAllowed = false;
        ModifyAllowed = false;
    
        layout
        {
            area(Content)
            {
                repeater(GroupName)
                {
                    field(CustomerNo; Rec. "No.")
                    {
                        ApplicationArea = All;
                        ToolTip = 'CustomerNo';
                    }
                    field(CustomerName; Rec.Name)
                    {
                        ApplicationArea = All;
                        ToolTip = 'CustomerName';
                    }
                    field(CustomerCity; Rec.City)
                    {
                        ApplicationArea = All;
                        ToolTip = 'CustomerCity';
                    }
                    field(CustomerCountry; Rec."Country/Region Code")
                    {
                        ApplicationArea = All;
                        ToolTip = 'CustomerCountry';
                    }
                }
            }
        }
    }
    
  12. Salvare l'oggetto .al usando CTRL+S.

Per creare una query basata sulla tabella Movimento contabile clienti, seguire questi passaggi:

  1. In Visual Studio Code aggiungere un nuovo file .al al progetto e assegnargli il nome CustomerLedgers.Query.al.

  2. Usare il frammento tquery per creare lo scheletro della nuova query:

  3. Modificare l'elemento dati in modo che usi la tabella Movimento contabile clienti e imposti la proprietà DataAccessIntent della query su ReadOnly.

    QueryType = Normal;

    DataAccessIntent = ReadOnly;

  4. Aggiungere colonne alla query. Effettuare questa operazione per tutti i campi che la query deve restituire come colonne:

    column(CustomerNo; "Customer No.")
    { }
    column(PostingDate; "Posting Date")
    { }
    column(Amount; "Amount (LCY)")
    { }
    
  5. Rimuovere tutto il resto che il frammento tquery ha aggiunto all'oggetto.

  6. La query avrà il seguente aspetto:

    query 50101 CustomerLedgers
    {
        QueryType = Normal;
        DataAccessIntent = ReadOnly;
    
        elements
        {
            dataitem(CustomerLedgers; "Cust. Ledger Entry")
            {
                column(CustomerNo; "Customer No.")
                { }
                column(PostingDate; "Posting Date")
                { }
                column(Amount; "Amount (LCY)")
                { }
            }
        }
    }
    
  7. È ora possibile applicare filtri alla query per rimuovere eventuali righe dalla tabella che non sono necessarie nel set di dati. È possibile farlo usando la proprietà DataItemTableFilter dell'elemento dati, aggiungendo colonne di filtro o usando il trigger di query OnBeforeOpen.

  8. Altre informazioni sull'applicazione di filtri agli oggetti query sono disponibili qui: Filtri di query

Si sono creati un nuovo oggetto pagina e un nuovo oggetto query. È possibile perfezionare ulteriormente gli oggetti pagina e query aggiungendo più campi o filtri. Per questo esempio, si lasceranno così come sono adesso.

Il passo successivo è assicurarsi che gli oggetti pagina e query siano pubblicati automaticamente come servizi Web, in modo che Power BI possa connettersi e importare i dati. Per farlo, è necessario aggiungere una raccolta di servizi Web all'estensione. La raccolta di servizi Web richiede quindi una voce del servizio Web per ogni oggetto da pubblicare come servizio Web.

Per creare la raccolta di servizi Web, seguire questi passaggi:

  1. In Visual Studio Code, aggiungere un nuovo file .al al progetto e assegnargli il nome webservices.xml.

  2. Usare il frammento twebservices per creare lo scheletro della raccolta di servizi Web.

  3. Il file webservices.xml ora è simile a quello seguente:

    <?xml version="1.0" encoding="UTF-8"?>
    <ExportedData>
        <TenantWebServiceCollection>
            <TenantWebService>
                <ObjectType>Page</ObjectType>
                <ServiceName>serviceName</ServiceName>
                <ObjectID>objectId</ObjectID>
                <Published>false</Published>
            </TenantWebService>
        </TenantWebServiceCollection>
    </ExportedData>
    
  4. Ora si modificherà questa raccolta di servizi Web in modo che includa il nuovo oggetto pagina e query. Usare il codice seguente come esempio:

    <?xml version="1.0" encoding="UTF-8"?>
    <ExportedData>
        <TenantWebServiceCollection>
            <TenantWebService>
                <ObjectType>Page</ObjectType>
                <ServiceName>CustomerPage_PowerBI</ServiceName>
                <ObjectID>50101</ObjectID>
                <Published>true</Published>
            </TenantWebService>
            <TenantWebService>
                <ObjectType>Query</ObjectType>
                <ServiceName>CustomerLedgersQuery_PowerBI</ServiceName>
                <ObjectID>50101</ObjectID>
                <Published>true</Published>
            </TenantWebService>
        </TenantWebServiceCollection>
    </ExportedData>
    
  5. Per ogni pagina o query da pubblicare come servizio Web in Business Central, è necessario inserire una voce in questo file xml.

Ora si è pronti a pubblicare e installare questa estensione nella sandbox Business Central. A questo scopo, effettuare i seguenti passaggi:

  1. In Visual Studio Code, accedere al Pallet di comando e selezionare l'opzione: AL: Publish without debugging.

  2. Attendere che l'estensione sia pubblicata. Al completamento della pubblicazione, il browser si apre automaticamente e si connette alla sandbox in Business Central.

  3. In Business Central aprire la pagina Gestione estensioni per verificare che l'estensione sia stata pubblicata e installata correttamente.

  4. Aprire la pagina Servizi Web e filtrarla in base a _PowerBI.

  5. La nuova pagina e la nuova query sono ora pubblicate come servizi Web.

Come spiegato in un'altra unità di questo modulo, Uso di Business Central come origine dati in Power BI, ora è possibile usare Power BI Desktop e vedere questi nuovi servizi e API Web sfruttando il Connettore Business Central per Power BI.