Ir para conteúdo

Rodrigo R1

Alunos
  • Total de itens

    420
  • Registro em

  • Última visita

Posts postados por Rodrigo R1

  1. Boa noite, @Karollyne Layane. Tudo bem?

    Criei uma sugestão para a solução do seu case, usando como base dados que você apresentou em sua última pergunta aqui no fórum.

    Para validar a criação das medidas eu acrescentei mais algumas linhas na tabela fato, acrescentando mais 2 produtos diferentes.

    Muito provavelmente você terá que adaptar ao seu modelo, mas o raciocínio será o mesmo para replicar as medidas.

    Como o @Tiago Craici disse acima, o ideal é que você disponibilize os dados, mesmo que fictícios, mas que contextualize a sua realidade e qual o resultado esperado. Dessa forma, a gente consegue te ajudar de forma tempestiva e você não fica aguardando muito tempo por respostas. Enfim....deixa te apresentar minha sugestão:

    Primeiro eu criei as seguintes medidas:

    Atual = sum(Fato[Valor])

     

    Anterior =

    var maxdata = Max(Fato[Data])

    var ultimadata = CALCULATE(Max(Fato[Data]),

                        dCalendario[Date] < maxdata)

    var valor = CALCULATE([Atual], dCalendario[Date] = ultimadata)

    return

    valor

     

    ▲ = DIVIDE([Atual] - [Anterior], [Anterior])

    A medida "Atual" é o valor atual do produto. A "Anterior", como o nome já diz, é o valor anterior. E a "▲" é a Variação entre elas - para identificar se houve ou não variação ao longo do tempo.

    Para encontrar a quantidade de produtos que teve variação de seu valor, foi preciso criar uma tabela virtual, com base na tabela fato, adicionando a coluna de produtos, de data, e por fim a coluna de variação do valor dos produtos. Após isso eu fiz um filtro nessa tabela para considerar apenas as variações diferentes de zero (<>0). Perceba que essa condição traz resultado True ou False - sendo assim, o filtro foi aplicado quando essa condição for True. Por fim, fiz a contagem de linhas resultantes, após aplicadas todas essas condições. Obs.: Leia a medida de dentro pra fora (da SUMMARIZE para a COUNTROWS) que irá entender o raciocínio aplicado, seguindo a descrição acima.

    Segue a medida:

    ▲ Valor =

    COUNTROWS(

    FILTER(

    ADDCOLUMNS(

    SUMMARIZE(Fato,

    Fato[Produto],

    dCalendario[Date]),

    "Variação", [▲] <> 0), [Variação] = True))

    A medida acima é um pouco mais avançada, mas nada que impeça a sua compreensão em entender os conceitos de DAX aplicados. 

    Após isso, chegamos no seguinte resultado:

    image.png.888677bb0fec523e46a5c9d01431024a.png

    Veja que o produto Café, teve 3 variações de valor ao longo do tempo. O suco apenas 1 vez. E o leite nenhuma alteração.

    Por essa razão, a quantidade de variações de valor foram 4, considerando todo o período analisado.

    Mas quando analisamos por mês, teremos que em Fevereiro apenas café teve variação; em abril 2 produtos (café e suco) e em julho, o café novamente.

    Segue PBIX para melhor ajudar a compreensão das medidas criadas.

    Espero que tenha conseguido ajudar de alguma maneira.

    Te desejo muito sucesso....até mais....

    Dúvida Karollyne Fórum.pbix

    • Like 2
  2. Bom dia @FlavioG. Tudo bem, amigo.

    Acredito que a aula abaixo irá ter ajudar a compreender o raciocínio necessário pra chegar no resultado que vc deseja.

    "Ex. 2: Listando clientes recorrentes (compraram em dois meses seguidos) - [TC] 5A. Exercícios e Desafios com DAX" https://play.powerbiexperience.com/curso/tc-5a-exercicios-e-desafios-com-dax/5183/24946

    Nesse módulo tem mais algumas aulas pra assistir que poderão complementar o aprendizado e o raciocínio lógico aplicado em casos semelhantes ao seu.

    Espero que tenha conseguido ajudar.

    Sucesso aí, amigo.

  3. Bom dia, @douglasgodinho.

    Mesmo com problema de integridade de dados do seu modelo, eu criei uma nova dcalendario para poder fazer as medidas e não te deixar sem resposta.

    De toda forma, será preciso você revisar toda sua modelagem antes de continuar - para evitar problemas futuros e gerar análises não confiáveis.

    image.png.92cd2675185dbba60d3ec6b92c693794.png

    As medidas "Clientes Novos R1", "Perdidos 3 meses R1 dt", "Perdidos 3 meses R1 filter", "Clientes Perdidos R1", foram feitas seguindo os princípios da Teoria dos Conjuntos da Matemática.

    A "Perdidos 3 meses R1 dt" foi feita usando a função Dateinsperiod. 

    Já a "Perdidos 3 meses R1 filter" foi criada de outra forma, usando a função FILTER; sendo que as 2 apresentam o mesmo resultado, como pode ver acima. Aí você decide qual utilizar...rsrsrs....

    "Clientes ACC R1" representa o acumulado de clientes ao longo do tempo. Essa medida foi usada para considerar a quantidade de clientes que até o contexto atual.

    Eu usei essa medida para fazer o comparativo de clientes perdidos em 90 dias. Acredito que o resultado possa ser mais assertivo - apesar disso ser uma regra do negócio para se apurar o Churn. Então não tem certo ou errado - depende mesmo do que pretende visualizar. Já vi inclusive alguns vídeos apurando o Churn a partir do total de clientes - que no seu caso seriam 8.035. Mas essa quantidade só foi atingida em Agosto/2022 - por isso não achei justo usar esse valor para todos os meses anteriores, entendeu? Reforço que não tem certo ou errado - depende da regra do negócio, ok? Aí, mais uma vez, você decide...rsrsrs....seguindo as suas regras de negócios.

    Vou deixar o PBIX com as medidas para sua análise.

    Caso essa tenha sido a melhor resposta para o seu case, peço a gentileza de marca-la para fechar o post.

    Espero que tenha conseguido ajudar.

    Sucesso aí, amigo....

    clientes (1).pbix

  4. Prezado @douglasgodinho. Tudo bem, amigo?

    Estou analisando seu modelo de dados e ele está com um erro grave de integridade em sua tabela dcalendário. 

    Veja abaixo que existem dias que pertencem a 2021 e foram informados como 2022 e 1 dia de 2023 que ficou como 2022.

    image.png.81fdabd7537f5373f17acee09dbd80d7.png

    image.png.050c9f702c14ca8b02d9dff47f41dbb9.png

    As duas situações ocorreram no mês de Janeiro, o que tem prejudicado as análises de inteligência de tempo para chegar no resultado que você deseja.

    image.png.5a5735e5fa28d2e21ba4df4dbbb22038.png

    Veja acima o valor acumulado da medida que eu criei, que ela está trazendo para Janeiro de 2022 o resultado que seria para dezembro de 2022.

    O mesmo acontecendo para em Janeiro de 2021 que está com o resultado de Janeiro de 2022.

    Estou há um bom tempo tentando entender o motivo de erros apresentados nas medidas que eu criei e eu não encontrava a razão disso.

    Daí fui analisar sua base de dados e descobri o motivo.

    Sendo assim, gentileza ajustar e disponibilizar uma base com a integridade de dados garantida, para que possamos conseguir te ajudar.

    Aguardo seu retorno.

     

  5. Bom dia @Filippe Reis. Tudo bem amigo?

    Segue minha sugestão para solução do seu case:

    Solução R1 =

    var contexto = Min(dCalendario[Data])

    var datamax = CALCULATE(MAX(Concluidas[DATA_FIM]),

                    all(dCalendario))

     

    var acc1 = CALCULATE(

        [Concluidas Simulador],

        DATESYTD(dCalendario[Data])

    )

     

    var accmeta = CALCULATE([Meta],

                    filter(all(dCalendario),

                    dCalendario[Data] <= MAX(dCalendario[Data]) &&

                    dCalendario[Data] > EOMONTH(datamax, 0)))

     return

    if( contexto > EOMONTH(datamax, 0), accmeta + acc1, acc1)

    image.png.bcc8e9d4ee621388c17d72f8c3e2248e.png

    Espero que tenha conseguido ajudar.

    Sucesso aí, amigo....

    • Like 2
  6. Bom dia @Karollyne Layane. Tudo bem?

    A lógica para a solução do seu case foi apresentada pelo Leo na Live 67 abaixo. Avance o vídeo até 01:21hs que ele apresenta uma dúvida aqui do fórum com problema semelhante. Aí seria só vc adaptar à sua realidade.

    "[Extra] Live #67 Mestre Power BI - 4. Linguagem DAX" https://play.powerbiexperience.com/curso/4-linguagem-dax/1857/10510

    Espero que tenha conseguido ajudar.

    Sucesso aí...

    • Like 1
  7. Ah sim, @Carlos Silvaentendi....

    Vi que seus dados estão em Excel, né?

    Talvez seja melhor leva-los para o PBI e lá construir as medidas necessárias, usando a função Rankx.

    Mas para desempatar o ranking, sugiro criar um segunda regra a ser analisada em conjunto.

    Pense no campeonato brasileiro de futebol onde temos 2 times empatados com a mesma quantidade de pontos.

    A segunda regra a ser seguida é a quantidade de vitórias, depois saldo de gols (salvo engano...rsrsrs) e por aí vai...

    Portanto, é usual utilizar uma segunda regra para esse desempate - ou até mais se necessário for.

    No ranking de vendas, para o desempate, você poderia usar a quantidade de produtos vendidos. 2 vendedores tiveram o mesmo valor vendido, mas 1 teve 10 produtos e outro 20 produtos.

    Aí a segunda regra poderia ser pela quantidade vendida para desempatar - aí nesse caso, quem vendeu 20 produtos seria o primeiro.

    Ou talvez pelo ticket médio das vendas. Aí a lógica anterior se inverte: quem vendeu menos produtos, teve maior ticket médio de vendas e por isso seria o primeiro colocado em seu ranking.

    Então o desempate passa ser uma nova regra que também tenha um significado importante para o negócio da empresa, entendeu?

    A função Rankx do Dax até tem argumentos para ordenar esses empates.

    Ela pode ser assim:

    1
    2
    3
    3
    5
    6

    ou assim:

    1
    2
    3
    3
    4
    5

    Para ser assim:

    1
    2
    3
    4
    5
    6

    você precisa criar realmente mais de uma regra para tentar fugir dos empates. Procura no curso por ranking que salvo engano o Leo também explica sobre esse critério de desempate.

    Espero que tenha conseguido ajudar novamente.

    Sucesso aí, amigo.

    • Like 1
  8. Boa noite @Divair Zarpelon. Tudo bem, amigo.

    Segue a medida para a solução do seu case:

    % A VENCER COM RANKING =

    IF (

        [ranking] <= SELECTEDVALUE ('Numero Fornecedores'[Numero Fornecedores]),

        [% sobre total],

        IF (

            SELECTEDVALUE ( FORNECEDOR[Nome Fornecedor] ) = "Outros",

           Divide(

               CALCULATE (

            _Medidas[A vencer],

            FILTER (

                ALL ( FORNECEDOR[Nome Fornecedor] ),

                [ranking] > SELECTEDVALUE ('Numero Fornecedores'[Numero Fornecedores])

                )

            ), [total a vencer])  

           

        )

    )

    Espero que tenha ajudado, amigo.

    Sucesso aí....

     

    image.png.073460f49ac1ba227e4206147d39369d.png

  9. Boa noite @douglasgodinho. Tudo bem amigo?

    Deixa complementar a minha resposta depois de analisar o seu modelo de dados.

    image.png.32b864aa184fb274ff72798732bc2196.png

    Segue na imagem acima, a medida que eu criei para considerar apenas os clientes que estão presentes na tabela fato depósito.

    Fiz uma medida que os antigos são aqueles que anteriores ao contexto e os atuais aqueles que estão no contexto vigente.

    A exceção dessas duas tabelas, traz os clientes que são os novos, ou seja, que ainda não tiveram presente na tabela fato - aí é só fazer uma contagem de linhas dessa tabela resultante.

    Veja abaixo que quando o filtro está aplicado em janeiro, na tabela ao lado teremos os ids do clientes presentes naquele mês.

    E como era de se esperar, a medida irá trazer o mesmo valor, pois todos são clientes novos, pois não temos data anterior a esse contexto - Janeiro/2021:

    image.png.bd13f053962e5954b0fcc1e9036289d1.png

    Perceba que o cliente 288144 - da primeira linha. Veja que ele é um cliente do contexto atual - portanto considerado na medida R1.

    Agora quando fazemos o filtro em novembro, esse mesmo cliente não é mais considerado na medida R1, pois já apareceu anteriormente a esse contexto. Veja:

    image.png.1a7b2a3f4f5ad4cf83e9bee3c941c008.png

    O que valida a medida R1 que foi criada.

    Outro importante detalhe para você ajustar o seu modelo é que não existe uma integridade entre a tabela fato deposito e a tabela dimensão clientes, conforme imagem abaixo:

    image.png.822da7164a595770077ce7aa98e4403e.png

    Veja que existe ids de clientes que estão na tabela fato e não estão na tabela dimensão. Isso pode trazer alguns problemas em suas análises.

    O ideal é rever a modelagem para garantir que todos os clientes estejam presentes na tabela dimensão.

    Espero que tenha conseguido ajudar de alguma maneira.

    Sucesso aí, amigo.

    • Like 2
  10. Boa tarde, @douglasgodinho. Tudo bem amigo?

    Deixa compartilhar contigo meu artigo do LinkedIn sobre esse assunto.

    https://www.linkedin.com/posts/rodrigo-r1_powerbi-gestaeto-vendas-activity-6959732932722720768-p1uK?utm_source=linkedin_share&utm_medium=android_app

    Eu fiz sobre a dimensão produto do meu modelo, mas o raciocínio lógico é o mesmo para clientes, vendedores, etc.

    Espero que possa ajudar de alguma maneira.

    Sucesso aí, amigo...

  11. Boa tarde, @joaopaulocorreia

    O percentual é a divisão entre dois fatores.

    na sua medida Divide so tem 1.

    Pra conseguir fazer isso, vc precisa encontrar primeiro o valor total - que é feito usando a função ALL:

    Total: CALCULATE[suamedida], ALL(tabeladimensaodocontextoavaliado)

    Depois disso vc faz o DIVIDE:

    % = DIVIDE( [suamedida], [total])

    Espero que tenha conseguido ajudar.

    Sucesso aí...

    • Like 1
  12. Boa tarde @pedrohmfortunato. Tudo bem amigo?

    Você precisa acrescentar mais uma CACULATE na sua medida, acrescentando o filtro de inteligência de tempo SAMEPERIODLASTYEAR, assim:

     

    ACUMULADO YTD RAIZ ALLSELECTED =
    CALCULATE(
    CALCULATE(
        [Total Vendido],
        SAMEPERIODLASTYEAR(dCalendario[Data])),
        CALCULATETABLE(
        FILTER(
        ALLSELECTED(dCalendario),
        dCalendario[Data] <= MAX(dCalendario[Data])),
        dCalendario[Check Data Venda] = TRUE()
         ),VALUES(dCalendario[Ano]) //POR FORA DA CALCUALTE TABLE
    )

     

    Caso contrário, pode criar essa medida também e depois usa-la no lugar da medida [Total Vendido].

    ACUMULADO YTD RAIZ ALLSELECTED 2 =
     
    CALCULATE(
        [SPLY Total Vendido],
        CALCULATETABLE(
        FILTER(
        ALLSELECTED(dCalendario),
        dCalendario[Data] <= MAX(dCalendario[Data])),
        dCalendario[Check Data Venda] = TRUE()
         ),VALUES(dCalendario[Ano])) //POR FORA DA CALCUALTE TABLE

    Espero que tenha ajudado, amigo.

    Sucesso aí....

     

    • Like 1
  13. Boa tarde, @jefersonmacedo2005. Tudo bem amigo?

    Veja se esse seria o resultado que você precisa:

    image.png.86d2a083d18a3e1d58aa93cb99419509.png

    Eu usei as seguintes medidas para chegar nos valores acima:

    Estágio Atual = CALCULATE(MAX(BASE[ESTÁGIO]),  BASE[SEQ_HIST] = MAX(BASE[SEQ_HIST]))

    HORA ATUAL = CALCULATE(MAX(BASE[DATA/HORA]), BASE[SEQ_HIST] = MAX(BASE[SEQ_HIST]))

    SEQ ATUAL = MAX(BASE[SEQ_HIST])

    Espero que tenha conseguido ajudar, amigo.

    Sucesso aí....

  14. Bom dia, @Mario R. Tudo bem amigo?

    Sobre a sua dúvida 1, a forma de fazer com que o visual desconsidere o filtro de data aplicado a ele, talvez seria usar o raciocínio que o Leo explica na Live 72 - Eixos Dinâmicos.

    "[Live #72 Mestre Power BI] Tornando os Eixos Dinâmicos em visuais com DAX Avançado - Lives sobre Linguagem DAX - Pilar 4" https://play.powerbiexperience.com/curso/lives-sobre-linguagem-dax-pilar-4/5102/26995

    Talvez poderia desabilitar a interação entre o segmentador de datas e o visual. Mas teria que avaliar se seria a uma boa alternativa para seu case.

    Agora para a sua segunda  dúvida, acredito que a melhor alternativa seria seguir a postagem do Leo no YouTube, que até foi uma dúvida minha...rsrsrs...

    Pq será preciso ajustar o modelo de dados, ou fazer em Dax, de forma que retorne todos os dias entre seu range de datas início e término.

    Todas as 2 soluções são avançadas, mas foi o que acredito ser o raciocínio lógico pra encontrar o resultado desejado.

    Espero que tenha ajudado...

    Sucesso aí, amigo...

  15.  

    E na DATEAAD troca o primeiro argumento por DCalendario[data].

    A lógica utilizada é para voltar no tempo.

    A função DATEAAD é capaz de fazer isso, então estamos voltando um mês anterior ao contexto. E na outra voltando 2 meses. 

    O difícil pra mim é que estou no celular. Aí num consigo testar o resultado.

    Se não der certo o que vc deseja, disponibiliza a base de dados, com PBIX, se possível, que quando eu tiver no meu PC, eu faço os testes certinho antes de te enviar a solução.

  16. O problema está na DATEADD...rsrsrs

    Eu coloquei uma argumento a mais que não precisava...retira essa variável de mês atual...rsrsrs

    Como te falei que estou respondendo do celular...ai não tinha como testar a medida...rsrs

    Veja se agora dá certo, por favor

  17. Boa tarde, @schmeisck.

    Acredito que seja assim:

    Solução R1=

    VAr Mêsatual = Max(dcalendario[data])

    Var Atual = Sum(tabelafato[qtd]) * 6

    Var anterior = CALCULATE (Sum(tabelafato[qtd]), DATEAAD(dcalendario, Mêsatual, -1, Month)) * 5

    VAR anterior2 = CALCULATE Sum(tabelafato[qtd]), DATEAAD(dcalendario, Mêsatual, -2, Month) * 4

    Return

    Atual + anterior + anterior2

    Espero que seja isso. 

    Talvez tenha que fazer algum ajuste nas medidas, pq estou respondendo do celular..rsrs...mas a lógica seria essa.

    Espero que tenha ajudado.

    Sucesso aí, amigo.

×
×
  • Criar Novo...