Great script.
If I may make a suggestion, you can get all the data with one call to Get-Stat, just add all the metrics as an array to the -Stat parameter.
You can then extract the required data with a Where-Object cmdlet.
I'm pretty sure it will make the script a bit faster.
And you populate the $row properties directly, no need to store the data first in a separate variable.
Example
...
$metrics = "cpu.usage.average","cpu.usagemhz.average"
$stats = Get-Stat -Stat $metrics -Start $DateStart -Finish $DateFinish
...
$row.CPUUsageAvg_Avg = [Math]::Round(($stats | where {$_.MetricId -eq "cpu.usage.average"} | Measure-Object -Property Value -Average).Average,1)
$row.CPUUsageAvg_Max = [Math]::Round(($stats | where {$_.MetricId -eq "cpu.usage.average"} | Measure-Object -Property Value -Maximum).Maximum),1)
...
____________
Blog: LucD notes
Twitter: lucd22