Página 1 de 1

Coluna condicional

Enviado: 18 Mai 2020 às 23:26
por CleuberZago
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.

Re: Coluna condicional

Enviado: 19 Mai 2020 às 09:24
por osvaldomp
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" ?

Re: Coluna condicional

Enviado: 19 Mai 2020 às 09:50
por babdallas
Código: Selecionar todos
let
    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

Re: Coluna condicional

Enviado: 19 Mai 2020 às 22:12
por CleuberZago
babdallas escreveu:
Código: Selecionar todos
let
    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.

Re: Coluna condicional

Enviado: 19 Mai 2020 às 22:17
por CleuberZago
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.

Re: Coluna condicional

Enviado: 20 Mai 2020 às 07:36
por babdallas
OK, vou ver se consigo otimizar algo na linguagem M e também tentar fazer com DAX.

Re: Coluna condicional

Enviado: 20 Mai 2020 às 07:56
por babdallas
Veja se usando Table,Buffer melhora o desempenho.
Código: Selecionar todos
let
    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

Coluna condicional

Enviado: 22 Mai 2020 às 11:50
por CleuberZago
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.