Tudo que estiver relacionado a tratamento de dados, Power Query editor e linguagem M
Por CleuberZago 18 Mai 2020 às 23:26
Membro Novato
Mensagens: 88
Reputação: 1
#54935
Olá pessoal,

Tenho uma base muito extensa com inúmeros dados sobre jogos de tênis, incluindo os placares ponto-a-ponto, jogo-a-jogo, partida por partida e preciso de ajuda para conseguir criar uma coluna condicional binária que valide a incidência de um determinado placar dentro de um game de uma partida.

Nessa coluna condicional preciso que a fórmula consiga ler distintamente para a partida (match_id) e para o game (Gm#) se houve deuce (placar de 40-40 ( [Pts] = "40-40" )). Caso tenha havido, todas a linhas daquele game deve ficar com 1 nessa coluna, caso não deve ficar 0.

Em resumo, caso tenha ocorrência do placar 40-40 todas as linhas daquele game naquela partida deve ficar com 1 nessa nova coluna .

No arquivo anexo um exemplo muito simples disso, o valor que está na coluna Check é o esperado.

EDIT: Caso achem que seja melhor condicionar isso com medidas, também aceito sugestões rsrsrsrs.
Apenas usuários registrados podem ver ou baixar anexos.
Por osvaldomp 19 Mai 2020 às 09:24
Excel Expert
Mensagens: 1727
Reputação: 864
#54943
CleuberZago escreveu:... preciso que a fórmula consiga ler distintamente ...
Eu sugiro uma solução via macro ou UDF. Retorne se houver interesse.

EDIT: Caso achem que seja melhor condicionar isso com medidas, também aceito sugestões rsrsrsrs.
O que exatamente você quer dizer com "condicionar isso com medidas" ?
Por babdallas 19 Mai 2020 às 09:50
Excel Expert
Mensagens: 2564
Reputação: 1128
#54945
Código: Selecionar todoslet
    Fonte = Excel.CurrentWorkbook(){[Name="Tabela1"]}[Content],
    TiposAlterados = Table.TransformColumnTypes(Fonte,{{"match_id", type text}, {"Gm#", Int64.Type}, {"Pts", type text}}),
    InsereColMatchidGm = Table.AddColumn(TiposAlterados, "match_id-Gm#", each Text.Combine({[match_id], Text.From([#"Gm#"], "pt-BR")}, "-"), type text),
    AgrupaLinhas = Table.TransformColumnTypes(Table.Group(InsereColMatchidGm, {"match_id-Gm#"}, {{"Check", each List.Count(List.FindText(_[Pts],"40-40"))}}),{{"Check", type number}}),
    MesclaEtapas = Table.NestedJoin(AgrupaLinhas, {"match_id-Gm#"}, InsereColMatchidGm, {"match_id-Gm#"}, "AgrupaLinhas", JoinKind.LeftOuter),
    Expande = Table.ExpandTableColumn(MesclaEtapas, "AgrupaLinhas", {"match_id", "Gm#", "Pts"}, {"AgrupaLinhas.match_id", "AgrupaLinhas.Gm#", "AgrupaLinhas.Pts"}),
    RemoveColMatchidGm = Table.SelectColumns(Expande,{"AgrupaLinhas.match_id", "AgrupaLinhas.Gm#", "AgrupaLinhas.Pts", "Check"})
in
    RemoveColMatchidGm
Apenas usuários registrados podem ver ou baixar anexos.
Por CleuberZago 19 Mai 2020 às 22:12
Membro Novato
Mensagens: 88
Reputação: 1
#54968
babdallas escreveu:
Código: Selecionar todoslet
    Fonte = Excel.CurrentWorkbook(){[Name="Tabela1"]}[Content],
    TiposAlterados = Table.TransformColumnTypes(Fonte,{{"match_id", type text}, {"Gm#", Int64.Type}, {"Pts", type text}}),
    InsereColMatchidGm = Table.AddColumn(TiposAlterados, "match_id-Gm#", each Text.Combine({[match_id], Text.From([#"Gm#"], "pt-BR")}, "-"), type text),
    AgrupaLinhas = Table.TransformColumnTypes(Table.Group(InsereColMatchidGm, {"match_id-Gm#"}, {{"Check", each List.Count(List.FindText(_[Pts],"40-40"))}}),{{"Check", type number}}),
    MesclaEtapas = Table.NestedJoin(AgrupaLinhas, {"match_id-Gm#"}, InsereColMatchidGm, {"match_id-Gm#"}, "AgrupaLinhas", JoinKind.LeftOuter),
    Expande = Table.ExpandTableColumn(MesclaEtapas, "AgrupaLinhas", {"match_id", "Gm#", "Pts"}, {"AgrupaLinhas.match_id", "AgrupaLinhas.Gm#", "AgrupaLinhas.Pts"}),
    RemoveColMatchidGm = Table.SelectColumns(Expande,{"AgrupaLinhas.match_id", "AgrupaLinhas.Gm#", "AgrupaLinhas.Pts", "Check"})
in
    RemoveColMatchidGm


Perfeito, Bruno. Porém....

Qnd tento aplica-la na consulta da base não estou conseguindo sequer processar, trava tudo. Acredito que pelo tamanho da base.
Por CleuberZago 19 Mai 2020 às 22:17
Membro Novato
Mensagens: 88
Reputação: 1
#54969
osvaldomp escreveu:
CleuberZago escreveu:... preciso que a fórmula consiga ler distintamente ...
Eu sugiro uma solução via macro ou UDF. Retorne se houver interesse.

EDIT: Caso achem que seja melhor condicionar isso com medidas, também aceito sugestões rsrsrsrs.
O que exatamente você quer dizer com "condicionar isso com medidas" ?


Minha intenção é fazer um total de zero coisas no Excel, o que for preciso trabalhar no PBI...

Quando falo em "condicionar isso com medidas" é fazer esse sim/não ou 0/1 direto em uma medida do PBI, se for o caso. Não precisar inserir uma coluna no Power Query só pra fazer a validação disso.
Por babdallas 20 Mai 2020 às 07:36
Excel Expert
Mensagens: 2564
Reputação: 1128
#54975
OK, vou ver se consigo otimizar algo na linguagem M e também tentar fazer com DAX.
Por babdallas 20 Mai 2020 às 07:56
Excel Expert
Mensagens: 2564
Reputação: 1128
#54977
Veja se usando Table,Buffer melhora o desempenho.

Código: Selecionar todoslet
    Fonte = Excel.CurrentWorkbook(){[Name="Tabela1"]}[Content],
    TiposAlterados = Table.TransformColumnTypes(Fonte,{{"match_id", type text}, {"Gm#", Int64.Type}, {"Pts", type text}}),
    InsereColMatchidGm = Table.Buffer(Table.AddColumn(TiposAlterados, "match_id-Gm#", each Text.Combine({[match_id], Text.From([#"Gm#"], "pt-BR")}, "-"), type text)),
    AgrupaLinhas = Table.Buffer(Table.TransformColumnTypes(Table.Group(InsereColMatchidGm, {"match_id-Gm#"}, {{"Check", each List.Count(List.FindText(_[Pts],"40-40"))}}),{{"Check", type number}})),
    MesclaEtapas = Table.NestedJoin(AgrupaLinhas, {"match_id-Gm#"}, InsereColMatchidGm, {"match_id-Gm#"}, "AgrupaLinhas", JoinKind.LeftOuter),
    Expande = Table.ExpandTableColumn(MesclaEtapas, "AgrupaLinhas", {"match_id", "Gm#", "Pts"}, {"AgrupaLinhas.match_id", "AgrupaLinhas.Gm#", "AgrupaLinhas.Pts"}),
    RemoveColMatchidGm = Table.SelectColumns(Expande,{"AgrupaLinhas.match_id", "AgrupaLinhas.Gm#", "AgrupaLinhas.Pts", "Check"})
in
    RemoveColMatchidGm
Por CleuberZago 22 Mai 2020 às 11:50
Membro Novato
Mensagens: 88
Reputação: 1
#55085
Nada... Mesmo inserindo etapa a etapa não vai.

Nessa consulta em específico o csv possui mais de 600k registros, foras os outros relacionamentos. Também não acredito que seja por conta de desempenho da máquina, estou com um i7, SSD e 16GB de memória.

Talvez o caminho seja usar DAX mesmo.