This should do it:

Relevant code from controller:
var used = [];
$scope.grandTotal = 0;
angular.forEach($scope.myData,function(row,idx){
row.getTotal = function(){
if (used.indexOf(idx) == -1) {
$scope.grandTotal += this.x + this.y;
used.push(idx);
}
return this.x + this.y ;
};
});
Your updated Plunker is here, http://plnkr.co/edit/1FHgSViYgpfXgQEPfXr5?p=preview.
Update (based on response/plunker-link/comment below)
New screen layout:

Relevant code from controller:
var used = [];
$scope.grandTotal = 0;
angular.forEach($scope.myData, function(row, idx) {
row.getTotal = function() {
var value;
if (this.xBox) {
value = this.x + this.z;
} else if (this.yBox) {
value = this.y + this.z;
}
if (used.indexOf(idx) == -1) {
$scope.grandTotal += value;
used.push(idx);
}
return value;
};
});
$scope.updateXRowClear = function(row) {
row.entity.yBox = false;
/* Need to check the ybox cell when unchecked */
if (row.entity.xBox === false) {
row.entity.yBox = true;
$scope.grandTotal += row.entity.y - row.entity.x;
} else {
$scope.grandTotal += row.entity.x - row.entity.y;
}
};
$scope.updateYRowClear = function(row) {
row.entity.xBox = false;
/* Need to check the xbox cell when unchecked */
if (row.entity.yBox === false) {
row.entity.xBox = true;
$scope.grandTotal += row.entity.x - row.entity.y;
} else {
$scope.grandTotal += row.entity.y - row.entity.x;
}
};
New updated Plunker, https://plnkr.co/edit/ixdN0J2oVvOlbbziJMCY?p=preview.
Updated Again (based on comments below)
New screen layout:

Relevant code from controller:
var used = [];
$scope.grandTotal = 0;
angular.forEach($scope.myData, function(row, idx) {
row.getTotal = function() {
var value;
if (this.xBox) {
value = this.x * this.qty;
} else if (this.yBox) {
value = this.y * this.qty;
} else if (this.zBox) {
value = this.z * this.qty;
}
if (used.indexOf(idx) == -1) {
$scope.grandTotal += value;
used.push(idx);
}
return value;
};
$scope.$watch(
function($scope) {
return row.getTotal();
},
function(newValue, oldValue) {
$scope.grandTotal += (newValue ? newValue : 0) - (oldValue ? oldValue : 0);
}
);
});
$scope.updateXRowClear = function(row) {
row.entity.yBox = false;
row.entity.zBox = false;
/* Need to check the ybox cell when unchecked */
if (row.entity.xBox === false) {
row.entity.yBox = true;
}
if (row.entity.yBox === false) {
row.entity.xBox = true;
}
};
$scope.updateYRowClear = function(row) {
row.entity.xBox = false;
row.entity.zBox = false;
/* Need to check the xbox cell when unchecked */
if (row.entity.yBox === false) {
row.entity.xBox = true;
} else if (row.entity.xBox === false) {
row.entity.yBox = true;
}
};
$scope.updateZRowClear = function(row) {
row.entity.xBox = false;
row.entity.yBox = false;
/* Need to check the zbox cell when unchecked */
if (row.entity.zBox === false) {
row.entity.xBox = true;
} else if (row.entity.xBox === false) {
row.entity.zBox = true;
} else if (row.entity.yBox === false) {
row.entity.yBox = true;
}
};
And the all important working Plunker, https://plnkr.co/edit/1rRRWEIyQhKVkYRdtIFu?p=preview.
Let me know if you have any other questions, happy to help!