Joviano

Bem vindo ao

Blog do Jovi!

O blog do Jovi tem como objetivo ajudar você com suas dúvidas, além de expandir seu conhecimento através da informação.

Sorteador de Números para Mega-Sena com Power Query

Olá, FERA! Hoje vamos mergulhar no mundo do Power Query para criar algo super legal: um sorteador de números para a Mega Sena. Mas calma, não é só um gerador qualquer.

Vamos criar um que não repete números, porque ninguém quer jogar na loteria com números duplicados, né?
Vamos lá!

Entendendo o Problema

Quando você aposta na Mega Sena (ou qualquer loteria), está basicamente mergulhando em um mar de possibilidades numéricas.

O problema é que, neste mar, queremos pescar números sem pegar o mesmo peixe duas vezes.

Nosso desafio é criar um sorteador que funcione como uma rede de pesca inteligente, capturando apenas peixes de espécies diferentes em cada “jogada”.

O Poder do Power Query

Assim como eu, talvez um dia você usou o ALEATÓRIOENTRE do Excel, mas ela é tão aleatória, que não permite que você diga para que não repita numeros enquanto todos não tenham sido sorteados.
Saca?
Ela vai repetir o mesmo número várias vezes, o que não é o comportamento que desejamos nessa missão.

Ai que entra o Power Query. que está ai dentro do seu Excel, e é como um canivete suíço para dados.
Ele te ajuda a transformar e moldar dados de maneiras incríveis.
E hoje, vamos usar essa ferramenta para criar nosso sorteador.

Vou te mostrar no passo a passo como você vai fazer isso.

PASSO 1 – Criando a Função

Vamos começar com o esqueleto da nossa função.
Para isso crie uma consulta em branco no seu editor Power Query.

Dê a ela o nome de fxMega e comece com esse comando:

// consulta fxMega
(
    // argumentos
    numero_inicial as number,
    numero_final as number,
    quantidade_selecionar as number,
    
    // lista que carrega após primeira iteração (loop) [objeto temporário | de controle]
    optional lista_selecionada as list
)=>
let
    // Continua...

Aqui, definimos os parâmetros da função que vamos criar, os quais poderemos usar em qualquer loteria.
Quando invocarmos a função, vamos informar esses caras, e tudo será calculado com base neles.

Ah, desconsidere o comentário // Continua… que vou utilizar aqui só pra ir “fatiando o comando” e te explicando por partes.

PASSO 2 – Inicializando a LISTA de números

Imagine que o Power Query vai reexecutar o comando várias vezes, até que a lista de números selecionados tenha a quantidade de números desejados (exemplo: 6 na Mega-Sena).

Então, temos que ter uma variável que vai receber e armazenar esses números.

Essa variável está inicializada com o nome de lista_selecionada e precisamos fazer um pequeno ajuste para inicializar a função corretamente:

// comando explicado no PASSO 1

    minha_lista = 
        if lista_selecionada = null 
        then {}
        else lista_selecionada,
        
// Continua...

Quando iniciar a função pela primeira vez, a variável lista_selecionada estará com valor null, e queremos converter isso para uma lista vazia, e fazemos isso usando o {}

No final do artigo, tem uma dica bônus, para quem tem seus números da sorte.
E esse bônus só é possível, por causa dessa etapa.

Mas, continuando…

PASSO 3 – Gerando Números Aleatórios

Agora, vamos adicionar a mágica dos números aleatórios:

// comando explicado até o PASSO 2

    numero_aleatorio = Number.Round(Number.RandomBetween(numero_inicial, numero_final)),

    // Continua...

Nessa etapa ele vai gerar um número aleatório entre o valor de numero_inicial e numero_final que você informar.

Mas precisamos ficar ligados, pois ele vai gerar números com várias casas decimais, e para manter somente o número inteiro, vamos usar o Number.Round (arredondamento).

PASSO 4 – Evitando Repetições

Agora, a parte crucial: evitar números repetidos.
É como evitar encontrar sua(seu) ex em uma festa (hehehe).

