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:
E vai gerar uma nova consulta com o resultado da execução, com os números sorteados:
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ó:
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:
Ele criou uma lista de 10 números, e vamos transformar essa lista em uma tabela, dessa forma:
Agora adicione uma coluna personalizada:
E basta você invocar a função, e depois clicar em OK:
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!
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
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”:
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