Lendo Api's do azure com Power Bi - exemplo histórico logic apps
Tags: powerbi, logicapps, azure, api
Published: 2021-02-16 20:50:40

Oi Pessoal!

No [post anterior](https://dev.to/silverio27/carga-de-api-paginada-para-powerbi-com-logic-app-e-storage-account-exemplo-omie-h6o) eu falei sobre a alternativa do processo de ETL com logic apps. Nesse post vou mostrar uma solução para monitorar a atividade do logic app. A motivação é centralizar a leitura e monitoramento dos dados, visto que podemos ter vários processos preparando arquivos de forma automatizada e se algo der errado, pode passar despercebido. Além disso quero mostrar a integração das api's do azure e isso pode nos trazer outros insights.


##Recursos

* [Postman](https://www.postman.com/downloads/)
* [Assinatura Azure](https://azure.microsoft.com/pt-br/)
* [PowerBi](https://powerbi.microsoft.com/pt-br/desktop/)

>É necessário que você já tenha algum conhecimento prévio em API's e Powerbi.

#Logic app
Na página do logic app no portal do azure, podemos ver o histórico das execuções do logic app.

![history-logic-app](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fdgkug5lsr63vhfeaf2o.png)
 
Nós vamos trazer esse histórico para o nosso painel.

#Api Rest do Azure
Na [documentação](https://docs.microsoft.com/en-us/rest/api/azure/) oficial da microsoft você encontra uma visão geral sobre as api's .

E nesse [post](https://blog.jongallant.com/2017/11/azure-rest-apis-postman/) o autor mostrar como obter as credenciais para acessar as api's do azure.

Execute os passo desse [tutorial](https://blog.jongallant.com/2017/11/azure-rest-apis-postman/)  para obter as credenciais:
>Os procedimentos a seguir vão depender dessa etapa.
{% youtube fh37VQ3_exk %}



##Get AAD Token

Além da api do histórico de execuções também vamos precisar da [api](https://blog.jongallant.com/2017/11/azure-rest-apis-postman/#Get-AAD-Token-Request) para obter o token de acesso.


![postman-token](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ip8gtf9anx3wp9o7t09c.png)
 

##Workflow Runs - Get

Clique [aqui](https://docs.microsoft.com/en-us/rest/api/logic/workflowruns/get) para acessar a documentação sobre a api que vamos consumir para obter o histórico de execuções do logic app.

````HTTP
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/runs/{runName}?api-version=2016-06-01
````
![postman-logic-app-history](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dxghoy9gi837rl0efnn3.png)

##Power Bi

Vamos criar uma consulta em branco:
![blank-query](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oazfldaym79vc3prijvp.png)

####Parâmetros

Agora crie um parâmetro para cada propriedade das credencias do azure, que obtivemos nas etapas anteriores.

![power-bi-new-parameter](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/31hmghrurfxv891irvqx.png)

![param-tenant-id](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cljxww9keho79my9gkn1.png)

Depois de registrar todos os parâmetros o resultado será esse:

![power-bi-parameters](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v17reo7y5xapy3ve9odz.png)

####Token

Crie uma consulta nula como o nome de tokenRequest, onde vamos executar o método para armazenar o token.

![nam-token-request](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gipy5jwa65ww9mvmax6e.png)

>Copie e cole o código abaixo na tela do editor avançado.

````M
let authUrl = "https://login.microsoftonline.com/" & tenantId & "/oauth2/token",
    body = "grant_type=client_credentials&
           client_id=" & clientId  & "&
           client_secret=" & clientSecret  & "&
           resource=" & resource  &"",
getToken = Json.Document(Web.Contents(authUrl, [Headers=[#"Content-Type"="application/x-www-form-urlencoded"], Content=Text.ToBinary(body)]))
in getToken[access_token]
````

![token-request-code](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/71p844eah0ez4ssl5y5i.png)

####Histórico de execuções do logic app

Crie uma consulta nula como o nome de historyRequest, onde vamos executar o método para obter o histórico de execuções do logic app.

>Copie e cole o código abaixo na tela do editor avançado e não se esqueçam de renomear o
{resourceGroupName} e {workflowName} para os do seu aplicativo.


````M
let
    historyRequest = let
    historyRequest = let
    token =  tokenRequest,
    url = "https://management.azure.com/subscriptions/" & subscriptionId &"/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/runs?api-version=2016-06-01",
    history = Json.Document(
        Web.Contents(url,[
            Headers = [#"Authorization"= "Bearer " & token]
        ])
    )
in
   history
in historyRequest[value],
    #"Convertido para Tabela" = Table.FromList(historyRequest, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Column1 Expandido" = Table.ExpandRecordColumn(#"Convertido para Tabela", "Column1", {"properties", "id", "name", "type"}, {"properties", "id", "name", "type"}),
    #"properties Expandido" = Table.ExpandRecordColumn(#"Column1 Expandido", "properties", {"waitEndTime", "startTime", "endTime", "status", "correlation", "workflow", "trigger", "outputs"}, {"waitEndTime", "startTime", "endTime", "status", "correlation", "workflow", "trigger", "outputs"})
in
    #"properties Expandido"
````
![history-request-code](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xqoar87uzfh4o98xrndj.png)

Como estamos executando consultas encadeadas armazenadas em parâmetros diferentes recebemos essa mensagem por questões de segurança do power bi:

![error-securtity-message](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/25qpxhsh9yvio3pvc6zf.png)

Para contornar esse problema, vamos configurar o nível de privacidade para ignorar essa mensagem.

![options](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yjjsi86e1pop19gnhc1z.png)
 
![options-security](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ndj08lzj5u8hlvinem33.png)


Ao atualizar a tela, você já consegue ver o resultado da api.
![history-logic-app-result](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8c564lkiqjj54j6vbs7j.png)

Eu montei o painel abaixo como exemplo, e não vou detalhar essa etapa pois o foco aqui era as api do logic app do azure.

![folder2](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yccbk2xap6ff7luk9nuk.png)
 
Esse é um pequeno exemplo do que podemos fazer com as apis do azure.

Espero que isso te ajude!