Ir para conteúdo

Alex Pereira

Alunos
  • Total de itens

    573
  • Registro em

  • Última visita

Tudo que Alex Pereira postou

  1. @Keila Sanara Souza Lopesé importante você dar uma pesquisa antes de comprar qualquer dispositivo, que talvez não solucione sua necessidade!
  2. @Edson Igarisó não sei se o multiplicador de telas resolveria o problema dela que parece que o multiplicador de tela ele duplica a tela, ai teria ver se é possivel o multiplicador tela consegue colocar uma tela para cada tv. Eu sugeri o usb porque parece que nele você consegue fazer essa configuração!
  3. neste video parece ter como fazer isso com adpatador usb para hdmi que talvez possa resolver seu problema@
  4. Existem conversores que você consegue pegar um hdmi e duplicar a tela para várias tv's, agora não sei se você consegue dentro esse conversos definir qual tv vai ter tal dashboard!
  5. Cleiton, nesse caso, você precisará combinar a coluna "cidade" com a coluna "data" para identificar se houve feriado específico na cidade da unidade de produção. Você pode criar ou utilizar uma tabela que contenha os feriados municipais de cada cidade. Assim, ao verificar a data de produção e a cidade, se ambas coincidirem com um feriado na tabela, você poderá marcar esse dia como feriado para a unidade localizada naquela cidade. Isso garante que cada unidade considere apenas os feriados que afetam sua própria produção. obs.: Os dados em ambas tabelas tem que ser iguais! Exemplo:
  6. Teria como disponabilizar um exemplo!
  7. Você pode resolver isso diretamente nas suas medidas utilizando a função ALL ou REMOVEFILTERS no DAX para ignorar o filtro de ano apenas para aquele visual específico. Assim, o filtro de ano não será aplicado ao gráfico. EX: Medida Sem Filtro de Ano = CALCULATE( [Sua Medida Original], ALL(Tabela[ColunaAno]) ) Dessa forma, o filtro de ano que vem da página principal não afetará o gráfico onde essa medida for utilizada, mas continuará funcionando normalmente para os outros visuais da página.
  8. Para resolver o problema de lidar com a inserção de novas colunas sem precisar fazer um drop na tabela, você pode seguir uma abordagem onde o script verifica quais colunas existem no banco de dados e compara com as colunas da API. Se houver novas colunas, ele faz uma atualização full para essas colunas e continua com o processo incremental. Além disso, caso alguma coluna não venha mais da API, o script emite um alerta. Exemplo sugirido pelo nosso amigo GPT: import requests import pandas as pd from dotenv import load_dotenv import os import time from sqlalchemy import create_engine, inspect, text from sqlalchemy.exc import IntegrityError from datetime import datetime, timedelta # Carrega as variáveis de ambiente do arquivo .env load_dotenv() # Define a URL base da API Movidesk base_url = "https://api.movidesk.com/public/v1/tickets/past" token = os.getenv("API_TOKEN") # Função para chamar a API Movidesk e obter os dados paginados def chamar_api_movidesk(token, params=None): lista_dados_todas_paginas = [] skip = 0 top = 1000 if params is None: params = {} params.update({"token": token, "$top": top, "$skip": skip}) while True: response = requests.get(base_url, params=params) response_ajustado_json = response.json() if isinstance(response_ajustado_json, list) and response_ajustado_json: lista_dados_todas_paginas.extend(response_ajustado_json) else: break skip += top params["$skip"] = skip time.sleep(1) return lista_dados_todas_paginas # Função para comparar colunas entre o banco de dados e a API def verificar_novas_colunas(api_columns, db_columns): novas_colunas = [col for col in api_columns if col not in db_columns] colunas_faltantes = [col for col in db_columns if col not in api_columns] return novas_colunas, colunas_faltantes # Função para obter as colunas atuais da tabela do banco def get_db_columns(engine, tabela): inspector = inspect(engine) return [col["name"] for col in inspector.get_columns(tabela)] # Função para atualizar os últimos dois dias def atualizar_dados_ultimos_dois_dias(): dois_dias_atras = (datetime.now() - timedelta(days=2)).strftime("%Y-%m-%dT%H:%M:%SZ") params = {"$select": "id,createdDate,lastUpdate", "$filter": f"createdDate ge {dois_dias_atras}"} lista_dados_todas_paginas = chamar_api_movidesk(token, params) return pd.DataFrame(lista_dados_todas_paginas) # Conexão com o banco de dados MySQL db_user = os.getenv("DB_USER") db_password = os.getenv("DB_PASSWORD") db_host = os.getenv("DB_HOST") db_name = os.getenv("DB_NAME") engine = create_engine(f"mysql+pymysql://{db_user}:{db_password}@{db_host}/{db_name}") # Pega os dados da API df_api = chamar_api_movidesk(token) api_columns = df_api.columns.tolist() # Verifica se a tabela já existe no banco if "tickets" in inspect(engine).get_table_names(): db_columns = get_db_columns(engine, "tickets") novas_colunas, colunas_faltantes = verificar_novas_colunas(api_columns, db_columns) if novas_colunas: print(f"Novas colunas detectadas: {novas_colunas}. Realizando atualização completa.") # Código para lidar com a inserção completa dessas colunas df_api[novas_colunas].to_sql('tickets', con=engine, if_exists='replace', index=False) else: print("Nenhuma nova coluna detectada, realizando atualização incremental.") df_incremental = atualizar_dados_ultimos_dois_dias() df_incremental.to_sql('tickets', con=engine, if_exists='append', index=False) if colunas_faltantes: print(f"Alerta: As seguintes colunas estão ausentes da API: {colunas_faltantes}") else: print("Tabela 'tickets' não existe, criando e realizando carga completa.") df_api.to_sql('tickets', con=engine, if_exists='replace', index=False) Espero ter ajudado!
  9. Como já estou montando as consultas antecipadamente, isso garante que, ao puxar os dados do banco, o processamento será otimizado ao máximo, mesmo que o Direct Query esteja desativado. Enfim, está foi a solução que encontreii!
  10. Bom dia! O problema que você está enfrentando é que algumas operações realizadas no Power Query podem fazer com que a opção de native query (consulta nativa) não esteja disponível. Para evitar esse problema, recomendo que você faça o máximo possível do trabalho diretamente em SQL antes de importar os dados para o Power Query. Eu costumo criar a consulta SQL com todos os parâmetros e ajustes necessários desde o início. Isso facilita a chamada e evita problemas com a opção de native query. Segue exemplo: let strRangeStart = DateTime.ToText(RangeStart,[Format="yyyy-MM-dd HH:mm:ss", Culture="en-US"]), strRangeEnd = DateTime.ToText(RangeEnd,[Format="yyyy-MM-dd HH:mm:ss", Culture="en-US"]), Query = " SELECT sub.sk_ctrc AS sk_ctrc, sub.dia_inclusao_ocor, sub.usuario_ocor, sub.unid_ocor, sub.cod_ocor FROM dw.fato_ocorrencias sub WHERE sub.emissao_ctrc >= '" & strRangeStart & "' AND sub.emissao_ctrc < '" & strRangeEnd & "') ", Fonte = MySQL.Database("SEU IP", "DATABASE", [ReturnSingleDatabase=true, Query=Query]) in Fonte
  11. Booom diaaa verifique se você tem esse instalador no ambiente onde seu gateway está instalado! Aqui documentação explica como instalar: https://learn.microsoft.com/pt-br/power-bi/consumer/mobile/mobile-windows-10-phone-app-webview2-installation Aqui está uma resalta!
  12. Esse erro de referência cíclica acontece porque você está tentando calcular o valor máximo de dCalendario[Ano] e dCalendario[Trimestre] dentro de uma fórmula que está, ao mesmo tempo, sendo aplicada à própria tabela dCalendario. Você pode tentar colocando em uma variável separada: let AnoMax = List.Max(dCalendario[Ano]), TrimestreMax = List.Max(dCalendario[Trimestre]), AdicionarColuna = Table.AddColumn(dCalendario, "Período", each if [Ano] = AnoMax and [Trimestre] = TrimestreMax then "Trimestre Atual" else if [Ano] = AnoMax and [Trimestre] = TrimestreMax - 1 then "Trimestre Anterior" else if [Ano] = AnoMax - 1 and [Trimestre] = TrimestreMax then "T. Ano Passado" else "Outros" ) in AdicionarColuna Obs.: A ooutra solução que dei é mais recomendada!
  13. Experimente fazer dessa forma comparando com a data de hoje. let DataAtual = DateTime.LocalNow(), AnoAtual = Date.Year(DataAtual), MesAtual = Date.Month(DataAtual), TrimestreAtual = Number.RoundUp(MesAtual / 3), AdicionarColuna = Table.AddColumn(dCalendario, "Período", each if [Ano] = AnoAtual and [Trimestre] = TrimestreAtual then "Trimestre Atual" else if [Ano] = AnoAtual and [Trimestre] = TrimestreAtual - 1 then "Trimestre Anterior" else if [Ano] = AnoAtual - 1 and [Trimestre] = TrimestreAtual then "T. Ano Passado" else "Outros" ) in AdicionarColuna
  14. Com a quantidade real de dados, a medida pode não funcionar tão bem, mas como o exemplo fornecido é apenas uma amostra, o volume de dados é significativamente menor, o que permite que a medida funcione no nosso ambiente. Nesse caso, há vários procedimentos que ele pode seguir para otimizar o desempenho. O ideal seria revisar a lógica da medida DAX e buscar formas de minimizar os cálculos, a fim de reduzir o tempo de processamento.
  15. Veja se em seu workspace está com a capacidade premium habilitada!
  16. Você faz uma concatenação só que no caso deve transformar a data primeiro nesse formato xx/xx/xxxx como fiz exemplo te mostrei. Veja exemplo abaixo: let DataInicio = DateTime.ToText(RangeStart, "dd/MM/yyyy"), DataFim = DateTime.ToText(RangeEnd, "dd/MM/yyyy"), Body = Json.FromValue( [ page = pageNumber, limit = 25, filter = "[ { ""property"":""AnoMes"", ""operator"":""greaterOrEqual"", ""value"":""" & DataInicio & """, ""and"":true }, { ""property"":""AnoMes"", ""operator"":""lessOrEqual"", ""value"":""" & DataFim & """, ""and"":true } ]" ] ) in Body
  17. Para criar um bookmark que afete apenas dois visuais que estão no mesmo lugar no Power BI, o processo pode ser feito agrupando os dois visuais. Selecione os dois gráficos que deseja controlar e, no painel de seleção, agrupe-os. Em seguida, oculte esse grupo para controlar sua visibilidade diretamente pelo bookmark.
  18. Bom diaaa! Como o Rafael mencionou, o erro está relacionado à ausência de um gateway instalado. Nesse caso, será necessário instalar o gateway no servidor onde os dados estão hospedados, ou em um ambiente que tenha acesso de rede ao servidor, como na AWS, por exemplo. É possível configurar o acesso à rede através de IPs específicos, restringindo o acesso conforme necessário. Portanto, o gateway não precisa estar no mesmo local que o servidor, mas sim em um ambiente que possua conectividade com ele. Após obter esse acesso, será necessário configurar o seu gateway de dados, inserindo as conexões necessárias para que ele funcione corretamente. No seu caso específico, você precisará configurar as credenciais de acesso ao servidor. É importante lembrar: utilize o Gateway Enterprise para garantir um desempenho ideal. Nesta aula, o mestre ensina como fazer essa configuração: https://app.xperiun.com/aula/1704330688818x596973771367997700?v=1704838860504x652294912539400400
  19. @Edson Igari, esse erro geralmente ocorre devido ao consumo de memória do Power BI. Pode ser que a conta que você está utilizando tenha uma configuração ou quantidade de recursos diferente da dele, o que faz com que funcione corretamente no seu ambiente, mas não no dele. Por exemplo, ele pode estar utilizando uma conta Pro, enquanto a sua é PPU (Premium Per User), que tem limites de memória mais altos.
  20. Boooom diaaa Geralmente, as APIs possuem um parâmetro no corpo da requisição chamado query ou algo semelhante, que permite passar filtros como os de datas. Abaixo segue um exemplo de como esse filtro pode ser aplicado no body da requisição POST no Power Query utilizando atualização incremental. let ObterToken = () => let urlToken = "https://autenticador.secullum.com.br/Token", grantType = grant_type_secullum, username = username_secullum, password = password_secullum, clientId = client_id_secullum, body = "grant_type=" & Uri.EscapeDataString(grantType) & "&username=" & Uri.EscapeDataString(username) & "&password=" & Uri.EscapeDataString(password) & "&client_id=" & Uri.EscapeDataString(clientId), headers = [#"Content-Type" = "application/x-www-form-urlencoded"], options = [ Headers = headers, Content = Text.ToBinary(body) ], response = Json.Document(Web.Contents(urlToken, options)), accessToken = response[access_token] in accessToken, accessToken = ObterToken(), urlGet = "https://pontowebintegracaoexterna.secullum.com.br/IntegracaoExterna/Batidas", DataInicio = DateTime.ToText(RangeStart, "yyyy-MM-dd"), // Corrigido: use aspas duplas para definir o valor da data DataFim = DateTime.ToText(RangeEnd, "yyyy-MM-dd"), // Corrigido: use aspas duplas para definir o valor da data body2 = "DataInicio=" & Uri.EscapeDataString(DataInicio) & "&DataFim=" & Uri.EscapeDataString(DataFim), // Corrigido: removido espaço em branco headersGet = [#"Authorization" = "Bearer " & accessToken], optionsGet = [ Headers = headersGet, Query = [ DataInicio = DataInicio, DataFim = DataFim ] ], responseGet = Json.Document(Web.Contents(urlGet, optionsGet)) in responseGet É importante ressaltar que a forma como as datas precisam ser passadas pode variar dependendo da API. Isso significa que você deve adaptar o formato da data dos parâmetros de atualização incremental para atender às exigências específicas da API que está utilizando.
  21. Esse erro ocorre porque a medida DAX no Power BI está consumindo muitos recursos e excede os limites de capacidade do serviço. Para resolver o problema, você pode começar revisando a lógica da sua medida para garantir que não está realizando cálculos desnecessários ou repetitivos. Utilizar variáveis pode ajudar a melhorar o desempenho ao evitar cálculos repetidos. Além disso, verifique se você está aplicando filtros e agregações apropriados para reduzir o volume de dados processados. Também é importante considerar a simplificação do modelo de dados, reduzindo a complexidade das tabelas e dos relacionamentos. O particionamento de tabelas grandes ou o uso de filtros pode ajudar a reduzir a quantidade de dados processados de uma só vez. Se você estiver usando Power BI Premium, ajustar a configuração de recursos pode ser útil. Além disso, utilizar tabelas de agregação pode pré-calcular dados e melhorar o desempenho dessa consulta.
×
×
  • Criar Novo...