// comando explicado até o PASSO 3

    lista_nova = 
        if not List.Contains(minha_lista, numero_aleatorio) 
        then minha_lista & {numero_aleatorio} 
        else minha_lista,
        
// Continua...

Se o número não estiver na lista, adicionamos ele. Se já estiver, ignoramos.

Veja que usamos aqui o elemento not que talvez você nunca o tenha utilizado, mas aqui de maneira inteligente, ele usa como inversão da avaliação, ou seja, se o número estiver na lista, a resposta da função vai ser true mas você quer o contrário.

Sim, eu sei que poderia ter invertido o then e else mas eu aproveitei aqui para te ensinar algo que pode ser novo para você.

PASSO 5 – Loop Inteligente

Nosso programa vai verificar quantos números estão na lista_nova e se for menor que quantidade_selecionar, ele vai reexecutar para gerar mais um número, e assim sucessivamente.

// comando explicado até o PASSO 4

    itens_jah_selecionados = List.Count(lista_nova),

    numeros = 
        if itens_jah_selecionados < quantidade_selecionar 
        then @fxMega(numero_inicial, numero_final, quantidade_selecionar, lista_nova)
        else lista_nova  
in
    numeros

Veja que surgiu ai na última etapa um @ seguido de uma sequencia de nomes das variáveis que usamos anteriormente no código, não é mesmo?

Pois bem, estamos nessa etapa dizendo para o programa voltar ao inicio do comando , e realimentar os parâmetros da função, com os valores calculados até então.

Veja que as variáveis estão na mesma posição (ordem) que os argumentos estão dispostos no PASSO 1, e isso é de suma importância.

O comando todo fica assim:

(
    numero_inicial as number,
    numero_final as number,
    quantidade_selecionar as number,
    optional lista_selecionada as list
)=>

let
    minha_lista = 
        if lista_selecionada = null 
        then {}
        else lista_selecionada,

    numero_aleatorio = Number.Round(Number.RandomBetween(numero_inicial, numero_final)),

    lista_nova = 
        if not List.Contains(minha_lista, numero_aleatorio) 
        then minha_lista & {numero_aleatorio} 
        else minha_lista,

    itens_jah_selecionados = List.Count(lista_nova),

    numeros = 
        if itens_jah_selecionados < quantidade_selecionar 
        then @fxMega(numero_inicial, numero_final, quantidade_selecionar, lista_nova)
        else lista_nova  
in
    numeros

DICA BÔNUS: Números da Sorte

Vamos supor que o dia de aniversário seu, do seu(sua) cônjuge e filho(a) são “5, 8, 25”.

Com isso, você não abre mão desses 3 números, mas, quer que o programa funcione, mas, que esses estejam em todas as jogadas.

Entendeu?

Ai é simples, basta você invocar a consulta normalmente:

Invocando função personalizada Power Query

E vai gerar uma nova consulta com o resultado da execução, com os números sorteados:

Retorno de uma função personalizada no Power Query

Repare que o último argumento está com null, pois inicializamos como um jogo sem “numeros já selecionados”.

Agora é só informar ali, a lista de números da sorte, e veja só:

Incluindo lista nos argumentos de função personalizada no Power Query

Animal né?
E tem mais!

BÔNUS 2: Gerando várias cartelas

Se você é como eu, que não joga, mas quando joga já faz logo umas 10 “fézinha”, então, se liga na dica.

Crie uma nova consulta em branco (consulta nula), e escreva isso aqui na barra de fórmulas:

Criando uma lista de números no Power Query

Ele criou uma lista de 10 números, e vamos transformar essa lista em uma tabela, dessa forma:

Transformando lista em tabela no Power Query

Agora adicione uma coluna personalizada:

Adicionando coluna personalizada no Power Query

E basta você invocar a função, e depois clicar em OK:

invocando função na coluna personalizada no Power Query

