When the array being passed to cfdm.Data.__init__ is not a Dask array and is in memory, why don't we grab the first (, second) and last values for the cache, as it's much quicker to do it at this time than hauling them out of the instantiated Dask array at a later stage.
PR to follow.