Solved

Integração Pipefy e PowerBI



Show first post

46 replies

Userlevel 3

 Bom dia a todos,

Nosso colaborador Pedro Kronberg aqui da Market4u.com.br conseguiu escrever um script para importar os cards. Basta fazer uma Consulta Nula no Power Query e depois colar o codigo abaixo no editor avançado. As duas primeiras linhas são onde deve informar sua chave da API e o pipe a puxar.
 

let
TOKENAUTH = "Bearer xxxxxxxx", // Inserir sua Chave da API
PipeAnalisado = "xxxxxxxxxx", // Usar os numeros que seguem depois da URL: https://app.pipefy.com/pipes/______

GeradorDeCards =
(TOKENAUTH as text, PRIMEIROCARD as text) =>
let
query = "{""query"" : ""{ cards(pipe_id: "&PipeAnalisado&" "& PRIMEIROCARD &") { pageInfo { startCursor endCursor hasNextPage hasPreviousPage } edges { node { id title creatorEmail created_at finished_at updated_at due_date comments { text created_at } assignees { id name } labels { id name } created_by { id name } parent_relations { cards { id }} current_phase { id name } phases_history { phase { id name sequentialId } firstTimeIn lastTimeIn lastTimeOut duration } pipe { id name } fields { name report_value updated_at } } } } }""}",
authURL = "https://app.pipefy.com/graphql",
getToken = Web.Contents(
authURL,
[
Headers=[
#"Method" = "POST",
#"Accept" = "application/json",
#"Authorization" =TOKENAUTH ,
#"Content-Type" = "application/json; charset=utf-8"
],
Content=Text.ToBinary(query)
]
),
pipefyResponse = Json.Document(getToken),
data = pipefyResponse[data],
cards = data[cards],
edges = cards[edges]
in
edges,

