Ir para conteúdo

Alex Pereira

Alunos
  • Total de itens

    582
  • Registro em

  • Última visita

Posts postados por Alex Pereira

  1. 2 minutos atrás, Mario Erico Da Silva disse:

    No Power BI online, ao gerar um link público para acesso ao painel, tenho como resultado a seguinte mensagem de erro:

    "Algo não deu certo

    ServerError_rsCannotRetrieveModel
    Tente novamente mais tarde ou entre em contato com o suporte. Se você entrar em contato com o suporte, forneça esses detalhes."

    Detalhe:
    ID da atividade: e61bbd0d-7a76-4b1d-9592-63ed394c73d7
    Solicitar ID: 83841064-9a82-8b8d-a4db-ec4d91d74cc9
    ID de correlação: fd7faa2a-bc36-0134-b46f-72762675e7fd
    Hora: Wed Sep 18 2024 09:32:07 GMT-0300 (Horário Padrão de Brasília)
    Versão do serviço: 13.0.24209.56
    Versão do Cliente: 2409.2.20860-train
    Cluster URI: https://wabi-brazil-south-b-primary-api.analysis.windows.net/
    ID da atividade: e61bbd0d-7a76-4b1d-9592-63ed394c73d7
    Solicitar ID: 83841064-9a82-8b8d-a4db-ec4d91d74cc9
    Hora: Wed Sep 18 2024 09:32:07 GMT-0300 (Horário Padrão de Brasília)
    Versão do serviço: 13.0.24209.56
    Versão do Cliente: 2409.2.20860-train
    Cluster URI: https://wabi-brazil-south-b-primary-api.analysis.windows.net/

    Considerando que essa ocorrência, foi registrada em dois usuários distintos, em ambientes diferentes. O acesso ao painel, direto no workspace e na versão desktop, seguem normalmente. Houveram tentativas de republicação, sem sucesso na posterior geração dos links. Então, como seria possível identificar e superar essa dificuldade?

    Considere:
    1) O painel segue sendo atualizado normalmente, estão acessíveis de outras formas, exceto por links públicos que resultam no erro a partir de sua geração.

    2) Versões do painel anteriores ao problema, já foram re-publicados, juntamente com a mais recente versão disponível do Power BI Desktop (v.2.132.105.3.0 64-bit agosto de 2024), sem sucesso. Minha versão, no ambiente de produção, é a 2.128.1177.0 64-bit (abril de 2024).
     

     

    Verifique com o administrador da conta se você tem permissão para gerar links públicos.

    É importante ressaltar que gerar links públicos pode não ser seguro, pois isso permite que qualquer pessoa tenha acesso às informações contidas neles.

  2. Então,existem várias razões pelas quais uma consulta SQL pode ser rápida no SSMS e mas lenta no Power BI. Uma das principais causas é o "query folding". O Power Query tenta converter as etapas de transformação em uma única consulta SQL para que o processamento seja feito no servidor de banco de dados, e não localmente. Se você realizar transformações no Power BI que não suportam o query folding, o Power BI pode estar trazendo grandes volumes de dados para aplicar as transformações localmente, o que aumenta o tempo de atualização. Para verificar se o query folding está ocorrendo, clique com o botão direito em cada etapa no Editor de Consultas e veja se a opção "Exibir Consulta Nativa" está disponível. Se não estiver, tente modificar ou reordenar as transformações para permitir o query folding.

    Outra questão a considerar são as etapas adicionais no Power Query após a importação da consulta. Qualquer transformação adicional, como junções complexas, cálculos ou filtragens, pode adicionar sobrecarga e impactar o desempenho. É recomendável otimizar as etapas no Power Query e, sempre que possível, realizar transformações complexas diretamente na consulta SQL original.

    A conectividade de rede de internet também pode influenciar no desempenho. A velocidade e a latência da rede entre o Power BI e o servidor SQL podem afetar significativamente o tempo de resposta. 



     

  3. 11 horas atrás, edmar disse:

    Tenta instalar na máquina onde está o gateway o npgsql.

    https://github.com/npgsql/npgsql/archive/refs/tags/v4.0.14.zip

    Só complementando a resposta do @edmar, você terá que instalar conforme está ma documentação microsoft para dar certo. Neste caso,
    terá que instalar a versão 4.0.10 e na hora da instalação ficar atento as essas opções e deixar desse jeito que ta na imagem para instalar!  Se não num da certo!

    https://learn.microsoft.com/pt-br/power-query/connectors/postgresql

    image.png.91251223b7be971be30be1c1d66caee8.png

    • Like 1
  4. 8 horas atrás, Edson Igari disse:

    Funcionaria pq vc teria quatro telas (abaixo exemplo com duas que é como uso, porém o meu é usb pra mais uma única entrada hdmi. Enfim, se funciona com duas, funciona com três, quatro, cinco.... Outra coisa, ele é usb também. Inclusive, o que tenho é igual ao que você colocou no vídeo, que é uma única porta a mais. Pra ela não serve, pois precisa de quatro telas.
    image.png.538e4fb2145015b9c5d7823b17ce4366.png

    Minha dúvida é se, ao conectar o conversor, o notebook vai reconhecer as quatro telas de forma independente usando apenas um cabo HDMI. Pela minha lógica, o conversor simplesmente replicaria a imagem do cabo HDMI conectado ao notebook, e não sei se ele conseguiria identificar cada uma das TVs individualmente. Claro, isso é só uma teoria, porque não vi nenhum exemplo prático dessa situação com um conversor. Na maioria dos vídeos que assisti, o conversor parece apenas replicar a tela, e não sei se ele é capaz de fazer essa distinção entre as telas. Por isso sugiri aquele video que foi o que adptou mais da realidade dela, mas é uma questão de testar!

  5. 14 minutos atrás, Edson Igari disse:

    Sem wi-fi só se vc comprar um multiplicador de telas. Ai vc abre quatro navegadores e joga um em cada tela.

     

    Multiplicador De Tela Hdmi 4 Portas Splitter Tv Monitor Hd | Parcelamento sem juros (mercadolivre.com.br)

    @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!

  6. 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:

    image.png.c53d190dc6160874df3d5aae5ac31965.png

  7. 37 minutos atrás, Lucas Denker disse:

    Boa tarde pessoal! Todos bem?
    Venho com uma dúvida técnica sobre visualização de dados. Irei lhe passar o contexto do que tenho.

    Contexto.:
    Em meu relatório possuo uma página principal que contém filtros de ano, cliente e estado. 
    Ao clicar em um cliente abre a possibilidade de ir a uma página que faz o drill-trought dos dados. Nesta página possuo um gráfico mensal da quantidade de compras feita pelo cliente filtrado.

    Problema.:
    Meu problema é eu gostaria que em apenas nesse gráfico que tenho o filtro de ano e somente este filtro da página principal não afete este gráfico em específico.
    Como faço para retirar especificamente deste gráfico o filtro do ano da página principal?
    Pesquisei diversas alternativas e nenhuma funcionou.

    Se alguem tiver passado por algo parecido ou sabe como resolver esta situação me ajude por favor!

    Abraços e obrigado pela atenção.

    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. 17 horas atrás, Henrique Marsal disse:

    Peguei a aula e tentei adaptar o script que faz a atualização incremental dos dados no mysyql na API Movidesk no tipo oData. mas o script não lida com a alternativa de inserir novas colunas . eu preciso dar um drop no banco e reinserir os dados outra vez. Preciso de algum help para me ajudar o script a lidar com a opção de ao inserir novas colunas ele fazer att full da coluna nova e depois incremental normal. 

    Já tentei umas 200x com GPT mas na hora de rodar o script ele travava.

     

    import requests
    import pandas as pd
    from dotenv import load_dotenv
    import os
    import time
    from sqlalchemy import (
        create_engine,
        MetaData,
        Table,
        Column,
        Integer,
        String,
        DECIMAL,
        DATETIME,
        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
     
    # Pega o token do arquivo .env
    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  # Controle de paginação, começa com 0
        top = 1000  # Número máximo de resultados por página
     
        # Configura parâmetros fixos
        if params is None:
            params = {}
     
        # Inclui o token e a paginação nos parâmetros
        params.update({"token": token, "$top": top, "$skip": skip})
     
        while True:
            response = requests.get(base_url, params=params)
            response_ajustado_json = response.json()
     
            # Verifica se a resposta contém dados
            if isinstance(response_ajustado_json, list) and response_ajustado_json:
                lista_dados_todas_paginas.extend(response_ajustado_json)
            else:
                # Se a resposta for uma lista vazia, significa que não há mais páginas
                break
     
            # Atualiza o valor de skip para pegar a próxima página
            skip += top
            params["$skip"] = skip
            time.sleep(1)  # Respeita o limite de requisições da API
     
        return lista_dados_todas_paginas
     
    # Função para obter todos os tickets sem filtro
    def chamar_api_inicial_completa():
        # Definindo campos de interesse
        params = {"$select": "id,createdDate,lastUpdate,type,category,urgency,status,ownerTeam,serviceFull,resolvedIn,slaSolutionDate,slaRealResponseDate,slaResponseDate"}
        lista_dados_todas_paginas = chamar_api_movidesk(token, params)
        df = pd.DataFrame(lista_dados_todas_paginas)
        return df
     
    # Função para filtrar tickets criados nos últimos dois dias
    def atualizar_dados_ultimos_dois_dias():
        dois_dias_atras = (datetime.now() - timedelta(days=2)).strftime(
            "%Y-%m-%dT%H:%M:%SZ"
        )
        # Definindo parâmetros com filtro de data
        params = {
            "$select": "id,createdDate,lastUpdate",
            "$filter": f"createdDate ge {dois_dias_atras}",
        }
        lista_dados_todas_paginas = chamar_api_movidesk(token, params)
        df = pd.DataFrame(lista_dados_todas_paginas)
        return df
     
    # Converta as colunas de data para o formato aceito pelo MySQL
    data_columns = ["createdDate", "lastUpdate"]
     
    # Conexão com o banco de dados MySQL - PUXANDO OS DADOS DO ARQUIVO .env
    db_user = os.getenv("DB_USER")  # Nome do usuário no MySQL
    db_password = os.getenv("DB_PASSWORD")  # Senha do MySQL
    db_host = os.getenv("DB_HOST")  # Host do banco de dados
    db_name = os.getenv("DB_NAME")  # Nome do banco de dados
     
    # String de conexão com o banco de dados, passando as variáveis do .env
    engine = create_engine(f"mysql+pymysql://{db_user}:{db_password}@{db_host}/{db_name}")
     
    # Instanciando o objeto MetaData para criar a tabela no banco de dados
    metadata = MetaData()
     
    # Crie a tabela com todas as colunas necessárias e defina a chave primária
    tickets_table = Table(
        "tickets",
        metadata,
        Column("id", String(255), primary_key=True),
        Column("createdDate", DATETIME),
        Column("lastUpdate", DATETIME),
    )
     
    # Verifica se a tabela já existe no banco de dados
    inspector = inspect(engine)
    if "tickets" in inspector.get_table_names():
        with engine.connect() as connection:
            result = connection.execute(text("SELECT COUNT(*) FROM tickets"))
            count = result.fetchone()[0]
            if count > 0:
                # Se a tabela tiver dados, atualiza os últimos dois dias
                df_incremental = atualizar_dados_ultimos_dois_dias()
                if df_incremental.empty:
                    print("Não há dados para atualizar.")
                else:
                    # Converte as colunas de data para o formato correto
                    for col in data_columns:
                        if col in df_incremental.columns:
                            df_incremental[col] = pd.to_datetime(
                                df_incremental[col]
                            ).dt.strftime("%Y-%m-%d %H:%M:%S")
     
                    inseridos_com_sucesso = 0
                    for index, row in df_incremental.iterrows():
                        try:
                            row.to_frame().T.to_sql(
                                "tickets", con=engine, if_exists="append", index=False
                            )
                            inseridos_com_sucesso += 1
                        except IntegrityError:
                            continue  # Ignora duplicações
     
                    print(
                        f"Total de registros inseridos com sucesso: {inseridos_com_sucesso}"
                    )
            else:
                print("Tabela existente mas sem dados, realizando carga inicial completa.")
                df_inicial = chamar_api_inicial_completa()
    else:
        print("Tabela não existe, criando tabela e realizando carga inicial completa.")
        metadata.create_all(engine)  # Cria a tabela
        df_inicial = chamar_api_inicial_completa()
     
    # Verifica se df_inicial foi criado e insere dados no banco
    if "df_inicial" in locals():
        for col in data_columns:
            if col in df_inicial.columns:
                df_inicial[col] = pd.to_datetime(df_inicial[col]).dt.strftime(
                    "%Y-%m-%d %H:%M:%S"
                )
     
        inseridos_com_sucesso = 0
        for index, row in df_inicial.iterrows():
            try:
                row.to_frame().T.to_sql(
                    "tickets", con=engine, if_exists="append", index=False
                )
                inseridos_com_sucesso += 1
            except IntegrityError:
                continue  # Ignora duplicações
     
        print(f"Total de registros inseridos com sucesso: {inseridos_com_sucesso}")

    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. 1 hora atrás, Alex Pereira disse:
     

    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

     

    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. 8 horas atrás, Henrik Oliveira Paes disse:

    Olá pessoal!

    Estou com problemas ao tentar fazer a atualização incremental em um banco de dados MySQL conectado via ODBC x64 MySQL 8.3 Unicode.


    Acontece que, ao definir o RangeStart e RangeEnd, quando vou aplicar a atualização incremental no Front-end do BI, ele me apresenta a seguinte mensagem: Unable to M query can be folded. incremental refresh can't be suggested for non-foldable queries.

    image.png.75695d53385e67eda6a1da72fd4bbf74.png

    Até encontrei um vídeo no YouTube watch?v=QEFze-LdLqo onde é falado que dependendo das etapas aplicadas no Power Query, pode-se perder a instancia de "View Native Query".  O que poderia explicar essa mensagem acima. Mas praticamente qualquer etapa, seja de mudar tipo de dados, fazer split de coluna ou só duplicar uma coluna já faz sumir essa "View Native Query".

    Segue abaixo o print de uma das tabelas que tenho no Power Query com alguns tratamentos, onde já se "perdeu" essa possibilidade de incrementar dados:

    image.png.e550ac275124d6a2cd0b3da222a6ac0e.png

    Alguém já passou por isso? Porque eu acredito que é quase inviável fazer todas as transformações de dados no Banco SQL antes de trazer os dados para o Power BI.
    Será que não tem uma outra opção de ativar essa atualização incremental e manter as etapas de transformação aplicadas?

    No meu caso, o que acontece: O Power BI apresenta aquela mensagem em amarelo, e quando estou no Power BI Serviço ele simplesmente atualiza o banco todo como se não existisse os parâmetros de RangeStart e RangeEnd.
     

     

    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. 1 hora atrás, Maite Aronchi Cruz disse:

    Olá pessoal,

    Quero criar um fluxo no Power automate, para emitir um alerta quando uma coluna de uma planilha de excel, localizada em uma pasta do Sharepoint, é alterada.

    Porém, não encontrei nenhum gatilho específico para que apenas quando a coluna for alterada ele dispare, somente se o arquivo for modificado. Para mim não importa se tiver outras modificações na planilha, somente nesta coluna. 

    Alguém poderia me ajudar?

    Obrigada!

     

     

    Veja esse video:
     

     

    • Thanks 1
  12. 7 horas atrás, Caio Veiga disse:

    pessoal,boa noite.To tentando rodar esse codigo pra criar uma coluna que tenha 4 valores possiveis:"Trimestre Atual","Trimestre passado","Mesmo Trimestre no ano passado" e "Outros"

    o codigo:if [Ano] = List.Max(dCalendario[Ano]) and [Trimestre] = List.Max(dCalendario[Trimestre]) then "Trimestre Atual" else if [Ano] = List.Max(dCalendario[Ano]) and [Trimestre] = List.Max(dCalendario[Trimestre])-1 then "Trimestre Anterior" else if [Ano] = List.Max(dCalendario[Ano])-1 and [Trimestre] = List.Max(dCalendario[Trimestre]) then "T. Ano Passado" else "Outros" O que eu to fazendo de errado pra dar o seguinte erro:Expression.Error: Uma referência cíclica foi encontrada durante a avaliação

    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! 

×
×
  • Criar Novo...