Given a dataset as such

If "letter"
is the header that is chosen, how do I convert it into an indexed dataset / association-of-associations?
i.e. How do I define f
such that f[dataset_,columnHeader_]
produces the following?

Please note GroupBy
is close but fails as you are unable to use Part
to work with the result to extract column data. eg:
data = {<|"letter" -> "a", "foo" -> 1, "bar" -> 2|>, <|"letter" -> "b", "foo" -> 3, "bar" -> 4|>, <|"letter" -> "c", "foo" -> 5, "bar" -> 6|>}; dataDS = Dataset[data]; dataDSg= GroupBy[dataDS, Key["letter"]]; dataDSg[All, "foo"] (* <- produces an error *)
Where as data in the format of an association-of-association works fine
data2 = <|"a" -> <|"foo" -> 1, "bar" -> 2|>, "b" -> <|"foo" -> 3, "bar" -> 4|>, "c" -> <|"foo" -> 5, "bar" -> 6|>|>; data2DS = data2 // Dataset; data2DS [All, "foo"] (* <- returns a dataset with 1,3,5 *)