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.
Solved
Power BI --> Pipefy
Best answer by tsartori
Claro,
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)
Reply
Rich Text Editor, editor1
Editor toolbars
Press ALT 0 for help
Join us in the Pipefy Community! 🚀
No account yet? Create an account
Login with your Pipefy credentials
or
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.