Contexto
Na utilização do Power BI (PBI) já criei relatórios para relatórios financeiros, inventários, capital circulante, gestão de qualidade, contagem de tempos, validação de documentos, entre outros. Tendo em consideração as inúmeras utilizações do PBI surgem questões frequentes, sendo uma delas se podemos enviar informação por e-mail.
As motivações por detrás desta questão podem ser diversas sendo na sua maioria o envio do report, de uma visualização o que é possível através das notificações, power apps ou power automate.
No entanto surgiu-me uma questão relacionada com podermos enviar um e-mail diretamente para um utilizador pré-definido no modelo com um breve sumario dos dados, tratava-se de um conjunto de documentos que necessitavam de intervenção do utilizador (aprovação/arquivo) e o e-mail apenas indicava o estado do(s) documento(s), ID e número de dias pendentes.
Estrutura dos dados
O exemplo utilizado foi feito com uma tabela simples com os seguintes dados:
Entry# | Supplier# | Statusdocument | Approver | Created | Modified |
PL4200524 | 212765 | In approval | Paulo | 23/01/2020 | 24/01/2020 |
PL4200593 | 207195 | Booked | Marco | 24/01/2020 | 27/01/2020 |
Os dados do Status podem ser os seguintes:
Statusdocument | Notas |
Booked | Estado final não exige intervenção por parte do utilizador |
Ready to be booked | |
In approval | |
Rejected |
O campo da data de modificação é o campo onde temos de interagir, pretendemos verificar se a diferença entre a data de modificação e o dia de hoje é igual ou superior a um número de dias selecionado pelo utilizador.
Solução
Primeiramente temos de criar uma tabela para a escolha do número de dias sobre o qual queremos fazer a análise. Criamos nos parâmetros:

A utilização dos parâmetros no PBI gera dois códigos (tabela e medida):
Days = GENERATESERIES(5; 100; 5)//Tabela com criação de dados de 5 em 5 até 100
Days Value = SELECTEDVALUE('Days'[Days]; 5) // Medida para que apresenta o valor seleccionado e se for mais que um por defeito coloca 5
Tendo criado a nossa tabela auxiliar para escolha dos dias a considerar temos agora que criar duas medidas, uma para calcular a diferença de dias por documento e outra para gerar o e-mail.
Days Pending =
VAR DATE_SELECT =
MINX ( Documents; Documents[Modified])
VAR number_days =
( CALCULATE ( DATEDIFF ( DATE_SELECT; TODAY (); DAY ) ) )
RETURN
IF (
number_days < [Days Value];
BLANK ();
number_days
)
Send Mail =
VAR NewLine = "%0D"
VAR Document_Count =
CALCULATE (
DISTINCTCOUNT ( Documents[Entry#] );
FILTER ( Documents; [Days Pending] <> BLANK () )
)
RETURN
IF (
[Days Pending] <> BLANK ();
"mailto://" & SELECTEDVALUE ( Documents[Approver] ) & "@yourdomain.com" & "?cc=" & "manager@yourdomain.com" & "&subject=" & "Pending Docuuments need your attention: " & Document_Count & "&body=" & "Dear colleague there is (are) " & Document_Count & " document(s) needing your attention: " & NewLine & NewLine
& CONCATENATEX (
FILTER ( Documents; [Days Pending] <> BLANK () );
Documents[Entry#] & " - " & Documents[Supplier#] & " - " & Documents[Statusdocument] & " - " & [Days Pending] & NewLine
) & NewLine & "Please check you e-mail for the notification e-mail." & NewLine & "If you can't find the information about the documents please contact the Helpdesk to restart the document workflow." & NewLine & NewLine & "Thanks for your support." & NewLine & NewLine & "This e-mail was created automatically. Please do not respond."
)
Na medida em que criamos o e-mail utilizamos HTML para gerar a mensagem pelo que podemos fazer formatações adicionais, mas este formato é simplificado para apresentar um simples mail com texto.
Assim agora apenas temos de montar uma tabela para termos uma lista de dados para podermos enviar os e-mails.
- Categorizar a medida [Send Mail] com Web URL
- Tabela:
- Days Pending
- Status Document
- Approver
- Send Email
- Turn on the URL Icon para a coluna send e-mail
- Filtrar a medida Days Pending para os valores que não estejam em branco

Para enviar o e-mail basta clicar no envelope e autorizar a utilização da nossa aplicação local de e-mail e podemos enviar o mesmo.


Nas imagens acima verificar um preview do texto do e-mail e a mensagem de autorização após clicarmos no envelope.
Podem testar o report neste link.
Esta solução teve como base o post apresentado neste blog: https://www.c-sharpcorner.com/article/add-email-as-a-hyperlink-in-power-bi-table-visual/ 18/03/2020 (contêm explicação detalhada como alterar a categoria para Web URL)