Ir para conteúdo
  • 0

SOMA COM CONDIÇÃO DE POSIÇÃO


FrancoAndre
Ir para solução Solucionado por Bruno Abdalla de Souza ,

Pergunta

  • Alunos

Olá à todos!

Preciso de uma medida que faça a soma da coluna de KM criando uma condição para quando não houver km (em branco ou 0) fazer uma subtração da quilometragem atual com a anterior levando consideração a data e placa.

Pretendo utilizar a medida no cartão, a tabela abaixo é apenas um exemplo demonstrativo do problema.

image.png.c91805e69459b6c9c0b1d22e8c269ac2.png

 

Segue o script da tabela no power query:

let
    Fonte = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("bZZNbiU3DISvEng9C/Gf3A6QXS4QDOb+10hJLbaflNk82/DXbKqqSL1fv77SSDm5+OvH18+//+Wf6fhNKfBJRn/9g5+lzv71+8ekeRD+WQdtMZ9mGw9tVNm04YHws3bZrJ1Ne8mmZaQpx1lbVm3etDPbplWHsspBh8yneeimwW/ahnnaWdtrTJrsocOtaWcjcjo7WRrxkIdOVm260I3bpcn47DuTmg40TXLSorX03nSRtybhI3nV+lDQ+KCdWpMMdxt60uuz9aYxaNDGp1Xw88SXAeTWuHG7CYUYFp24LlxfvGI34wOxSb5EdFki+sbJZFd3ogr1y6Fhy6HGmVQanzEbZ2w5cwrSJ51Cb5pZUvwOOS1huPFUblwRlyvlXLM4cfcipGPjMoRnHE7Zx9Kxm8HbXxxxDD6r61guReM6euQcdotoXi7VYaqqtexaGXwJ46s6j8ZteCtjM+36Z5deHMTGA6pa6aXMbCaj6eI2CXHkojO9tkz6Lu4YtY3XMvUsjjyvCHT1oLf1gkuhZ3UW+uwlpNpTpIXCLhnXHJJ0L4FZe3CcU2DCibMvT6nDniNfPKjqwmXtRRJpHMptnBC3Z1l9ptfWODcdvWBgZxbWxh8W43e+isMbD3Rm59Z1npZSddgrq3sRhiV0tW7PSXf1OUuNq6JKXM3E2gIljWenN+AoUn2eVPIZpd0MEfd2DDM8wNd2XEuksmmTnfVwsHd4ZQn1tkL5iu5lSXId1PkzAeiJd7wiCruyThmxYT/HlBgR2HiKSF5Zl2VS7bzQ98oInBGvuu7Rlc53IZF4X6RRPv431LjQVgIaV/Yteg6FoXy2judnyLhlxJ5oHGvb9dowz8aBfBs37KDGMdR2W7o2NYa/cZcte+Kkjrv97H2Z9sYRM51bmZSBP+26Zfb3kTbVcRc1jrCnXJud+cADPi6c3NPzbOXIeUjqJiMib0noc54pYn8ZmS/Q69oVqqMyPNmV0S356bzzc1lEw+6Af/8H", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Codigo Transacao" = _t, Placa = _t, #"Total KM" = _t, #"Total Litros" = _t, Quilometragem = _t]),
    #"Tipo Alterado" = Table.TransformColumnTypes(Fonte,{{"Codigo Transacao", Int64.Type}, {"Placa", type text}, {"Total KM", Int64.Type}, {"Total Litros", type text}, {"Quilometragem", Int64.Type}})
in
    #"Tipo Alterado"

 

Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 1
  • Alunos
  • Solução

Veja agora @FrancoAndre.

CorrecaoKM = 
VAr vPlaca = MAX(F_Abastecimento[Placa])
VAR vkmAtual = MAX(F_Abastecimento[Total KM])
VAR vDataAtual = MAX(F_Abastecimento[Data])
VAR vDatakmAnterior = 
    IF(
        ISBLANK(vkmAtual),
        CALCULATE(
            MAX(F_Abastecimento[Data]),
            ALL(F_Abastecimento),
            F_Abastecimento[Data] < vDataAtual && 
            F_Abastecimento[Placa] = vPlaca
        )
    )
VAr vKmAnterior = 
    IF(
        NOT(ISBLANK(vDatakmAnterior)),
        CALCULATE(
            MAX(F_Abastecimento[Quilometragem]),
            ALL(F_Abastecimento),
            F_Abastecimento[Data] = vDatakmAnterior && 
            F_Abastecimento[Placa] = vPlaca
        )
    )
VAR vkmDataAtual = MAX(F_Abastecimento[Quilometragem])
VAR vkmCorrigido =  
    IF(
        NOT(ISBLANK(vkmAtual)),
        vkmAtual,
        IF(
            NOT(ISBLANK(vkmAtual)) && vkmAtual = 0,
            vkmAtual,
            vkmDataAtual - vKmAnterior
        )
    )
VAR vResultado = 
    IF(
        ISINSCOPE(F_Abastecimento[Placa]),
        vkmCorrigido,
        SUMX(
            SUMMARIZE(
                F_Abastecimento,
                F_Abastecimento[Placa], 
                F_Abastecimento[Data]
            ),
            VAR vDataCorrente = F_Abastecimento[Data]
            VAR vPlacaCorrente = F_Abastecimento[Placa]
            VAR vkmAtualCorrente = CALCULATE(SUM(F_Abastecimento[Total KM]))
            VAR vDatakmAnterior = 
                IF(
                    ISBLANK(vkmAtualCorrente),
                    CALCULATE(
                        MAX(F_Abastecimento[Data]),
                        ALL(F_Abastecimento),
                        F_Abastecimento[Data] < vDataCorrente && 
                        F_Abastecimento[Placa] = vPlacaCorrente
                    )
                )
            VAR vKmAnterior = 
                IF(
                    NOT(ISBLANK(vDatakmAnterior)),
                    CALCULATE(
                        MAX(F_Abastecimento[Quilometragem]),
                        ALL(F_Abastecimento),
                        F_Abastecimento[Data] = vDatakmAnterior && 
                        F_Abastecimento[Placa] = vPlacaCorrente
                    )
                )
            VAR vkmDataAtual = CALCULATE(MAX(F_Abastecimento[Quilometragem]))
            VAR vkmCorrigido =  
                 IF(
                    NOT(ISBLANK(vkmAtualCorrente)),
                    vkmAtualCorrente,
                    IF(
                        NOT(ISBLANK(vkmAtualCorrente)) && vkmAtualCorrente = 0,
                        vkmAtualCorrente,
                        vkmDataAtual - vKmAnterior
                    )
                )
            RETURN
            vkmCorrigido
        )
    )
RETURN
    vResultado

Concordo com o colega @Joao Raulino sobre fazer no Power Query.

  • Like 2
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

@FrancoAndre, na sua base não tem data, mas vc mencionou que seria a data anterior que teria que subtrair. Por isso não entendi tão bem o resultado final. O ideal seria vc mostrar um caso parecido com o real, com filtros no painel e mostrando o valor que deveria dar no cartão, ficando amis fácil de entender o que vc deseja.

 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

  

11 horas atrás, Bruno Abdalla de Souza disse:

@FrancoAndre, na sua base não tem data, mas vc mencionou que seria a data anterior que teria que subtrair. Por isso não entendi tão bem o resultado final. O ideal seria vc mostrar um caso parecido com o real, com filtros no painel e mostrando o valor que deveria dar no cartão, ficando amis fácil de entender o que vc deseja.

 

Perdão Bruno, não me atentei.

Segue o script com a data:

let
    Fonte = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("dZZLbhwxDESvEszagPkXuTWQXS4QGL7/NaKmRE1PTG/GNvBcqK4i2fP5+YDxDvZOQPx4e3z8/ksfbvM3wTE/UfHXn/kzxMgeX2+fD4QW10HzkxQWrhi+cOnVQy91L9yCF269Oqc6bdyINHHiFh98eSeQjc9/WHj/qBZw4agLH6YLh+l9NGYizQAv3Elk4aPHB9y9u6OcIBucJTL3jQfaTgZbXJRecMOVDHqP52fljgAIuKL5QZ5yCkyLV/KTfMdL8nL4GHqi78Ixzixt86i89Ln3Y6BZVfGEsuKByft3ntyvWOpxSXg9LmiLC2LGQ8W70Om2k49LHqnsMAosPnp9h4yz/LARnDXpeMi6RvECtYW9H6F4qVdE9dTb8Jb6BMUr2B6H3k/VdXgjOXW1+Vx+fBQetNua0xONfLb1lDfFZQep5U3X4pb+wG0fe31ivNsZHKtd1BYXziPFZWf43IZark7esl2s4XfwxRO0POfNRObiReO01em75o4XPvbhuXarSzOP5nPYgsYaHoo+zfwbo4Y/PKLamsfqu31dj7v1r+2KGv6O15G3Ibh4r2H+Qd/Xcm0/iFSX03qeMA9s4crnFPa4XHi5Qa/wf3BjdB+GaYuw0m+f1sd9dZHmNKxVgV4/24o9O/i8JNMONvLq90uFbPuFO19wLW/JW/FCZqeshh+03lqVpoQ/y2p4ltTH4pX5WVbH5yGfJ6F44zP7rX/B+3DORXc4dTV8fX2pek1jnLo6nuiFH4Dbj7f8y+QPdjndtuHgfdFxjP39Zb5W5mn7zmO86DvsTb/uWurLf5u7XiujeLPJf/0D", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Data = _t, Placa = _t, #"Total KM" = _t, #"Total Litros" = _t, Quilometragem = _t]),
    #"Tipo Alterado" = Table.TransformColumnTypes(Fonte,{{"Data", type date}, {"Placa", type text}, {"Total KM", Int64.Type}, {"Total Litros", type text}, {"Quilometragem", Int64.Type}})
in
    #"Tipo Alterado"

 

Em anexo vou deixar um modelo e abaixo um print de como está no visual:

image.png.ad92e22d3c8c4168023961a285b65cdb.png

tabela.xlsx

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Suave @FrancoAndre?

Imagino que seria mais robusto criar uma coluna e não uma medida para essa situação. De qualquer maneira, você pode criar uma coluna INDEX na tua tabela e usar a formula abaixo para a medida:

Citar
Total KM Calculado =
VAR CurrentRowValue = SUM('Table'[Quilometragem])
VAR PreviousRowValue =
    CALCULATE(
        SUM('Table'[Quilometragem]),
        FILTER(
            ALL('Table'),
            'Table'[Index] = MAX('Table'[Index]) - 1
        )
    )
RETURN
    IF(
        ISBLANK(SUM('Table'[Total KM])),
        CurrentRowValue - PreviousRowValue,
        SUM('Table'[Total KM])
    )

image.png.ee7182a95d8b2a878d95fb7ec1cae957.png

Se essa resposta te ajudou, não esquece de marcar como melhor solução 😉

Abs!

Editado por Joao Raulino
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
56 minutos atrás, Joao Raulino disse:

Suave @FrancoAndre?

Imagino que seria mais robusto criar uma coluna e não uma medida para essa situação. De qualquer maneira, você pode criar uma coluna INDEX na tua tabela e usar a formula abaixo para a medida:

image.png.ee7182a95d8b2a878d95fb7ec1cae957.png

Se essa resposta te ajudou, não esquece de marcar como melhor solução 😉

Abs!

Olá, Joao Raulino!
Percebi que uma coluna calculada poderia ser uma solução, porém a tabela tem 25 mil linhas e não se pode afetar na performance.

Contudo a coluna calculada tem que respeitar o contexto da data e a placa. Como disse a tabela é uma exemplo demonstrativo de uma só placa.

O valor esperado no total final da medida é 24455, porém o seu 48180 😕 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Veja essa possibilidade @FrancoAndre. Não consigo anexar o exemplo. O fórum tem limitado o tamanho do arquivo para mim direto, impossibilitando de anexar aqui. @Tiago Craici - Xperiun, poderia investigar isso para mim, por favor?

Km = 
VAr vPlaca = MAX(Consulta1[Placa])
VAR vkmAtual = MAX(Consulta1[Total KM])
VAR vDataAtual = MAX(Consulta1[Data])
VAR vDatakmAnterior = 
    IF(
        ISBLANK(vkmAtual),
        CALCULATE(
            MAX(Consulta1[Data]),
            Consulta1[Data] < vDataAtual && 
            Consulta1[Placa] = vPlaca
        )
    )
VAr vKmAnterior = 
    IF(
        NOT(ISBLANK(vDatakmAnterior)),
        CALCULATE(
            MAX(Consulta1[Quilometragem]),
            Consulta1[Data] = vDatakmAnterior && 
            Consulta1[Placa] = vPlaca
        )
    )
VAR vkmDataAtual = MAX(Consulta1[Quilometragem])
VAR vkmCorrigido =  
    IF(
        NOT(ISBLANK(vkmAtual)),
        vkmAtual,
        vkmDataAtual - vKmAnterior
    )
RETURN
    vkmCorrigido

 

Editado por Bruno Abdalla de Souza
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Boa @FrancoAndre!

Você tem toda razão quanto ao ponto da coluna calculada e performance 👍 Quanto ao valor total, o Power Query esta importando o valor "24090" da fonte e por isso esta dando tao elevado no meu exemplo:

image.png.a57c38b0c3131d93f7c9a9650cd049be.png

Para respeitar o contexto da [Placa], bastaria incluir isso dentro da função FILTER() com um 'Table'[Placa] = MAX('Table'[Placa]).

De qualquer maneira, acredito que a solução do @Bruno Abdalla de Souza já resolva todos esses pontos. Da uma olhada nela e conta pra gente se deu certo no teu modelo completo 😉

Abs!

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
2 horas atrás, Bruno Abdalla de Souza disse:

Veja essa possibilidade @FrancoAndre. Não consigo anexar o exemplo. O fórum tem limitado o tamanho do arquivo para mim direto, impossibilitando de anexar aqui. @Tiago Craici - Xperiun, poderia investigar isso para mim, por favor?

Km = 
VAr vPlaca = MAX(Consulta1[Placa])
VAR vkmAtual = MAX(Consulta1[Total KM])
VAR vDataAtual = MAX(Consulta1[Data])
VAR vDatakmAnterior = 
    IF(
        ISBLANK(vkmAtual),
        CALCULATE(
            MAX(Consulta1[Data]),
            Consulta1[Data] < vDataAtual && 
            Consulta1[Placa] = vPlaca
        )
    )
VAr vKmAnterior = 
    IF(
        NOT(ISBLANK(vDatakmAnterior)),
        CALCULATE(
            MAX(Consulta1[Quilometragem]),
            Consulta1[Data] = vDatakmAnterior && 
            Consulta1[Placa] = vPlaca
        )
    )
VAR vkmDataAtual = MAX(Consulta1[Quilometragem])
VAR vkmCorrigido =  
    IF(
        NOT(ISBLANK(vkmAtual)),
        vkmAtual,
        vkmDataAtual - vKmAnterior
    )
RETURN
    vkmCorrigido

 

Bruno, encontrei alguns erros na medida: no contexto onde não há KM rodados ele trouxe o valor da quilometragem atual e no total não veio o valor final esperado.

Outro ponto também que comentei que são kms em branco ou 0 (zero).

Criei um arquivo pbix com uma amostra dos dados e anexei abaixo, nele tem a medida que vc criou.

Teste_Correcao_KM.pbix

Editado por FrancoAndre
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Veja agora

CorrecaoKM = 
VAr vPlaca = MAX(F_Abastecimento[Placa])
VAR vkmAtual = MAX(F_Abastecimento[Total KM])
VAR vDataAtual = MAX(F_Abastecimento[Data])
VAR vDatakmAnterior = 
    IF(
        ISBLANK(vkmAtual),
        CALCULATE(
            MAX(F_Abastecimento[Data]),
            F_Abastecimento[Data] < vDataAtual && 
            F_Abastecimento[Placa] = vPlaca
        )
    )
VAr vKmAnterior = 
    IF(
        NOT(ISBLANK(vDatakmAnterior)),
        CALCULATE(
            MAX(F_Abastecimento[Quilometragem]),
            F_Abastecimento[Data] = vDatakmAnterior && 
            F_Abastecimento[Placa] = vPlaca
        )
    )
VAR vkmDataAtual = MAX(F_Abastecimento[Quilometragem])
VAR vkmCorrigido =  
    IF(
        NOT(ISBLANK(vkmAtual)) || vkmAtual = 0,
        vkmAtual,
        vkmDataAtual - vKmAnterior
    )
VAR vResultado = 
    IF(
        ISINSCOPE(F_Abastecimento[Placa]),
        vkmCorrigido,
        SUMX(
            SUMMARIZE(
                F_Abastecimento,
                F_Abastecimento[Placa], 
                F_Abastecimento[Data]
            ),
            VAR vDataCorrente = F_Abastecimento[Data]
            VAR vPlacaCorrente = F_Abastecimento[Placa]
            VAR vkmAtualCorrente = CALCULATE(SUM(F_Abastecimento[Total KM]))
            VAR vDatakmAnterior = 
                IF(
                    ISBLANK(vkmAtualCorrente),
                    CALCULATE(
                        MAX(F_Abastecimento[Data]),
                        F_Abastecimento[Data] < vDataCorrente && 
                        F_Abastecimento[Placa] = vPlacaCorrente
                    )
                )
            VAR vKmAnterior = 
                IF(
                    NOT(ISBLANK(vDatakmAnterior)),
                    CALCULATE(
                        MAX(F_Abastecimento[Quilometragem]),
                        F_Abastecimento[Data] = vDatakmAnterior && 
                        F_Abastecimento[Placa] = vPlacaCorrente
                    )
                )
            VAR vkmDataAtual = CALCULATE(MAX(F_Abastecimento[Quilometragem]))
            VAR vkmCorrigido =  
                IF(
                    NOT(ISBLANK(vkmAtualCorrente)) || vkmAtualCorrente = 0,
                    vkmAtualCorrente,
                    vkmDataAtual - vKmAnterior
                )
            RETURN
            vkmCorrigido
        )
    )
RETURN
    vResultado

Não consigo anexar aqui. Qualquer coisa te mando no privado.

  • Like 1
Link para o comentário
Compartilhar em outros sites

  • 0
  • Admin
8 horas atrás, Bruno Abdalla de Souza disse:

Veja essa possibilidade @FrancoAndre. Não consigo anexar o exemplo. O fórum tem limitado o tamanho do arquivo para mim direto, impossibilitando de anexar aqui. @Tiago Craici - Xperiun, poderia investigar isso para mim, por favor?

Km = 
VAr vPlaca = MAX(Consulta1[Placa])
VAR vkmAtual = MAX(Consulta1[Total KM])
VAR vDataAtual = MAX(Consulta1[Data])
VAR vDatakmAnterior = 
    IF(
        ISBLANK(vkmAtual),
        CALCULATE(
            MAX(Consulta1[Data]),
            Consulta1[Data] < vDataAtual && 
            Consulta1[Placa] = vPlaca
        )
    )
VAr vKmAnterior = 
    IF(
        NOT(ISBLANK(vDatakmAnterior)),
        CALCULATE(
            MAX(Consulta1[Quilometragem]),
            Consulta1[Data] = vDatakmAnterior && 
            Consulta1[Placa] = vPlaca
        )
    )
VAR vkmDataAtual = MAX(Consulta1[Quilometragem])
VAR vkmCorrigido =  
    IF(
        NOT(ISBLANK(vkmAtual)),
        vkmAtual,
        vkmDataAtual - vKmAnterior
    )
RETURN
    vkmCorrigido

 

@Bruno Abdalla de Souza Espaço liberado... Pode anexar os arquivos 👍

  • Thanks 1
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
Em 01/02/2024 em 16:58, Bruno Abdalla de Souza disse:

Veja agora

CorrecaoKM = 
VAr vPlaca = MAX(F_Abastecimento[Placa])
VAR vkmAtual = MAX(F_Abastecimento[Total KM])
VAR vDataAtual = MAX(F_Abastecimento[Data])
VAR vDatakmAnterior = 
    IF(
        ISBLANK(vkmAtual),
        CALCULATE(
            MAX(F_Abastecimento[Data]),
            F_Abastecimento[Data] < vDataAtual && 
            F_Abastecimento[Placa] = vPlaca
        )
    )
VAr vKmAnterior = 
    IF(
        NOT(ISBLANK(vDatakmAnterior)),
        CALCULATE(
            MAX(F_Abastecimento[Quilometragem]),
            F_Abastecimento[Data] = vDatakmAnterior && 
            F_Abastecimento[Placa] = vPlaca
        )
    )
VAR vkmDataAtual = MAX(F_Abastecimento[Quilometragem])
VAR vkmCorrigido =  
    IF(
        NOT(ISBLANK(vkmAtual)) || vkmAtual = 0,
        vkmAtual,
        vkmDataAtual - vKmAnterior
    )
VAR vResultado = 
    IF(
        ISINSCOPE(F_Abastecimento[Placa]),
        vkmCorrigido,
        SUMX(
            SUMMARIZE(
                F_Abastecimento,
                F_Abastecimento[Placa], 
                F_Abastecimento[Data]
            ),
            VAR vDataCorrente = F_Abastecimento[Data]
            VAR vPlacaCorrente = F_Abastecimento[Placa]
            VAR vkmAtualCorrente = CALCULATE(SUM(F_Abastecimento[Total KM]))
            VAR vDatakmAnterior = 
                IF(
                    ISBLANK(vkmAtualCorrente),
                    CALCULATE(
                        MAX(F_Abastecimento[Data]),
                        F_Abastecimento[Data] < vDataCorrente && 
                        F_Abastecimento[Placa] = vPlacaCorrente
                    )
                )
            VAR vKmAnterior = 
                IF(
                    NOT(ISBLANK(vDatakmAnterior)),
                    CALCULATE(
                        MAX(F_Abastecimento[Quilometragem]),
                        F_Abastecimento[Data] = vDatakmAnterior && 
                        F_Abastecimento[Placa] = vPlacaCorrente
                    )
                )
            VAR vkmDataAtual = CALCULATE(MAX(F_Abastecimento[Quilometragem]))
            VAR vkmCorrigido =  
                IF(
                    NOT(ISBLANK(vkmAtualCorrente)) || vkmAtualCorrente = 0,
                    vkmAtualCorrente,
                    vkmDataAtual - vKmAnterior
                )
            RETURN
            vkmCorrigido
        )
    )
RETURN
    vResultado

Não consigo anexar aqui. Qualquer coisa te mando no privado.

Bruno, tentei novamente e a medida não está somando quando o contexto onde não há KM Rodados:

image.png.1f2e819b41aa9a793a179017038d0875.png

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Bruno, fiz uma medida que trouxe o valor correto no contexto da linha, porém o total é que me quebrando.

 

CorrecaoKM II = 
VAR KMCorrigido = 
CALCULATE(
    MAX(F_Abastecimento[Quilometragem]),
    FILTER(
        ALL(F_Abastecimento),
        F_Abastecimento[Data] < MIN(F_Abastecimento[Data]) &&
        F_Abastecimento[Placa] = SELECTEDVALUE(F_Abastecimento[Placa]) 
    )
)
VAR CorrecaoKM = 
MAX(F_Abastecimento[Quilometragem]) - KMCorrigido 
RETURN
CorrecaoKM

image.png.f427ad19285095bb57d05d06900f205e.png

 

Fiz alguns teste no Visualizador DAX e utilizei a mesma medida dentro de uma summarize e conseguir trazer o valor de 24455 esperado. Contudo ao utilizar em uma tabela ou cartão, traz um valor muito distante do esperado.

Além também de ter um problema grave de processamento, no visualizador dax demorou mais de 3 minutos pra rodar esse código, isso por causa das variáveis dentro da summarize. 

image.png.30daa921b18d8bca6b80da1e6b888efd.png

 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Boa @FrancoAndre!

31 minutos atrás, FrancoAndre disse:

Além também de ter um problema grave de processamento, no visualizador dax demorou mais de 3 minutos pra rodar esse código, isso por causa das variáveis dentro da summarize.

Esse é um ótimo exemplo de uma operação que poderia ser feita diretamente no Power Query para deixar o modelo mais leve e facilitar os cálculos.

Quando o DAX começa a ficar muito complicado é sinal de que precisamos rever nossa estrutura 😉

Forca ai!

  • Like 1
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
1 hora atrás, Joao Raulino disse:

Boa @FrancoAndre!

Esse é um ótimo exemplo de uma operação que poderia ser feita diretamente no Power Query para deixar o modelo mais leve e facilitar os cálculos.

Quando o DAX começa a ficar muito complicado é sinal de que precisamos rever nossa estrutura 😉

Forca ai!

Teria alguma sugestão de como fazer isso no power query?

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
12 horas atrás, Bruno Abdalla de Souza disse:

Veja agora @FrancoAndre.

CorrecaoKM = 
VAr vPlaca = MAX(F_Abastecimento[Placa])
VAR vkmAtual = MAX(F_Abastecimento[Total KM])
VAR vDataAtual = MAX(F_Abastecimento[Data])
VAR vDatakmAnterior = 
    IF(
        ISBLANK(vkmAtual),
        CALCULATE(
            MAX(F_Abastecimento[Data]),
            ALL(F_Abastecimento),
            F_Abastecimento[Data] < vDataAtual && 
            F_Abastecimento[Placa] = vPlaca
        )
    )
VAr vKmAnterior = 
    IF(
        NOT(ISBLANK(vDatakmAnterior)),
        CALCULATE(
            MAX(F_Abastecimento[Quilometragem]),
            ALL(F_Abastecimento),
            F_Abastecimento[Data] = vDatakmAnterior && 
            F_Abastecimento[Placa] = vPlaca
        )
    )
VAR vkmDataAtual = MAX(F_Abastecimento[Quilometragem])
VAR vkmCorrigido =  
    IF(
        NOT(ISBLANK(vkmAtual)),
        vkmAtual,
        IF(
            NOT(ISBLANK(vkmAtual)) && vkmAtual = 0,
            vkmAtual,
            vkmDataAtual - vKmAnterior
        )
    )
VAR vResultado = 
    IF(
        ISINSCOPE(F_Abastecimento[Placa]),
        vkmCorrigido,
        SUMX(
            SUMMARIZE(
                F_Abastecimento,
                F_Abastecimento[Placa], 
                F_Abastecimento[Data]
            ),
            VAR vDataCorrente = F_Abastecimento[Data]
            VAR vPlacaCorrente = F_Abastecimento[Placa]
            VAR vkmAtualCorrente = CALCULATE(SUM(F_Abastecimento[Total KM]))
            VAR vDatakmAnterior = 
                IF(
                    ISBLANK(vkmAtualCorrente),
                    CALCULATE(
                        MAX(F_Abastecimento[Data]),
                        ALL(F_Abastecimento),
                        F_Abastecimento[Data] < vDataCorrente && 
                        F_Abastecimento[Placa] = vPlacaCorrente
                    )
                )
            VAR vKmAnterior = 
                IF(
                    NOT(ISBLANK(vDatakmAnterior)),
                    CALCULATE(
                        MAX(F_Abastecimento[Quilometragem]),
                        ALL(F_Abastecimento),
                        F_Abastecimento[Data] = vDatakmAnterior && 
                        F_Abastecimento[Placa] = vPlacaCorrente
                    )
                )
            VAR vkmDataAtual = CALCULATE(MAX(F_Abastecimento[Quilometragem]))
            VAR vkmCorrigido =  
                 IF(
                    NOT(ISBLANK(vkmAtualCorrente)),
                    vkmAtualCorrente,
                    IF(
                        NOT(ISBLANK(vkmAtualCorrente)) && vkmAtualCorrente = 0,
                        vkmAtualCorrente,
                        vkmDataAtual - vKmAnterior
                    )
                )
            RETURN
            vkmCorrigido
        )
    )
RETURN
    vResultado

Concordo com o colega @Joao Raulino sobre fazer no Power Query.

Perfeito, Bruno! Medida serviu perfeitamente, agradeço o apoio.

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