GeradorDePaginas =
(TOKENAUTH as text, PrimeiroCard as text) => let
query = "{""query"" : ""{ cards(pipe_id: "&PipeAnalisado&" "& PrimeiroCard &") { pageInfo { startCursor endCursor hasNextPage hasPreviousPage } edges { node { id title creatorEmail created_at finished_at updated_at due_date comments { text created_at } assignees { id name } labels { id name } created_by { id name } current_phase { id name } phases_history { phase { id name sequentialId } firstTimeIn lastTimeIn lastTimeOut duration } pipe { id name } fields { indexName report_value name updated_at } } } } }""}",
authURL = "https://app.pipefy.com/graphql",
getToken = Json.Document(Web.Contents(authURL, [Headers=[Method="POST", Accept="application/json", Authorization=TOKENAUTH, #"Content-Type"="application/json; charset=utf-8"], Content=Text.ToBinary(query)])),
data = getToken[data],
cards = data[cards],
#"Convertido para Tabela" = Record.ToTable(cards),
Value = #"Convertido para Tabela"{0}[Value],
#"Convertido para Tabela1" = Record.ToTable(Value),
Nextpage = #"Convertido para Tabela1"{2}[Value],
STARTFROM = #"Convertido para Tabela1"{1}[Value],
res = [maispagina = Nextpage, cursorstart = STARTFROM]
in
res,

Fonte = List.Generate(
() =>
[Consulta = GeradorDePaginas(TOKENAUTH, ""), PG = 1, newstart = "", TOKENAUTH = TOKENAUTH],
each [newstart] <> null,
each [PG = [PG]+1, newstart = ("after: \#(0022)"& [Consulta][cursorstart] &"\#(0022)"), Consulta = GeradorDePaginas(TOKENAUTH, newstart), TOKENAUTH = [TOKENAUTH] ],
each [[TOKENAUTH], [PG], [newstart]]
),
#"Convertido para Tabela" = Table.FromList(Fonte, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Column1 Expandido" = Table.ExpandRecordColumn(#"Convertido para Tabela", "Column1", {"TOKENAUTH", "PG", "newstart"}, {"Column1.TOKENAUTH", "Column1.PG", "Column1.newstart"}),
#"Função Personalizada Invocada" = Table.AddColumn(#"Column1 Expandido", "GeradorDeCards", each GeradorDeCards([Column1.TOKENAUTH], [Column1.newstart])),
#"GeradorDeCards Expandido" = Table.ExpandListColumn(#"Função Personalizada Invocada", "GeradorDeCards"),
#"GeradorDeCards Expandido1" = Table.ExpandRecordColumn(#"GeradorDeCards Expandido", "GeradorDeCards", {"node"}, {"GeradorDeCards.node"}),
#"GeradorDeCards.node Expandido" = Table.ExpandRecordColumn(#"GeradorDeCards Expandido1", "GeradorDeCards.node", {"id", "title", "creatorEmail", "created_at", "finished_at", "updated_at", "due_date", "comments", "assignees", "labels", "created_by", "current_phase", "phases_history", "pipe", "fields"}, {"GeradorDeCards.node.id", "GeradorDeCards.node.title", "GeradorDeCards.node.creatorEmail", "GeradorDeCards.node.created_at", "GeradorDeCards.node.finished_at", "GeradorDeCards.node.updated_at", "GeradorDeCards.node.due_date", "GeradorDeCards.node.comments", "GeradorDeCards.node.assignees", "GeradorDeCards.node.labels", "GeradorDeCards.node.created_by", "GeradorDeCards.node.current_phase", "GeradorDeCards.node.phases_history", "GeradorDeCards.node.pipe", "GeradorDeCards.node.fields"}),
#"Linhas Filtradas" = Table.SelectRows(#"GeradorDeCards.node Expandido", each ([GeradorDeCards.node.id] <> null)),
#"Colunas Removidas" = Table.RemoveColumns(#"Linhas Filtradas",{"Column1.TOKENAUTH", "Column1.PG", "Column1.newstart"})
in
#"Colunas Removidas"

 
 

Userlevel 2

Olá Arthur,

Este erro ocorreu comigo também. Eu instalei o Gateway on premise data gateway versão 3000.66.8 (já tem uma mais recente) e refiz a configuração. Mas antes, é importante você ter a versão correta do conector também e apontar para o diretório correto onde está este arquivo no gateway (às vezes, o local do arquivo fica mascarado no windows com outro nome - tivemos isso com um colega da Vale que , depois de revisar este ponto, passou a funcionar). Se vc quiser, podemos fazer um call via zoom (email fnascimento@p4rconsulting.com ) para revisarmos os passos.

grande abraço,

Fernando

Eu consegui configurar o gateway corretamente, mas na hora de inserir as credenciais para atualização, não é evidenciada os campos de login, nem consigo selecionar nenhum método de autenticação.

Por um acaso, saberia me dizer oq pode ser, por favor?

 

 

Userlevel 7
Badge +4

Olá João, existe o jeito fácil e o difícil.

Difícil
Existem duas formas de atuar com API's do Pipefy: Query ou Mutation.


Mutation: Manipular o Pipefy com dados exteriores (Não é o que você quer) e as Query's: Extrair dados do Pipefy para alguma base de dados (É o que você quer).

  • Esse link contém o passo a passo de como trabalhar com isso no Power Query do Power BI (https://gist.github.com/petrsvihlik/cc34a6cf1882d515139c5b27f37cf99e )
  • Esse link é uma IDE para testar os códigos (https://app.pipefy.com/graphiql
  • Esse link tem as funções para montar o código API (https://api-docs.pipefy.com/reference/objects/TableField/), testar na IDE e depois montar com o primeiro código (primeiro link), substituindo essa parte: { organization(login: \""github\"") { name }} Pelo código montado.

Obs: Deve-se colocar o código montado, e não o resultado do código obtido na IDE.

 

Fácil

Existe um conector do Power BI (essa não é uma funcionalidade desenvolvida por nosso time e sim um terceiro, por isso não oferecemos suporte para ativar essa integração) com o código já montado. Se você precisar de uma informação que o conector não te de, ai você precisará montar o código do jeito acima (o difícil), mas não acho que seja um problema. Você entenderá melhor por esse link.

 

 

Olá Felipe, tudo bem??

 

Existe alguma possibilidade de fazer o conector funcionar de maneira incrementativa, não baixando toda base de dados todas as vezes? Ou uma maneira de automatizar a atualização usando o conector??

Alguém sabe como resolver isso?

Userlevel 2

 Boa noite a todos! 

Por aqui estou encontrando este erro, com alguem ja aconteceu ou sabem como resolver?

obrigado

 

Pessoal, graças a ajuda do @consultoria24, consegui uma versão atualizada do conector mencionado, onde é possível realizar a carga de dados do pipefy para o PBI (inclusive esse conector traz informações de relações entre pipes!!!!), assim como realizar a atualização no PBI Service, uma vez configurado o Gateway (Inclusive consegui atualizar via gateway padrão e no modo pessoal).

 

Segue anexado o conector atualizado.

 

Obrigado demais @consultoria24 !!!!!



O Conector não aceita a “API Key” do pipefy para conectar as tabelas, o problema é como conector?

tem alguma extensão ou arquivo que deve estar junto do conector lá na pasta para efetivar essa conexão? Ou esta senha referida é alguma outra? 

Userlevel 1

Boa tarde, pessoal, tudo bem ?

  Estou trabalhando praticamente nesta mesma integração, porém estou com dificuldades na atualização do dash na nuvem. @consultoria24 se puder me ajudar agradeceria, já baixei e instalei o conector, no power bi desktop, consigo trazer as informações do pipe, consigo publicar, mais na hora de atualizar tenho o seguinte erro 

“Falha ao atualizar as credenciais da fonte de dados: Não há suporte para o tipo de fonte de dados especificado. Tipo de fonte de dados: Pipefy.”

Onde posso baixar a versão 3000.66.8, citada acima, atualmente estou usando a versão mais recente 3000.110.3

 

Obrigado pela atenção,

 

Userlevel 1

Boa tarde, pessoal, tudo bem ?

  Estou trabalhando praticamente nesta mesma integração, porém estou com dificuldades na atualização do dash na nuvem. @consultoria24 se puder me ajudar agradeceria, já baixei e instalei o conector, no power bi desktop, consigo trazer as informações do pipe, consigo publicar, mais na hora de atualizar tenho o seguinte erro 

“Falha ao atualizar as credenciais da fonte de dados: Não há suporte para o tipo de fonte de dados especificado. Tipo de fonte de dados: Pipefy.”

Onde posso baixar a versão 3000.66.8, citada acima, atualmente estou usando a versão mais recente 3000.110.3

 

Obrigado pela atenção,

 

Olá pessoal tudo bem ?

 Gostaria de deixar registrado meu agradecimento @consultoria24 pela atenção e disponibilidade, graças a Deus consegui resolver minha atividade integrar pipefy ao Power BI via api.

Bom dia!

 

Estou tentando realizar a integração pelo método fácil, utilizando um conector, mas não estou conseguindo finalizar, pois não aparece a opção Pipefy na obtenção dos dados. É como se a conexão não tenha sido realmente realizada.

 

Estou utilizando o conector que foi enviado nesse tópico e um vídeo do Pipefy com o passo a passo de como realizar essa conexão mas até o momento não tive êxito.

 

Alguém passou pelo mesmo problema? Se sim, como conseguiu resolver?

 

Link do vídeo: https://screencast-o-matic.com/watch/cYV3lhvLvU

Estou com o mesmo problema. Alguém sabe me dizer como resolver?

Userlevel 4
Badge +1

Segue um passo a passo para realizar a conexão usando este conector !

@consultoria24, boa noite! o gateway precisa de servidor (virtual ou nossa própria máquina/servidor local) ou você consegue "burlar” esse requisito?

Userlevel 2

Olá Pessoal,

alguem já passou por esse problema: quando importo pelo conector dentro do PowerBI, o campo numerico que esta com “ponto” não é identificado no PowerBI ou seja, 18.75 ele puxa 1875, sem o ponto. Eu mudei a localizade pra Inglês, porem arredondou o numero para 19. Alguem consegue me ajudar ??

Bom dia, a todos. Atualmente, eu uso o conector Pipefy (beta) provido e configurei um Gateway para conectar automaticamente de forma diária. Assim, basta manter o gateway ativo que o Powebi online conecta no horário agendado. https://docs.microsoft.com/pt-br/power-bi/connect-data/service-gateway-onprem para maiores detalhes sobre como instalar o gateway.

Fernando, obrigado pelo apoio.

 

Fiz uma call com ele e resolvi os problemas, agora está atualizando automaticamente através de um gateway no meu computador!! Para quem te PC web é só instalar o getway la que funcionará online tbm.

@consultoria24 conseguiu me ajudar, pessoal! Eu estava com o mesmo problema da maioria de não conseguir ativar a atualização automática usando gateway. O meu problema foi que precisava ativar dois detalhes da configuração das credenciais da fonte de dados no power bi online. Importante: só conseguir usando o gateway no modo pessoal e isso já resolvia o meu problema. Mas também aprendi a configurar com o outro modo.

Ele foi super gentil e conseguimos resolver rapidinho o meu problema hehe muito obrigada pela disponibilidade e pela ajuda, @consultoria24 :)

 

Olá pessoal, como vocês conseguiram configurar o Gateway? Não aparece a opção Pipefy Connector no campo “Tipo de fonte de dados”. Abraços!

Badge

Bom dia, a todos. Atualmente, eu uso o conector Pipefy (beta) provido e configurei um Gateway para conectar automaticamente de forma diária. Assim, basta manter o gateway ativo que o Powebi online conecta no horário agendado. https://docs.microsoft.com/pt-br/power-bi/connect-data/service-gateway-onprem para maiores detalhes sobre como instalar o gateway.

Bom dia!
Meu Power BI não está deixando eu avançar para a parte do Gateway que criei anteriormente, está travado na fonte de dados no qual diz que não pode ser configurada com um Pipefy.Contents, que vem nativamente do pipefy connector após usa-lo como fonte de dados, teria alguma solução ja definida? Consegue me ajudar?

Userlevel 3
Badge

Segue um passo a passo para realizar a conexão usando este conector !

Não consigo abrir seu anexo, consegue me ajudar? 

Badge +2

Boa tarde a todos.

É meu primeiro post aqui, portanto se estiver errado podem me chamar a atenção!!

Estou com o seguinte problema na integração do Pipefy com o PowerBi.
 

Tenho um pipe que recebe a informação da quantidade em um campo numérico e por esta razão (infelizmente) o pipefy tem como separador decimal o “.” ao invés da “,” que é o correto para nosso idioma.
Por conta disso na importação do dado o Power Bi o número vem totalmente desconfigurado.

Exemplo:     No Pipe      5.44                          Na importação para o PBi     544

Não encontrei etapa anterior para poder tratar o dado, uma vez que da fonte já cai direto para o número sem o “.”, mesmo que se utilize o formato TEXTO para poder tratar o campo.

Badge +1

Bom dia a todos,

Nosso colaborador Pedro Kronberg aqui da Market4u.com.br conseguiu escrever um script para importar os cards. Basta fazer uma Consulta Nula no Power Query e depois colar o codigo abaixo no editor avançado. As duas primeiras linhas são onde deve informar sua chave da API e o pipe a puxar.
 

let
TOKENAUTH = "Bearer xxxxxxxx", // Inserir sua Chave da API
PipeAnalisado = "xxxxxxxxxx", // Usar os numeros que seguem depois da URL: https://app.pipefy.com/pipes/______

GeradorDeCards =
(TOKENAUTH as text, PRIMEIROCARD as text) =>
let
query = "{""query"" : ""{ cards(pipe_id: "&PipeAnalisado&" "& PRIMEIROCARD &") { pageInfo { startCursor endCursor hasNextPage hasPreviousPage } edges { node { id title creatorEmail created_at finished_at updated_at due_date comments { text created_at } assignees { id name } labels { id name } created_by { id name } parent_relations { cards { id }} current_phase { id name } phases_history { phase { id name sequentialId } firstTimeIn lastTimeIn lastTimeOut duration } pipe { id name } fields { name report_value updated_at } } } } }""}",
authURL = "https://app.pipefy.com/graphql",
getToken = Web.Contents(
authURL,
[
Headers=[
#"Method" = "POST",
#"Accept" = "application/json",
#"Authorization" =TOKENAUTH ,
#"Content-Type" = "application/json; charset=utf-8"
],
Content=Text.ToBinary(query)
]
),
pipefyResponse = Json.Document(getToken),
data = pipefyResponse[data],
cards = data[cards],
edges = cards[edges]
in
edges,

GeradorDePaginas =
(TOKENAUTH as text, PrimeiroCard as text) => let
query = "{""query"" : ""{ cards(pipe_id: "&PipeAnalisado&" "& PrimeiroCard &") { pageInfo { startCursor endCursor hasNextPage hasPreviousPage } edges { node { id title creatorEmail created_at finished_at updated_at due_date comments { text created_at } assignees { id name } labels { id name } created_by { id name } current_phase { id name } phases_history { phase { id name sequentialId } firstTimeIn lastTimeIn lastTimeOut duration } pipe { id name } fields { indexName report_value name updated_at } } } } }""}",
authURL = "https://app.pipefy.com/graphql",
getToken = Json.Document(Web.Contents(authURL, [Headers=[Method="POST", Accept="application/json", Authorization=TOKENAUTH, #"Content-Type"="application/json; charset=utf-8"], Content=Text.ToBinary(query)])),
data = getToken[data],
cards = data[cards],
#"Convertido para Tabela" = Record.ToTable(cards),
Value = #"Convertido para Tabela"{0}[Value],
#"Convertido para Tabela1" = Record.ToTable(Value),
Nextpage = #"Convertido para Tabela1"{2}[Value],
STARTFROM = #"Convertido para Tabela1"{1}[Value],
res = [maispagina = Nextpage, cursorstart = STARTFROM]
in
res,

Fonte = List.Generate(
() =>
[Consulta = GeradorDePaginas(TOKENAUTH, ""), PG = 1, newstart = "", TOKENAUTH = TOKENAUTH],
each [newstart] <> null,
each [PG = [PG]+1, newstart = ("after: \#(0022)"& [Consulta][cursorstart] &"\#(0022)"), Consulta = GeradorDePaginas(TOKENAUTH, newstart), TOKENAUTH = [TOKENAUTH] ],
each [[TOKENAUTH], [PG], [newstart]]
),
#"Convertido para Tabela" = Table.FromList(Fonte, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Column1 Expandido" = Table.ExpandRecordColumn(#"Convertido para Tabela", "Column1", {"TOKENAUTH", "PG", "newstart"}, {"Column1.TOKENAUTH", "Column1.PG", "Column1.newstart"}),
#"Função Personalizada Invocada" = Table.AddColumn(#"Column1 Expandido", "GeradorDeCards", each GeradorDeCards([Column1.TOKENAUTH], [Column1.newstart])),
#"GeradorDeCards Expandido" = Table.ExpandListColumn(#"Função Personalizada Invocada", "GeradorDeCards"),
#"GeradorDeCards Expandido1" = Table.ExpandRecordColumn(#"GeradorDeCards Expandido", "GeradorDeCards", {"node"}, {"GeradorDeCards.node"}),
#"GeradorDeCards.node Expandido" = Table.ExpandRecordColumn(#"GeradorDeCards Expandido1", "GeradorDeCards.node", {"id", "title", "creatorEmail", "created_at", "finished_at", "updated_at", "due_date", "comments", "assignees", "labels", "created_by", "current_phase", "phases_history", "pipe", "fields"}, {"GeradorDeCards.node.id", "GeradorDeCards.node.title", "GeradorDeCards.node.creatorEmail", "GeradorDeCards.node.created_at", "GeradorDeCards.node.finished_at", "GeradorDeCards.node.updated_at", "GeradorDeCards.node.due_date", "GeradorDeCards.node.comments", "GeradorDeCards.node.assignees", "GeradorDeCards.node.labels", "GeradorDeCards.node.created_by", "GeradorDeCards.node.current_phase", "GeradorDeCards.node.phases_history", "GeradorDeCards.node.pipe", "GeradorDeCards.node.fields"}),
#"Linhas Filtradas" = Table.SelectRows(#"GeradorDeCards.node Expandido", each ([GeradorDeCards.node.id] <> null)),
#"Colunas Removidas" = Table.RemoveColumns(#"Linhas Filtradas",{"Column1.TOKENAUTH", "Column1.PG", "Column1.newstart"})
in
#"Colunas Removidas"

 
Life Saver
 

 

@consultoria24 obrigado pelo apoio na configuração, tinha problemas na conexão e verifiquei que tratava-se do arquivo .mez. 

Alguém conseguiu baixar o conector para me mandar?

Desde já agradeço

 

Reply