Solved

Power BI --> Pipefy

  • 4 August 2021
  • 9 replies
  • 348 views

Userlevel 2

Quando tentei fazer a integração com Power BI, consegui trazer os campos para a plataforma. Porém, existe um campo que eu consigo extrair no relatório que é quando faço a conexão entre pipes e trago o ID do pipe de solicitação. Quando eu tento puxar para o Power BI, ele traz esse campo como “list”.
Gostaria de saber como consigo trazer esse campo com o número do ID desse Pipe.

icon

Best answer by tsartori 3 November 2021, 13:46

View original

9 replies

Userlevel 2

@tsartori Agradeço demais! Vou alinhar minha necessidade com base na sua solução. Estou com problemas com o conector que a equipe do Pipefy me disponibilizou na implantação e acredito que seu script irá me ajudar.
Abraço!

Userlevel 7
Badge +4

Claro, @Bruno Costa OMB 

import requests
import json
import pandas as pd
import numpy as np
import pyodbc
import urllib.parse


#Filtro de dados sobre quais realmente precisam subir para o SQL
colunapermitida=['Título da Solicitação', 'Tipo da solicitação', 'Data de início da solicitação', 'Prioridade']

#Onde o scrip fará o request
url = "https://api.pipefy.com/graphql"

#Os parametros de autorização
headers = {
"Accept": "application/json",
"Authorization": "Bearer ****",
"Content-Type": "application/json"
}


#Qual querry o script pede
allCards = {"query": """{
allCards(pipeId:***) {
edges { node { id fields { name value }done finished_at createdAt}
} pageInfo {endCursor startCursor}}
}"""}


allCards2 = """
query($passador:String!) {
allCards(pipeId: ****, after:$passador) {
edges { node { id fields { name value }done finished_at createdAt}
} pageInfo {endCursor startCursor}}
}"""



def solicitar(querry):
response = requests.request("POST", url, json=querry, headers=headers)
dados = json.loads(response.text)

return(dados)

#funcao para solicitar o proximo bloco de cards
def solicitarvar(querry, variables):
response = requests.request("POST", url, json={'query': querry, 'variables': variables}, headers=headers)
dados = json.loads(response.text)
#print(response)
return(dados)


def openquerry(objeto): #Função para formatação da tabela
#print(objeto)
menu = objeto['data']
allCards=menu['allCards']
hashes=allCards['pageInfo']
ultimo = hashes['endCursor']
edges=allCards['edges']
allCardsDataDicts = [] #Abre um dicionário que servirá de base para a DF
dcriacao = [] #Abre um dicionário para receber dados em hierarquias diferente
dfinalizacao = []
thisCardDataDict={}

for i in range(len(edges)): #percorre todos os cards
thisCardDataDict = {
"id": edges[i]['node']['id'] #Usa o id do card como chave para o dicionário e index da tabela
}

fields = edges[i]['node']['fields']
for field in fields: #percorrer todos os campos dentro de cada card e armazena em um dicionário especifico
fieldname = field['name']
if fieldname in colunapermitida:
thisCardDataDict[field['name']] = field['value'] #usa o nome do campo como nome da coluna e insere os valores com o mesmo nome de campo dentro
datac = edges[i]['node']['createdAt']
dataf = edges[i]['node']['finished_at']
thisCardDataDict['dCriacao'] = datac #usa o nome do campo como nome da coluna e insere os valores com o mesmo nome de campo dentro
thisCardDataDict['dFinalizacao'] = dataf


#allCardsDataDicts.append()
allCardsDataDicts.append(thisCardDataDict) #insere na base os campos já preenchidos
return (allCardsDataDicts, ultimo) #pegar um ultimo hash como parametro da função



def datas(objeto): #Função para formatação da tabela
#print(objeto)
menu = objeto['data']
allCards=menu['allCards']
hashes=allCards['pageInfo']
ultimo = hashes['endCursor']
edges=allCards['edges']
allCardsDataDicts = []
diasc=[]
diasf=[]

