There is multiple ways to do this, here is one way.
// your associative array
$data = array(
array("KPIName"=>"AEAD10D-LRZ", "Year"=>2014, "Month"=>7, "Day"=>30, "KPICount"=>29),
array("KPIName"=>"AEAD10D-LRZ", "Year"=>2014, "Month"=>7, "Day"=>31, "KPICount"=>40),
array("KPIName"=>"AEAD10D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>1, "KPICount"=>49),
array("KPIName"=>"AEAD10D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>2, "KPICount"=>34),
array("KPIName"=>"AEAD10D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>3, "KPICount"=>32),
array("KPIName"=>"AEAD10D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>4, "KPICount"=>30),
array("KPIName"=>"AEAD10D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>5, "KPICount"=>30),
array("KPIName"=>"AEAD20D-LRZ", "Year"=>2014, "Month"=>7, "Day"=>30, "KPICount"=>25),
array("KPIName"=>"AEAD20D-LRZ", "Year"=>2014, "Month"=>7, "Day"=>31, "KPICount"=>31),
array("KPIName"=>"AEAD20D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>1, "KPICount"=>47),
array("KPIName"=>"AEAD20D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>2, "KPICount"=>17),
array("KPIName"=>"AEAD20D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>3, "KPICount"=>12),
array("KPIName"=>"AEAD20D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>4, "KPICount"=>37),
array("KPIName"=>"AEAD20D-LRZ", "Year"=>2014, "Month"=>8, "Day"=>5, "KPICount"=>30),
);
// array to hold reordered array
$newdata = array();
// reorder your array to $newdata, grouped by KPIName with the data as the key
foreach($data as $row){
$newdata[$row["KPIName"]][$row["Year"]."-".$row["Month"]."-".$row["Day"]]=$row["KPICount"];
}
// get the date keys to use as headers
$headers = array_keys(reset($newdata));
// build the table
echo "<table><tr>";
echo "<td>KPIName</td>";
// loop through the date headers
foreach($headers as $header){
echo "<td>{$header}</td>";
}
echo "</tr>";
// loop through each KPIName row
foreach($newdata as $key=>$row){
echo "<tr>";
echo "<td>{$key}</td>";
// loop through each date value
foreach($row as $data){
echo "<td>{$data}</td>";
}
echo "</tr>";
}
echo "</table>";