Ir para conteúdo
  • 0

AGRUPAR PARA EXIBIR FAIXAS


wesleirocha84
Ir para solução Solucionado por Vitor Peralva ,

Pergunta

14 respostass a esta questão

Posts Recomendados

  • 0
  • Alunos
  • Solução

Boa Noite, @wesleirocha84!

 

Vou ver se consegui captar a sua regra de negócio e te auxiliar:

Regra de Negócio: Deve ser tratada em uma nova linha se:

a) O prefixo for diferente do da linha anterior;

b) Dentro do mesmo prefixo se a operadora for diferente da da linha anterior;

c) Dentro do mesmo prefixo e mesma operadora, se a faixa inicial não for sequência da faixa final da linha anterior.

 

Estabelecidas as premissas, vamos a sugestão de resolução:

1) Eliminei todas as etapas, deixando somente a etapa de fonte (Source). Sendo este o nosso ponto de partida:

image.png.3760f9d41904124906ea0914084ca588.png

 

2) Criei uma coluna de índice iniciando de 0. Renomeei, também, a etapa para Base:

image.thumb.png.4813968e44d2f12a40096b99aaa704a3.png

 

3) Criei uma coluna personalizada para aplicarmos a nossa regra, utilizando a seguinte fórmula:

= if [Índice] = 0 then [Índice]
else if 
Base[Prefixo]{[Índice]} <> Base[Prefixo]{[Índice] - 1} then [Índice]
else if
Base[Operadora]{[Índice]} <> Base[Operadora]{[Índice] - 1} 
then [Índice]
else if
Number.From(Base[Faixa Inicial]{[Índice]}) <> Number.From(Base[Faixa Final]{[Índice] - 1}) + 1
then [Índice]
else null

image.png.495182adc21bb7fec9f0e0fbe651a78f.png

 

Obs.: A imagem não apresenta toda a fórmula, a qual está em sua integridade logo acima.

 

Atente ao seguinte: Não temos linha anterior a primeira, por isto trazemos a coluna de índice como resultado, ela sempre vai originar a primeira linha.

Depois, vamos fazendo os teste lógicos.

Ele só avalia a condição abaixo, se a de cima for falsa.

Como resultado teremos:

image.png.165ab2159be6afe8bfe8a1ca6ff7b8e1.png

 

4) Realizei o preenchimento para baixo para que os nulls assumam o valor da primeira linha imediatamente acima que estiver preenchida.

image.png.f1f7b0e52c63430aa6f482b9381fba55.png

 

5) Realizei o agrupamento pela coluna Personalizar, Prefixo e Operadora, requisitando o Mínimo da Faixa Inicial e o Máximo da Faixa Final.

 

image.png.4136dd260efab241c9a4069a8bcdc307.png

 

image.png.fd95a4d6fe6c645c1b375d9c3a240007.png

 

6) Agora, basta eliminar a coluna de Personalizar e terá o resultado esperado:

image.png.66de98fe456963d8d791a499b24c5370.png

 

Acredito que com isto tenha sido resolvido o seu problema.

 

 

 

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

  • 0
  • Alunos

A tabela tem umas 200k de linha, agrupando conforme exemplo acima, consigo reduzir drasticamente. Quanto a coluna prefixo, trata-se de prefixos de ranges de telefones das operadoras. Na primeira linha por exemplo a range de 11 2207 0000 a 11 2207 2299 pertence a oi (exemplo pra fim didático), quando a faixa e inteira, de 0000 a 9999,não tenho problema, o problema é quando é "quebrada".

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

@Vitor Peralva valeu pela ajuda, só uma observação, funcionou em um modelo pequeno de dados, mas como minha base original tem 200k de linha, ficou tentando calcular por vários minutos e acabei desistindo, mas vou deixar o conceito aqui. Mais de 5 minutos tentando agrupar e nada, até exclui a etapa, olha em quanto já estava. Arquivo de 40MBimage.png.38c38a54530961756c0b319ba0a5df7e.png

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

@wesleirocha84, neste caso, você vai fazer um acréscimo ao seu código.

Na etapa em que adicionamos o índice e chamamos a consulta de Base, você vai envolver ela com um Table.Buffer.

Vai ficar mais ou menos assim:

Base = Table.Buffer(Table.AddIndexColumn(Source, "Índice", 0, 1, Int64.Type))

O Table.Buffer cria uma espécie de nó na consulta, assim, ao invés de ficar rodando todas as etapas anteriores novamente, ele passa a pegar os dados daquela etapa em diante.

O Table.Buffer vai ocupar uma parte de sua memória RAM, então, o seu uso deve ser feito com cuidado.

Testa com este adendo e informa se deu certo.

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