for i in range(len(edges)): #percorre todos os cards
thisCardDataDict = {
"id": edges[i]['node']['id'] #Usa o id do card como chave para o dicionário e index da tabela
}
datac = edges[i]['node']['createdAt']
dataf = edges[i]['node']['finished_at']
#datacDict['dCriacao'] = datac #usa o nome do campo como nome da coluna e insere os valores com o mesmo nome de campo dentro
#datafDict['dFinalizacao'] = dataf
diasc.append(datac)
diasf.append(dataf)

return (diasc, diasf) #pegar um ultimo hash como parametro da função


#formatacao de tabela
dados = solicitar(allCards)
bloco = openquerry(dados)
dados = datas(dados)
dados0 = dados[0]
dados1 = dados[1]
kiwi = pd.DataFrame(dados0)
limao = pd.DataFrame(dados1)
limao = pd.concat([kiwi, limao], axis=1)
tMarketing= pd.DataFrame(bloco[0])
#listacriacao = bloco[2]
#listafinalizacao = bloco[3]
tMarketing = tMarketing.rename(columns={'Título da solicitação': 'titulo', 'Tipo da solicitação':'Tipo', 'Prazo de entrega estimado:':'prazo', 'Data de início da solicitação':'Inicio'})
tabeladef = pd.DataFrame()
tabeladef = tabeladef.append(tMarketing)

marcador = bloco[1]
#print(marcador)

variables ={
'passador': marcador
}
t=0
datas =[]
#laco de importacao e acomodacao na tabela
while marcador != None:
t+= 1
dados1 = solicitarvar(allCards2, variables)
bloco1 = openquerry(dados1)
marcador = bloco1[1]
variables ={
'passador': marcador
}
if marcador == None:
print('Processo concluido')
else:
tabela=pd.DataFrame(bloco1[0])
tabela = tabela.rename(columns={'Título da solicitação': 'titulo', 'Tipo da solicitação':'Tipo', 'Prazo de entrega estimado:':'prazo', 'Data de início da solicitação':'Inicio'})
tabela.replace([np.inf, -np.inf], np.nan, inplace = True)
tabela = tabela.fillna(0)
tabeladef = tabeladef.append(tabela)

 

Userlevel 2

@tsartori Bom dia!
Seria possível disponibilizar o script em python que desenvolveu para fazer o request pela API, por gentileza?

Userlevel 7
Badge +4

Ola @Bruno Costa OMB, como posso te ajudar?

Userlevel 2

Oi @luckas-stephanio

Me manda um email para: sartoritobias14@gmail.com.

Mas na prática é uma função do python que tu pode adaptar para solicitar pelo PBI.

@tsartori Olá! Tudo bem?
Estou com um problema parecido com o do @luckas-stephanio e acabei caindo nesse tópico. Fiquei interessado nessa função em Python que criou. Poderíamos conversar sobre ou me disponibilizar o que criou, por gentileza? Quem sabe será a luz que estou precisando, rs Grato!
Meu e-mail: bruno.costa@ombadvocacia.com.br

Userlevel 7
Badge +4

Oi @luckas-stephanio

Me manda um email para: sartoritobias14@gmail.com.

Mas na prática é uma função do python que tu pode adaptar para solicitar pelo PBI.

Userlevel 2

Oi Lucas tudo deboa?

Eu já tive esse mesmo problema, não sei o quanto de code que tu sabe, mas fiz um script de python para fazer o request diretamente pela API, se tiver interesse podemos conversar

Bom dia, estou disponível sim.
Por onde podemos conversar?

 

Userlevel 7
Badge +4

Oi Lucas tudo deboa?

Eu já tive esse mesmo problema, não sei o quanto de code que tu sabe, mas fiz um script de python para fazer o request diretamente pela API, se tiver interesse podemos conversar

Userlevel 7
Badge +8

Quando tentei fazer a integração com Power BI, consegui trazer os campos para a plataforma. Porém, existe um campo que eu consigo extrair no relatório que é quando faço a conexão entre pipes e trago o ID do pipe de solicitação. Quando eu tento puxar para o Power BI, ele traz esse campo como “list”.
Gostaria de saber como consigo trazer esse campo com o número do ID desse Pipe.

Olá, Luckas. Tudo bem com você? 
Não damos suporte, ainda, ao Power BI. Os conectores que os users utilizam são terceirizados então não temos como fazer um troubleshooting mesmo. 

 

Reply