Desenvolver objetos de consulta e página para o Power BI

Concluído

Quando for necessário desenvolver um relatório do Power BI, é aconselhável desenvolver os conjuntos de dados exigidos pelo relatório. Você pode usar o ambiente de desenvolvimento para criar esses conjuntos de dados. Normalmente, esse processo envolve a criação de uma pequena extensão que contém as consultas ou páginas necessárias para seu relatório. Nos serviços Web, uma coleção de serviços Web para garantir que, ao instalar e publicar a extensão, as consultas e páginas publiquem automaticamente na tabela de serviços Web.

Ao desenvolver páginas ou consultas de API, elas serão disponibilizadas automaticamente depois que a extensão for implantada. As consultas e páginas de API não exigem um arquivo de coleção de serviços Web e não são publicadas na tabela de serviços Web.

Agora, antes de começar a desenvolver sua extensão, para o Power BI, é recomendado primeiro analisar os requisitos em mais detalhes. Por exemplo, você pode ser solicitado a criar um determinado relatório do Power BI que exija alguns dados específicos. Então, com base nesse requisito, você cria seus conjuntos de dados. Na próxima vez que for solicitado a criar outro relatório do Power BI, você começa tudo novamente e cria mais conjuntos de dados.

Em vez dessa abordagem, seria melhor pensar sobre as tabelas que costumam ser exigidas em todos os relatórios do Power BI (ou na maioria deles) e criá-las como conjuntos de dados separados. Dessa forma, elas poderão ser reutilizadas sempre que for preciso. Portanto, primeiro crie os blocos de construção dos relatórios típicos do Power BI; depois, ao criar um relatório, é só reutilizar esses blocos. No final, você terá menos conjuntos de dados e nem sempre precisará começar do zero para cada novo relatório do Power BI.

No próximo módulo deste roteiro de aprendizagem, explicaremos como você deve pensar sobre o modelo de dados de um relatório típico. Com base nesse modelo de dados, normalmente chamado de esquema em estrela ou floco de neve, você pode criar consultas (ou páginas) e publicá-las como serviços Web.

No procedimento a seguir, explicarei como é possível criar uma nova extensão que inclua novas páginas e consultas, para disponibilizá-las como serviços Web para o Power BI.

Primeiro, você precisa baixar e instalar o Visual Studio Code.

Em seguida, depois de iniciar o Visual Studio Code, adicione a extensão AL para o Business Central.

Há um exemplo disponível detalhando como fazer isso. Use estes links para acessar as informações sobre cada assunto.

Depois de instalar o Visual Studio Code e habilitar a extensão AL Language, você precisará criar um novo projeto, conforme descrito aqui.

Criar uma nova extensão do Business Central no Visual Studio Code

Depois de criar a nova extensão no Visual Studio Code, você pode editar o arquivo launch.json e app.json, conforme descrito aqui.

Trabalhar com arquivos de configuração JSON

Agora você está pronto para adicionar novas páginas e consultas nessa extensão.

Como exemplo, agora criaremos uma consulta baseada na tabela Customer Ledger Entry e uma página baseada na tabela Customer.

Para criar uma página baseada na tabela Customer, siga estas etapas.

  1. No Visual Studio Code, adicione um novo arquivo .al ao seu projeto e nomeie-o Customers.Page.al.

  2. Use o trecho tpage para criar o esqueleto da nova página.

  3. Altere a propriedade SourceTable para Customer.

  4. Agora, remova todos os elementos, menos o repetidor. O código deve ter agora a aparência a seguir.

    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. Na seção do repetidor, agora você pode adicionar os campos necessários da tabela Customer. Como exemplo, você pode adicionar os campos a seguir.

                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. Ao fornecer nomes para os campos provenientes da tabela Customer, é recomendável verificar se todos os nomes são fáceis de compreender e indicar as informações disponíveis nas colunas.

  7. Opcionalmente, agora você também pode filtrar a página, de modo que ela retorne somente os registros que interessam. Para fazer isso, utilize a propriedade SourceTableView da página e/ou adicione código nos gatilhos da página. Como exemplo, usamos a propriedade SourceTableView para remover os clientes bloqueados da página. Para isso, implemente a propriedade a seguir.

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

  8. Mais informações sobre a propriedade SourceTableView estão disponíveis aqui: Propriedade SourceTableView.

  9. Use a propriedade Editable para tornar a página somente leitura Editable = false;.

  10. Por fim, defina as propriedades a seguir para garantir que a página só possa ler dados da tabela Cliente.

    • Editable = false;

    • InsertAllowed = false;

    • DeleteAllowed = false;

    • ModifyAllowed = false;

  11. O código completo da página deve ser semelhante ao exemplo abaixo.

    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. Salve o objeto .al usando Ctrl + S.

