Skip to main content
Solved

 Importar base de dados do Pipefy para Power BI/SQL Server

  • September 18, 2020
  • 7 replies
  • 1174 views

Paulo Ribas
Pipefy Staff

 

Gostaria de saber se é possível importar a base de dados do Pipefy para o Power BI ou SQL Server com dados sendo enviados em tempo real.

Mais ou menos como esse post aqui explica: https://gist.github.com/petrsvihlik/cc34a6cf1882d515139c5b27f37cf99e

Best answer by murilova

  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"

 

View original
Did this topic help you find an answer to your question?

7 replies

Nicole Chiroli
Pipefy Staff
Forum|alt.badge.img+10
  • Product Manager
  • 301 replies
  • September 21, 2020

Bom dia @Paulo Ribas, tudo bem com você?

Não temos uma funcionalidade nativa para essa exportação. Você pode criar esta integração através da nossa API. Temos relatos de clientes que desenvolveram conectores diretamente com o Power BI. 
 

A Microsoft está analisando o nosso pedido de integração oficial e estamos em processo de liberação, porém, infelizmente, ainda não temos uma resposta definitiva sobre quando estará disponível pois dependemos de um posicionamento da Microsoft. :blush:  

Caso tenha qualquer outra dúvida, basta chamar. Tenha um excelente dia! 


diego.silva
  • New Member
  • 3 replies
  • December 16, 2021
Nicole Chiroli wrote:

Bom dia @Paulo Ribas, tudo bem com você?

Não temos uma funcionalidade nativa para essa exportação. Você pode criar esta integração através da nossa API. Temos relatos de clientes que desenvolveram conectores diretamente com o Power BI. 
 

A Microsoft está analisando o nosso pedido de integração oficial e estamos em processo de liberação, porém, infelizmente, ainda não temos uma resposta definitiva sobre quando estará disponível pois dependemos de um posicionamento da Microsoft. :blush:  

Caso tenha qualquer outra dúvida, basta chamar. Tenha um excelente dia! 

Olá @Nicole Chiroli

   Como vai ? tudo bem ? Sou novo no fórum, estou trabalhando em uma integração entre Pepify e PowerBI, sabe me informar se hoje já existe alguma solução para essa integração. 

 

Obrigado pela atenção,

Diego Silva


lais_lot
Pipefy Staff
  • Pipefy Staff
  • 16 replies
  • January 5, 2022

Olá @diego.silva,

 

Ainda não obtivemos resposta da Microsoft quanto a nossa solicitação.

Mas conforme conversamos, pode ser desenvolvida através da nossa API.


Lucas Democh
Forum|alt.badge.img+15
  • Pipefy Legend
  • 396 replies
  • January 7, 2022

@Paulo Ribas eu consegui extrair os dados através do Lambda da AWS e exportar os dados para o Power BI Online. 

Se ainda estiver precisando de ajuda, pode me chamar.


murilova
  • New Member
  • 5 replies
  • Answer
  • February 10, 2022

  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"

 


Lucas Democh
Forum|alt.badge.img+15
  • Pipefy Legend
  • 396 replies
  • February 10, 2022

Legal @murilova. Essa consulta nas atualizações automáticas do Power BI Online ou somente no Desktop? 


murilova
  • New Member
  • 5 replies
  • February 16, 2022

Os dois!


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings