Ir para conteúdo
  • 0

Merge/Group Condicional


Cláudio Zadorosny Lopes Bastos

Pergunta

  • Alunos

Boa tarde.
Estou com a seguinte situação num merge
/group: 2 tabelas com várias colunas [vamos chamar de A, B e C], tendo como coluna comum para o merge a coluna A, com a regra: quando a coluna B tiver valores diferentes para o mesmo ID da coluna A, fazer a média da coluna C. Quando a coluna B tiver valores iguais para o mesmo ID da coluna A, fazer a soma da coluna C.

Alguém sabe como fazer isso
?
Obrigado

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
  • Alunos
46 minutos atrás, Cláudio Zadorosny Lopes Bastos disse:

Boa tarde.
Estou com a seguinte situação num merge
/group: 2 tabelas com várias colunas [vamos chamar de A, B e C], tendo como coluna comum para o merge a coluna A, com a regra: quando a coluna B tiver valores diferentes para o mesmo ID da coluna A, fazer a média da coluna C. Quando a coluna B tiver valores iguais para o mesmo ID da coluna A, fazer a soma da coluna C.

Alguém sabe como fazer isso?
Obrigado

Veja esse codigo:

 

let
    // Definição das tabelas de exemplo
    Table1 = Table.FromRecords({
        [A = 1, B = "x", C = 10],
        [A = 1, B = "y", C = 20],
        [A = 2, B = "x", C = 30],
        [A = 2, B = "y", C = 40],
        [A = 3, B = "x", C = 50]
    }),

    Table2 = Table.FromRecords({
        [A = 1, B = "x", C = 15],
        [A = 1, B = "z", C = 25],
        [A = 2, B = "x", C = 35],
        [A = 2, B = "z", C = 45],
        [A = 3, B = "x", C = 55]
    }),

    // Combinação das duas tabelas
    MergedTable = Table.Combine({Table1, Table2}),

    // Agrupamento por coluna 'A' e aplicação das regras
    GroupedTable = Table.Group(MergedTable, {"A"}, {
        {"Result", each 
            let
                GroupByB = Table.Group(_, {"B"}, {{"C_Sum", each List.Sum([C]), type number}}),
                C_Value = if Table.RowCount(GroupByB) > 1 
                          then List.Average(GroupByB[C_Sum])
                          else List.Sum(GroupByB[C_Sum])
            in
                [A = _[A]{0}, C = C_Value]
        }
    }),

    // Conversão da lista de registros em tabela
    ResultTable = Table.FromRecords(GroupedTable[Result])
in
    ResultTable

Considere que:
Para A = 1, temos diferentes valores de B (x, y, z), então calculamos a média de 😄 (10 + 20 + 15 + 25) / 4 = 17.5.
Para A = 2, temos diferentes valores de B (x, y, z), então calculamos a média de 😄 (30 + 40 + 35 + 45) / 4 = 37.5.
Para A = 3, temos o mesmo valor de B (x), então somamos 😄 50 + 55 = 105.

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

  • 0
  • Alunos
21 minutos atrás, Alex Pereira disse:

Veja esse codigo:

 

let
    // Definição das tabelas de exemplo
    Table1 = Table.FromRecords({
        [A = 1, B = "x", C = 10],
        [A = 1, B = "y", C = 20],
        [A = 2, B = "x", C = 30],
        [A = 2, B = "y", C = 40],
        [A = 3, B = "x", C = 50]
    }),

    Table2 = Table.FromRecords({
        [A = 1, B = "x", C = 15],
        [A = 1, B = "z", C = 25],
        [A = 2, B = "x", C = 35],
        [A = 2, B = "z", C = 45],
        [A = 3, B = "x", C = 55]
    }),

    // Combinação das duas tabelas
    MergedTable = Table.Combine({Table1, Table2}),

    // Agrupamento por coluna 'A' e aplicação das regras
    GroupedTable = Table.Group(MergedTable, {"A"}, {
        {"Result", each 
            let
                GroupByB = Table.Group(_, {"B"}, {{"C_Sum", each List.Sum([C]), type number}}),
                C_Value = if Table.RowCount(GroupByB) > 1 
                          then List.Average(GroupByB[C_Sum])
                          else List.Sum(GroupByB[C_Sum])
            in
                [A = _[A]{0}, C = C_Value]
        }
    }),

    // Conversão da lista de registros em tabela
    ResultTable = Table.FromRecords(GroupedTable[Result])
in
    ResultTable

Considere que:
Para A = 1, temos diferentes valores de B (x, y, z), então calculamos a média de 😄 (10 + 20 + 15 + 25) / 4 = 17.5.
Para A = 2, temos diferentes valores de B (x, y, z), então calculamos a média de 😄 (30 + 40 + 35 + 45) / 4 = 37.5.
Para A = 3, temos o mesmo valor de B (x), então somamos 😄 50 + 55 = 105.

As tabelas não são tão simples. Utilizo tabelas que vem de um servidor SQL

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