Hi Rory,
One way to do it (not particularly efficient)
distributeKey[key_][assoc_] :=
KeyValueMap[<|KeyTake[assoc, key], <|#1 -> #2|>|> &, KeyDrop[assoc, key]]
distributeKey["a"] /@ assoc // Flatten
(*
{<|"a" -> 5, "b" -> 7|>, <|"a" -> 5, "c" -> 9|>, <|"a" -> 5,
"d" -> 8|>, <|"a" -> 3, "b" -> 12|>, <|"a" -> 3,
"c" -> 14|>, <|"a" -> 3, "d" -> 17|>, <|"a" -> 8,
"b" -> 0|>, <|"a" -> 8, "c" -> 5|>, <|"a" -> 8, "d" -> 32|>}
*)
distributeKey["date"] /@ ds // Flatten
(*
{<|"date" -> "01/06", "a" -> 140.|>, <|"date" -> "01/06", "b" -> 868.|>,
<|"date" -> "01/06", "c" -> 450.|>, <|"date" -> "01/06", "d" -> 593.|>,
<|"date" -> "01/06", "e" -> 233.|>, <|"date" -> "01/06", "f" -> 457.|>,
<|"date" -> "01/06", "g" -> 105.|>, <|"date" -> "02/06", "a" -> 139.|>,
<|"date" -> "02/06", "b" -> 836.|>, <|"date" -> "02/06", "c" -> 477.|>,
<|"date" -> "02/06", "d" -> 528.|>, <|"date" -> "02/06", "e" -> 268.|>,
<|"date" -> "02/06", "f" -> 472.|>, <|"date" -> "02/06", "g" -> 119.|>,
<|"date" -> "03/06", "a" -> 117.|>, <|"date" -> "03/06", "b" -> 820.|>,
<|"date" -> "03/06", "c" -> 409.|>, <|"date" -> "03/06", "d" -> 563.|>,
<|"date" -> "03/06", "e" -> 298.|>, <|"date" -> "03/06", "f" -> 461.|>,
<|"date" -> "03/06", "g" -> 116.|>}
*)