Eu sei que você é um DEDO NERVOSO e já está quase clicando na expansão de valores, como menu a seguir.
Mas NÃO CLIQUE, segure a ansiedade!

Expandindo valores de lista no Power Query

Se você clicar, ele vai executar a lista uma única vez, e você vai ficar mais tonto que uma barata após levar uma chinelada

Numeros Aleatórios repetem no Power Query

Mas você pode optar por fazer um pequeno ajuste na chamada da função, e já carregar os valores certinhos.
Faça esse ajuste aqui:

// ao invés de disso 

    fxMega(1,60,6)

// use isso

    Text.Combine(
        List.Transform(
            fxMega(1,60,6)
            , each Text.From(_)
        )
        ,","
    )

Fazendo a leitura de dentro para fora, primeiramente o List.Transform faz a conversão de CADA ÍTEM DA LISTA de formato número para texto.

E por fim, o Text.Combine faz a união de todos os itens da lista, incluindo um separador, que nesse caso escolhemos a vírgula.

E pronto, “acabou a tontura”:

Sorteio de números aleatórios no Power Query

Quer saber mais sobre Loops no Power Query?

No meu canal do Youtube eu preparei uma Playlist ensinando outros lugares onde usamos LOOP no Power Query.

Destaco aqui a aula que falamos sobre WebScraping, onde usamos o LOOP para descobrir qual a última página de um site, e podermos pegar os dados.

CLIQUE AQUI e assista a playlist.
CLIQUE AQUI e veja o artigo sobre webscraping

Conclusão

E aí, FERA, viu só o que você é capaz de fazer com o Power Query?

Mais do que um simples sorteador para a Mega-Sena, você abriu foi apresentados a conceitos da Linguagem M, que mostram que a ferramenta vai muito além daquele “clica e arrasta”.

Visite outros posts do blog, e claro minhas redes sociais (link no rodapé dessa página).

Ah, aproveito e te convido a conhecer a FORMAÇÃO POWER QUERY 2.0, que é muito mais “que só” Power Query.
Você vai virar um mestre no manuseio de dados com Excel, Power BI, SQL e Python!

Por hoje é isso,
Forte abraço do

4 Comentários

  • A experiência com este sorteio me inspirou a desenvolver um método para realizar sorteios na área de Auditoria de Dados.
    Em outras palavras, tenho conjuntos de dados em uma planilha que preciso auditar, e é crucial manter imparcialidade ao selecionar as linhas para auditoria.
    Elaborei uma coluna de índices na qual defini o menor e o maior índice, assim como a quantidade de linhas a serem sorteadas.
    Como resultado, obtenho uma lista das linhas selecionadas pelo sorteio.

    Resposta
    • Fantástico JAIR,
      Não deixe de olhar no módulo “POWER QUERY AVANÇADO” as demais aulas de LOOP ein.
      Tem mais algumas informações importantes lá.
      Parabéns pelo trabalho!

      Resposta

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Receba conteúdos do Jovi!

Digite seu interesse abaixo:

Quer Aprender sobre Power Query?

Conheça nossa formação e tudo que você pode aprender com ela.

Mais conteúdos gratuitos para você!

OPA, vejo que você é novo por aqui!

Temos um presente de boas vindas para os amantes de Blog!

E ai FERA?!

Não vou atrapalhar tua leitura deste super artigo.

Só quero te dizer que por ser um visitante novo aqui no site, nosso sistema está programado para te enviar um cupom de desconto para a FORMAÇÃO POWER QUERY 2.0, que é um pacotão de cursos do JOVI, com mais de 300 horas de conteúdo.

Informe seus dados a seguir, que te enviaremos as instruções para resgate desse cupom exclusivo.

Exemplo 👉 +5511988776655 👈 [não informar pontos, traços e parênteses]

explicação telefone

Números do Brasil devem iniciar com +55
Preencha conforme o exemplo, pois o presente será enviado por WhatsApp para esse número. 

Após enviar, pode fechar essa janela, que seu presente já está em processamento.