I'm personally doing Indexed Handout Tables. there's a  Video on YouTube  all about it, in summary;  you can create a Rollable Table by linking to the "URL"
!
/w gm [[1d20]]
! makes the Chat Console not display the line, this is also interrupting the URL function

 is the HTML Code for a Line Return
so the URL will read something like:
"<a href="https://www.roll20.net/" rel="nofollow">https://www.roll20.net/</a>!
/w gm [[1d20]]"
although the Line Return won't display, if you use the left & right Arrow Keys,
you will notice it is still actually there if you hit "Edit Link",
although I have not yet tried it without properly reformatting it, it should in theory work.
You can also do Nested Handouts by tagging them in certain fields, for example:
[Wizard Spells by Level] [Wizard Spells by Name] [All Spells by Level] [All Spells by Name] [Fire Bolt] [Light] [Mending] [Spare the Dying]
when you hit "Save", it will search for anything in the Journal with that name, so, for example,
if you have the handout for Fire Bolt, and you name a Handout Sorcerer Spells by Level
in the Sorcerer Spells by Level Handout, you'd write [Fire Bolt]
in the Fire Bolt Handout, you'd write [Sorcerer Spells by Level]
you just made a recursive Handout once you hit Save on them both!
Also, even if you change what the Link's Name reads, it will still link to that exact Handout,
you can change this by "Unlink"ing it, you can then link it again to another Handout or Character Sheet (yup! Characters too!)  one thing to note about Tables, they're kinda wonky, Column currently only tracks the first Column (Create Column Left/Right (of first Column) & Delete (first) Column), Row is kinda weird as well, and each cell also starts with an invisible character in it, and you'll be lucky to get anything below a Table because it tends to spawn at the bottom of the document with no way to get past it, so plan your designs with any Tables at the Bottom of the Page. Once you work through the limitations of it, the possibilities are quite astounding though, and it will load a handout in your game faster than it will the Roll20 Compendium, pluss you can do custom content, such as an Adamantine Plate-mail of Resist Frost, or an Expired Superior Healing Potion (could heal half of original, but inflict Poisoned Status for 1 Hour due to Food Poisoning)  Most Mobs you'll notice have Stats related to their "Level" and "Core Stats", for example, a Fire Snake has 4d10 Hit Dice, Con Mod of +1, but it's Sheet says 4d10+4, meaning it's a Lv4 with +1 Con Mod and 4d10 Hit Dice, identical to a player! some are oddball, such as the Bat (1d4-1), I'm assuming it's half of a 1d8 Level and it's Con Mod sure enough is -1 making it's health roll a ((1d8)/2)+((Con Mod)*(Level)), or, as I put it in my Macro:  !?{HD|Max,[[[[[[(@{selected|hd_d6|max})]]d[[((@{selected|hd_d6|max})*6)/(@{selected|hd_d6|max})]]cf<1cs>6]]+[[[[(@{selected|hd_d8|max})]]d[[((@{selected|hd_d8|max})*8)/(@{selected|hd_d8|max})]]cf<1cs>8]]+[[[[(@{selected|hd_d10|max})]]d[[((@{selected|hd_d10|max})*10)/(@{selected|hd_d10|max})]]cf<1cs>10]]+[[[[(@{selected|hd_d12|max})]]d[[((@{selected|hd_d12|max})*12)/(@{selected|hd_d12|max})]]cf<1cs>12]]]]|Half Max,[[[[[[(@{selected|hd_d6|max})]]d[[(((@{selected|hd_d6|max})*6)/(@{selected|hd_d6|max}))/2]]cf<1cs>3]]+[[[[(@{selected|hd_d8|max})]]d[[(((@{selected|hd_d8|max})*8)/(@{selected|hd_d8|max}))/2]]cf<1cs>4]]+[[[[(@{selected|hd_d10|max})]]d[[(((@{selected|hd_d10|max})*10)/(@{selected|hd_d10|max}))/2]]cf<1cs>5]]+[[[[(@{selected|hd_d12|max})]]d[[(((@{selected|hd_d12|max})*12)/(@{selected|hd_d12|max}))/2]]cf<1cs>6]]]]|Tally,[[[[[[(@{selected|hd_d6})]]d[[((@{selected|hd_d6})*6)/(@{selected|hd_d6})]]cf<1cs>6]]+[[[[(@{selected|hd_d8})]]d[[((@{selected|hd_d8})*8)/(@{selected|hd_d8})]]cf<1cs>8]]+[[[[(@{selected|hd_d10})]]d[[((@{selected|hd_d10})*10)/(@{selected|hd_d10})]]cf<1cs>10]]+[[[[(@{selected|hd_d12})]]d[[((@{selected|hd_d12})*12)/(@{selected|hd_d12})]]cf<1cs>12]]]]}
/w gm &{template:default} {{name=@{selected|token_name}'s Hit Dice Roll}} {{Roll 1=[[?{HD}+[[@{selected|level}*(@{selected|constitution_mod})]]]]}} {{Roll 2=[[?{HD}+[[@{selected|level}*(@{selected|constitution_mod})]]]]}} {{Roll 3=[[?{HD}+[[@{selected|level}*(@{selected|constitution_mod})]]]]}}
 It rolls 3 times so I can pick the most appropriate result, we wouldn't want "A Bat lands on you, surprisingly dead from no apparent cause" (it spawned with 0 max hp), knowing my players, they'd spend 20 minutes searching for the cause of death, especially if I tell them what the actual cause was, they love doing stunts like that lol