Power Query: Revision Time – Part 6
15 May 2024
Welcome to our Power Query blog. Today, I continue to create a refreshable revision timetable by randomising the subject slots I need for the timetable.
As my salespeople take a well-earned break, many students here in the UK are preparing for exams in the summer. To help my own offspring get organised, I volunteered to create a refreshable printable revision timetable. This is the result:
![](http://sumproduct-4634.kxcdn.com/img/containers/main/./image1-1715274309.png/9fa4928e14c7422c8be9c83417b61922.jpg)
I needed a list of topics, and to begin with, I created extra entries for topics that required more timeslots:
![](http://sumproduct-4634.kxcdn.com/img/containers/main/./image2-1715274356.png/2734faf8bb0c4e8f3c8cb772fe0d7ba3.jpg)
We agreed on half-hourly slots, and I created a grid so that my daughter could indicate the slots that she wouldn’t be able to revise.
![](http://sumproduct-4634.kxcdn.com/img/containers/main/./image3-1715274377.png/bbef9530a5dd6e6f91072736ed0f9cc7.jpg)
When I first designed the solution, I included some Excel functions, but since this is a Power Query blog, I will ensure that I only use Power Query functions (apart from some formatting at the end!).
In Part 1, I converted my data into two [2] Tables: Subjects and Availability. I extracted Subjects to Power Query.
![](http://sumproduct-4634.kxcdn.com/img/containers/main/./image4-1715274404.png/413d7ef9314ea3ca270945c0b5f5b027.jpg)
I created the Availability query by taking a copy of Subjects, and amending it:
![](http://sumproduct-4634.kxcdn.com/img/containers/main/./image5-1715274421.png/c10f40de073ab43a9f508ece457af593.jpg)
In Part 2, and Part 3, I calculated the number of subjects and the number of slots on Availability.
This gave me both totals:
![](http://sumproduct-4634.kxcdn.com/img/containers/main/./image6-1715274443.png/2cfbc9eb1a21686e35d2beb4789969e5.jpg)
In Part 4, I calculated how many times each subject will appear in a new query, remembering to round up to whole slots.
This told me the number of slots that each subject should have for my example is three [3]:
![](http://sumproduct-4634.kxcdn.com/img/containers/main/./image7-1715274461.png/d917c7c59d5b66cf2219a2c9f1650088.jpg)
Last time, I created a table where each subject appeared three times (i.e. the number of times given by Subject_Slots).
![](http://sumproduct-4634.kxcdn.com/img/containers/main/./image8-1715274478.png/2a017b84b1e503112bcfaf1e5561eae2.jpg)
I now have a list of slots to insert in the timetable. I need a unique identifier for each slot, but I need them to be in a random order. I add a new custom column from the ‘Add Column’ tab:
![](http://sumproduct-4634.kxcdn.com/img/containers/main/./image9-1715274540.png/2e225a79dc50e78d86bc13073e1501a6.jpg)
I have used the M code:
= Number.RandomBetween(1,Slot_Total)
Which gives me a number in the range one [1] to Slot_Total. I could have used any number as the top limit, but to avoid more hard-coding, Slot_Total is a suitable number here.
Now I have some random numbers, I am going to sort the data in ascending order.
![](http://sumproduct-4634.kxcdn.com/img/containers/main/./image10-1715274610.png/20056c71186c3ce5d0403a3e6ff3fa38.jpg)
The data type of this column is not important as I will be deleting it shortly. Having ordered my data, I create an Index column beginning at one [1] from the ‘Add Column’ tab:
![](http://sumproduct-4634.kxcdn.com/img/containers/main/./image11-1715274639.png/eb5b1986109955fbf375a108542906be.jpg)
Now I have my data in a random order, I delete Slot Number.
![](http://sumproduct-4634.kxcdn.com/img/containers/main/./image12-1715274671.png/a8ca9f195c1932f5ffa66e4f4ab0c151.jpg)
Next time, I will prepare the data from the Availability so that I can add in the slot data.
Come back next time for more ways to use Power Query!