Ir para conteúdo
  • 0

Contar quantidade de acertos consecutivos em uma medida


prfbernardino
Ir para solução Solucionado por Leandro Del Rio ,

Pergunta

  • Alunos

Bom dia 

 

Gostaria de criar uma medida em linguagem dax para contar a quantidade de acertos consecutivos de uma base de dados. Perceba pela imagem abaixo que toda vez que na coluna status aparece a palavra erro esse contador é zerado e ele é reiniciado quando a palavra acerto reaparece. Consegui fazer isso em excel porém não consegui fazer isso em forma de medida na linguagem dax. Vou deixar essa base de dados como exemplo anexado na mensagem.

image.png.d959d6af45dad7fa31e95851c9344efe.png

 

Obrigado.

Pasta1.xlsx

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0
  • Alunos
  • Solução

@prfbernardino,

segue medida ajustada para correção dos erros apontados.

Qtd acertos consecutivos v2 =
VAR vIndice = MIN(fDados[Índice])
VAR vUltimoErro = CALCULATE(
                    MAX(fDados[Índice]),
                    FILTER(
                        ALLSELECTED(fDados),
                        fDados[Índice] <= vIndice &&
                        fDados[Status] = "erro"
                    )
                )              
 
VAR vTeste = CALCULATE(
                MIN(fDados[Índice]),
                FILTER(
                    ALLSELECTED(fDados),
                    fDados[Índice] = vUltimoErro
                )
)
VAR vQtdLinhas = CALCULATE(
                    COUNTROWS(fDados),
                    FILTER(
                        ALLSELECTED(fDados),
                        fDados[Índice] <= vIndice &&
                        fDados[Índice] > vTeste &&
                        fDados[Status] <> "erro"
                    )
                )
RETURN
    vQtdLinhas

 

 

2.png

1.png

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

@prfbernardino,

 

segue medida para solução do problema.

Qtd Acertos consecutivos =
VAR vIndice = SELECTEDVALUE(fDados[Índice])
VAR vUltimoIndiceErro = CALCULATE(
                            MAX(fDados[Índice]),
                            FILTER(
                                ALL(fDados),
                                fDados[Índice] <= vIndice &&
                                fDados[Status] = "Erro"
                            )
)
VAR vResultado =  vIndice - vUltimoIndiceErro
RETURN
    vResultado

Para a coluna índice utilizei a funcionalidade do PowerQuery. PowerQuery > Adicionar colunas >  Coluna de índice.

 

 

1.png

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Obrigado Leandro pelo retorno. 

Deu certo aqui, porém na tabela que irei trabalhar esse código temos também uma coluna com o campeonato do jogo. E essa coluna deverá ser colocada numa segmentação de dados com a possibilidade de executarmos filtro por campeonato. Fiz o teste aqui e quando executo esse filtro essa medida não contabiliza corretamente. Acredito eu que deve ser pelo fato de utilizarmos a remoção de filtros através da função all. Você sabe me dizer como eu poderia fazer essa modificação no código.

 

Obrigado mais uma vez.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

@prfbernardino,

 

segue nova medida. Você terá que alterar os sinais de ">=, <" para adaptar a medida a sua regra de negócios.

Qtd acertos consecutivos =
VAR vIndice = SELECTEDVALUE(fDados[Índice])
VAR vUltimoIndiceErro = COALESCE(
                            CALCULATE(
                                MAX(fDados[Índice]),
                                ALLSELECTED(fDados),
                                fDados[Índice] <= vIndice &&
                                fDados[Status] = "Erro"
                            ),
                            CALCULATE(
                                MIN(fDados[Índice]),
                                ALLSELECTED(fDados)
                            )
)
VAR vTabela = FILTER(
                ALLSELECTED(fDados),
                fDados[Índice] <= vIndice &&
                fDados[Índice] > vUltimoIndiceErro
            )
VAR vResultado = COUNTROWS(vTabela)
RETURN
    vResultado
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Bom dia

@Leandro Del Rio obrigado pelo feedback. Apliquei esse código na minha base teste e deu certo em partes. Quando faço o filtro por competição por exemplo ele conta a quantdade de acertos porém com uma unidade a menos, como mostra figura abaixo.

image.png.ecdc501b0a81efe3c14d6554ceaf56f4.png

Nesse caso a quantidade de acertos consecutivos fica em 5 quando deveria ser 6. Fiz a modificação no código original com a seguinte modificação colocando >= 

image.png.fd039b1f5896d574a6e7cff7c889685f.png

Nesse caso quando filtro deu certo porém quando tiro os filtros a contagem fica errada como mostro abaixo

 

image.png.fede8e227867c8bda95031a95eff325c.png

Tentei fazer algumas outras modificações no código porém não obtive o resultado desejado. Você conseguiria me ajudar quanto a isso. Obrigado mais uma vez.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Bom dia 

@Leandro Del Rio havia tentado isso tb como mostra figura abaixo porém nesse caso executo o filtro ele diminui mais uma unidade ficando com dois acertos a menos na conta e sem o filtro um a menos. O que percebi que sempre tenho uma unidade a mais sem o filtro do que quando executo o filtro por campeonto.

 

image.png.fd7a9677c779e449900feef248d356bf.png

image.png.8f4f4d4262afa774d25519710b4051e3.png

image.png.c39d12a6b7f04a89341d248cd90a8834.png

 

 

Link para o comentário
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
×
×
  • Criar Novo...