Desbravando o Power BI: Usando o ChatGPT para Criar Colunas e Tabelas no Power BI
Neste guia, mostrarei como enviar prompts do ChatGPT dentro de scripts do Power Query e salvar os resultados diretamente como novas colunas ou tabelas em seus dados.
O ChatGPT tem muitos usos para melhorar a produtividade e a eficiência de um profissional de dados. Com casos de uso que variam desde assistência no desenvolvimento, como recomendações de código, solução de problemas e formatação, até casos mais simples, como redação de documentação, elaboração de planos de projeto e criação de programas de aprendizado.
Hoje, vou apresentar um guia prático sobre como enviar prompts do ChatGPT dentro de scripts do Power Query e salvar os resultados diretamente como novas colunas ou tabelas em seus dados. Essa integração oferece uma maneira de enriquecer suas análises, permitindo que você aproveite um pouco mais a inteligência artificial.
Neste guia, mostrarei uma possível forma de se utilizar a API da OpenAI para criar novas colunas e tabelas no Power BI. Apresentando os princípios básicos da integração, exemplos práticos e uma discussão sobre suas limitações.
Obtendo uma chave de segurança da API
O primeiro passo do processo é obter uma chave de segurança da API da OpenAI, esta serve para autenticar e autorizar seu acesso aos seus serviços, incluindo o ChatGPT, e nos permitindo acessar o mecanismo de forma programática.
A chave de segurança tem as seguintes funções:
◼Autenticação: A chave identifica sua conta e valida que você tem permissão para acessar os serviços da API.
◼Autorização: Ela garante que você tenha os direitos necessários para realizar solicitações específicas, como geração de texto ou análise de dados.
◼Controle de uso: A chave permite à OpenAI monitorar e controlar o uso da API, incluindo o número de solicitações feitas e o volume de dados processados. Isso ajuda a evitar abusos e garante que você permaneça dentro dos limites de uso estabelecidos.
◼Faturamento: A chave está vinculada à sua conta de pagamento e/ou a quantidade de crédito na plataforma, permitindo que a OpenAI cobre pelo uso da API de acordo com a estrutura de preços.
Para criação da chave os seguintes passos são necessários:
1.Acesse o site 🔗platform.openai.com e clique em “Sign Up” se você não tiver uma conta. Se já tiver uma conta, basta fazer o login na plataforma.
2.Após o login navegue até a seção de API Keys da plataforma, selecionando “Dashboard” no canto superior direito e depois a opção “Api Keys”.
3.Selecione o botão “Create a new secret key”, escolha um nome, projeto, permissão e por último o botão “Create secret key”.
4.A seguir copie e salve a sua chave. Por motivos de segurança, você não poderá visualizá-la novamente através da sua conta da OpenAI.
Se você perder essa chave, precisará gerar uma nova.
Depois de obter sua chave, você pode então começar a integrar a API da OpenAI em suas aplicações, incluindo seu uso dentro do Power Query.
Conectando o ChatGPT ao Power Query
Estamos prontos para continuar com a segunda parte do processo. Nesta etapa, utilizaremos a função baseada na 🔗documentação da API.
1.Va para o Power Query via “Transform Data”.
2.Crie uma nova “consulta em braco”.
3.Abra o “editor avançado”.
4.Copie e cole o seguinte código no seu editor avançado:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
let
//A função é criada com um parâmetro de entrada chamado prompt do tipo text.
//Essa função retorna um valor de texto, que é o conteúdo da resposta gerada pelo ChatGPT para o prompt fornecido.
Output = (prompt as text) as text =>
let
//A variável url define o endpoint da API da OpenAI para chat/completions, que é o caminho usado para interagir com o modelo de chat.
url = "https://api.openai.com/v1/chat/completions",
//A variável apiKey recebe o valor da chave de segurança que você gerou
apiKey = "---SUA CHAVE DE SEGURANÇA AQUI---",
//A variável headers define os cabeçalhos HTTP necessários para a requisição
headers = [
//Requisição em JSON.
#"Content-Type" = "application/json",
//Autentica a requisição utilizando a variável contendo a chave de API.
#"Authorization" = "Bearer " & apiKey
],
//Especifica o modelo a ser usado e envia uma lista de mensagens, onde o prompt passado é a entrada principal
body = Json.FromValue([model = "gpt-4o-mini",messages = {[role = "user", content = prompt]}]),
response = Web.Contents(url, [Headers=headers, Content=body]),
//Converte a resposta da API em um objeto JSON e extrai o texto da resposta armazenado na variável content
in
content
in
Output
Altere o valor da variável apiKey
para a chave de segurança que você gerou e altere o modelo em model = "gpt-4o-mini"
caso necessário.
Os diferentes modelos representam versões distintas da tecnologia. Cada modelo possui características e capacidades que o tornam mais adequado para diferentes tipos de tarefas como:
◼Precisão e complexidade: Modelos mais recentes, como o gpt-4o
, geralmente têm uma capacidade melhor de entender e gerar respostas complexas, pois foram treinados em conjuntos de dados maiores e mais diversificados. Isso permite que lidem melhor com detalhes em consultas complexas.
◼Velocidade e custo: Modelos menores, como o gpt-4o-mini
, são otimizados para oferecer respostas rápidas e com menor custo de processamento. Eles são ideais para automações ou consultas rápidas onde não é necessária a precisão máxima de modelos mais complexos.
◼Contexto e tamanho do prompt: Modelos mais simples, como o gpt-3.5-turbo
, podem ter limitações quanto ao tamanho do prompt e à profundidade da análise, o que pode ser uma consideração importante em alguns projetos.
◼Aplicações especificas: Dependendo da aplicação, pode ser mais eficiente usar um modelo otimizado. Como por exemplo, projetos que envolvem análise técnica complexa, produção de conteúdo extenso ou geração de código sofisticado o gpt-4o
pode ser mais adequado.
Para mais detalhes sobre os modelos existentes acesse o 🔗site oficial da plataforma
5.Teste a API invocando a função criada.
Se tudo ocorrer como o planejado a função invocada deve retornar um resultado do prompt.
A capital do brasil é Brasilia. Foi Inaugurada em 221 de abril de 1960 e é conhecida por sua arquitetura modernista e planejamento urbano.
Criando novas colunas baseando se em um prompt
Usar o ChatGPT para criar novas colunas no modelo de dados do Power BI pode ser uma abordagem poderosa para enriquecer suas análises de dados, automatizar processos repetitivos e popular tabelas de dimensões. Ao integrar a API do ChatGPT no Power Query, é possível gerar colunas personalizadas que atendem a requisitos específicos do negócio.
Podemos testar e colocar em prática a função criada previamente para gerar novas colunas da seguinte forma:
1.Crie uma tabela com os prompts a testar:
2.Utilize a função criada para gerar novas colunas, na aba “add column” selecione a opção de invocar uma função, adicione um nome para a nova coluna e marque qual coluna contém o prompt (No meu caso a coluna Perguntas).
Obtendo então o seguinte retorno:
Criando novas colunas com base em colunas já existentes no modelo
Outra forma de utilizarmos a função criada é a de adicionarmos informações de colunas já existentes na tabela ao prompt para se criar uma nova. Desta forma, podemos ter colunas mais especificas e mais relacionadas a tabela na qual a nova coluna vai ser criada. Por exemplo:
1.A seguinte tabela já existe no meu modelo e gostaria de adicionar uma nova coluna com base em informações das seguintes colunas:
- nome_produto;
- categoria_produto;
- preço_unitario;
- status_estoque;
- Marca;
2.Invoque a função criada da seguinte forma:
1
2
3
4
5
6
7
8
9
= Table.AddColumn(#"Changed Type", "Marketing", each FxOpenAiApi(
"Com base no nome do produto= "&[nome_produto]&",
na categoria do produto= "&[categoria_produto]&",
no status do estoque= "&[status estoque]&",
no status da promoção= "&[status promoção]&",
da marca= "&[Marca]&",
com o preço= "&Text.From([preço_unitario])&".
Crie um texto com no máximo 5 linhas contendo uma campanha de marketing para os produtos"
))
Obteremos uma nova coluna chamada “Marketing” que contém o resultado do prompt enviado.
Exemplo de retorno para o produto da linha 3 — Playstation 5:
🌟 Aproveite a oportunidade exclusiva! 🌟 A PlayStation 5 está com últimos 10% em estoque e em promoção imperdível por apenas R$ 3.499! Garanta já o seu console da Sony e mergulhe em uma nova dimensão de jogos. Não perca essa chance de elevar a sua experiência gamer! 🕹️✨
Criando tabelas inteiras com base em um prompt
Uma última forma de utilizarmos a API da OpenAI é a de gerar tabelas inteiras com base em uma requisição, podendo gerar então bases inteiras para testes ou melhorar as já existentes dentro do modelo. Para isso devemos alterar a função criada para a seguinte forma:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
let
//A função é criada com um parâmetro de entrada chamado prompt do tipo text.
//Essa função retornará agora uma tabela do tipo table para o prompt fornecido.
Output = (prompt as text) as table =>
let
//A variável url define o endpoint da API da OpenAI para chat/completions, que é o caminho usado para interagir com o modelo de chat.
url = "https://api.openai.com/v1/chat/completions",
//A variável apiKey recebe o valor da chave de segurança que você gerou
apiKey = "---SUA CHAVE DE SEGURANÇA AQUI---",
//A variável headers define os cabeçalhos HTTP necessários para a requisição
headers = [
//Requisição em JSON.
#"Content-Type" = "application/json",
//Autentica a requisição utilizando a variável contendo a chave de API.
#"Authorization" = "Bearer " & apiKey
],
//Especifica o modelo a ser usado e envia uma lista de mensagens, onde o prompt passado é a entrada principal
body = Json.FromValue([model = "gpt-4o-mini", messages = {[role = "user", content = prompt]}]),
response = Web.Contents(url, [Headers=headers, Content=body]),
content = Json.Document(response)[choices]{0}[message][content],
//Remove os caracteres de marcação retornados pela API.
//Faz uma limpeza de espaços brancos.
cleanText = Text.Trim(Text.Remove(content, {"`,"})),
//Divide o texto em linhas.
linhas = Lines.FromText(cleanText),
//Define os cabeçalhos da tabela dividindo a primeira linha com base no delimitador.
cabeçalhos = Text.Split(linhas{0}, ","),
//processa cada linha após os cabeçalhos, dividindo o texto em valores usando o delimitador e convertendo-os em registros com base nos cabeçalhos.
registros = List.Transform(List.Skip(linhas, 1), each
let
valores = Text.Split(_, ",")
in
Record.FromList(valores, cabeçalhos)
),
//cria a tabela final a partir dos registros usando
tabela = Table.FromRecords(registros)
in
tabela
in
Output
Desta forma, podemos solicitar uma tabela em algum formato especifico, fazer o tratamento no Power Query e obtendo uma tabela inteira a partir de um único prompt. Utilizando o seguinte prompt:
Gere uma lista de produtos reais e com marcas reais contendo 10 linhas no formato CSV com as colunas: nome do produto, categoria do produto, data cadastro, preço unitário, marca e quantidade estoque.
Obtemos a tabela:
Gere uma lista de produtos com 100 linhas no formato CSV com as colunas: nome do produto, categoria do produto, data cadastro, preço unitário, marca e quantidade estoque.
Limitações
Existe três grandes limitações utilizando a API do ChatGpt para síntese de novas tabelas e colunas em um modelo de dado no Power BI. Sendo elas:
◼Velocidade🛵: Chamar a API repetidamente é extremamente lento, mesmo para algumas centenas de linhas, sem falar em milhares. Isso ocorre em parte porque a API não apenas recupera dados, mas também os gera. Além disso, o Power Query executa uma chamada de API por vez, sem suporte para paralelização. Portanto, não tem viabilidade em usá-la para grandes volumes de dados.
◼Consistência📈: Cada vez que o modelo é atualizado, as respostas do ChatGPT são solicitadas novamente, e o resultado pode variar de uma execução para outra.
◼Custo💲: O custo da API do ChatGPT varia dependendo do modelo utilizado e da quantidade de tokens processados (tokens são as unidades de texto que o modelo utiliza para processar e gerar texto) e pode se tornar elevado dependendo da quantidade de requisições feitas. Para conhecimento os testes que executei no desenvolvimento desse guia consumiu $0.02 USD dos $5.00 USD adicionados como “crédito” na plataforma.
Conclusão
É isso! Espero que este guia tenha sido útil. Se você tiver alguma dúvida ou precisar de mais esclarecimentos, sinta-se à vontade para entrar em contato comigo no 🔗LinkedIn. Ficarei feliz em ajudar ou aprimorar qualquer parte do guia para uma melhor compreensão e contribuir com a comunidade.