I think this needs a gentler introduction.  Treat Dats and Globals separately.  Do 1D dats, then nD ones.