Para criar uma consulta baseada na tabela Customer Ledger Entry, siga estas etapas:

  1. No Visual Studio Code, adicione um novo arquivo .al ao seu projeto e nomeie-o como CustomerLedgers.Query.al.

  2. Use o trecho tquery para criar o esqueleto da nova consulta:

  3. Altere o item de dados de forma que ele use a tabela Customer Ledger Entry e defina a propriedade DataAccessIntent da consulta como ReadOnly.

    QueryType = Normal;

    DataAccessIntent = ReadOnly;

  4. Adicione colunas à consulta. Faça isso para todos os campos que você deseja que essa consulta retorne como colunas:

    column(CustomerNo; "Customer No.")
    { }
    column(PostingDate; "Posting Date")
    { }
    column(Amount; "Amount (LCY)")
    { }
    
  5. Remova tudo o mais que o trecho tquery adicionou ao seu objeto.

  6. Sua consulta agora deve ter esta aparência:

    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. Agora você pode aplicar filtros à consulta para remover linhas da tabela que não são necessárias no conjunto de dados. Para fazer isso, utilize a propriedade DataItemTableFilter do item de dados, adicione colunas de filtro ou use o gatilho de consulta OnBeforeOpen.

  8. Mais informações sobre a filtragem de objetos de consulta estão disponíveis aqui: Filtros de consulta

Agora você criou um novo objeto de página e um novo objeto de consulta. Você pode ajustar ainda mais os objetos de página e de consulta adicionando mais campos ou filtros. Neste exemplo, vamos deixá-los como estão no momento.

A próxima etapa é verificar se os objetos de página e de consulta são publicados automaticamente como serviços Web, de modo que o Power BI possa se conectar e importar os dados. Para isso, você precisa adicionar uma coleção de serviços Web à extensão. Em seguida, a coleção de serviços Web precisa de uma entrada de serviço Web para cada objeto que você deseja publicar como um serviço Web.

Para criar a coleção de serviços Web, siga estas etapas:

  1. No Visual Studio Code, adicione um novo arquivo .al ao seu projeto e nomeie-o webservices.xml.

  2. Use o trecho twebservices para criar o esqueleto da coleção de serviços Web.

  3. O arquivo webservices.xml agora terá a seguinte aparência:

    <?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. Agora, vamos alterar essa coleção de serviços Web de forma que ela inclua nosso novo objeto de página e de consulta. Use o código a seguir como exemplo:

    <?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. Para cada página ou consulta que você precisa publicar como um serviço Web no Business Central, é preciso criar uma entrada nesse arquivo XML.

Agora você está pronto para publicar e instalar essa extensão na sua área restrita do Business Central. Para fazer isso, siga estas etapas:

  1. No Visual Studio Code, acesse a Paleta de Comandos e selecione a opção: AL: Publicar sem depurar.

  2. Aguarde até que a extensão seja publicada. Quando terminar, seu navegador será aberto automaticamente e estabelecerá conexão com a área restrita no Business Central.

  3. No Business Central, abra a página Gerenciamento de Extensões para verificar se a extensão foi publicada e instalada com êxito.

  4. Agora abra a página de serviços Web e filtre-a no _PowerBI.

  5. A nova página e consulta agora são publicadas como serviços Web.

Como explicado em outra unidade deste módulo, Usando o Business Central como uma fonte de dados no Power BI, você agora pode usar o Power BI Desktop e ver esses novos serviços Web e APIs, usando o Conector do Business Central para Power BI.