我目前正在嘗試使用Google表來根據從我的MYSQL數據庫中提取的信息生成報告。MD數組:如果未找到值,添加額外的數組
的問題是有5個值:['Call Disposition', 'Answered', 'Busy', 'No Answer','Failed']
但問題是從數據庫被拉扯的數據是相當多的事情有3個出了4個值將定義我的谷歌圖表標題中,原因是,如果「失敗」被發現,只有一個值有它,我得到以下錯誤,從谷歌圖表:Uncaught Error: Row 0 has 4 columns, but must have 5
只是爲了在DB一些清晰度,值被自動插入基礎上發生了什麼的呼叫,而不是所有的呼叫都會失敗。
只有少數實例的值會失敗,所以我試圖開發一種方法,如果找不到某個特定的數字,則添加額外的數組。
例如,這是它看起來多麼目前基於什麼我拉出DB和推到MD陣列:
[ [ 'ANSWERED', '477', 728 ],
[ 'BUSY', '477', 48 ],
[ 'NO ANSWER', '477', 277 ],
[ 'ANSWERED', '488', 953 ],
[ 'BUSY', '488', 9 ],
[ 'FAILED', '488', 1 ],
[ 'NO ANSWER', '488', 126 ] ]
所以,如果說有一個號碼的排列不具有失敗配置添加,但其值設置爲0,因此未找到每個號碼每次都一樣:
[ [ 'ANSWERED', '477', 728 ],
[ 'BUSY', '477', 48 ],
[ 'FAILED', '477', 0 ],
[ 'NO ANSWER', '477', 277 ],
[ 'ANSWERED', '488', 953 ],
[ 'BUSY', '488', 9 ],
[ 'FAILED', '488', 1 ],
[ 'NO ANSWER', '488', 126 ] ]
我現在的代碼如下:
function SQLReportAgentCalls() {
valueArr = [];
connection2.query({
sql : 'select disposition, src, COUNT(*) from cdr WHERE src="477" or src="488" GROUP BY src, disposition',
timeout : 40000
}, function (error, results, rows, fields) {
console.log("-----------REPORTS------------------------");
for(i in results){
var dipo = results[i]['disposition'];
var src = results[i]['src'];
var count = results[i]['COUNT(*)'];
if(dipo === "FAILED" && count){
var chanar = new Array(dipo,src,count);
valueArr.push(chanar);
}
else if(src && count === null && dipo !== "FAILED"){
var chanar = new Array("FAILED",src,0);
valueArr.push(chanar);
}
else{
var chanar = new Array(dipo,src,count);
valueArr.push(chanar);
}
}
console.log(valueArr);
console.log("---------------------------------------------------");
SQLReport();
});
}
客戶端代碼生成報告:
//This generates the report(Google Chart) based on the information that has been pulled from the CDR table server side.
socket.on("SQL", function (valueArr) {
google.charts.load('current', {
packages : ['corechart']
});
google.charts.setOnLoadCallback(drawMaterial);
var data = valueArr;
function x(data) {
var r = [],
temp;
valueArr.forEach(function (a, i) {
if (!(i % 3)) {
temp = [a[1]];
r.push(temp);
}
temp.push(a[2]);
});
return r;
}
function drawMaterial() {
result = [['Call Disposition', 'Answered', 'Busy', 'No Answer', 'Failed']].concat(x(valueArr));
console.log(result);
var options = {
title : 'Call Disposition',
hAxis : {
title : 'Agents',
minValue : 0,
},
vAxis : {
title : 'Disposition Number'
},
isStacked : true
};
var chartdata = new google.visualization.arrayToDataTable(result);
var material = new google.visualization.ColumnChart(document.getElementById('chart'));
material.draw(chartdata, options);
}
});
這可能嗎?我不確定Google Charts是否提供了在不存在的情況下自動添加值的選項,因此這似乎是我能想到解決問題的唯一方法。
爲了獲得更好的性能,變更src =「477」或src =「488」to:src in(「477」,「488」) – sagi
@sagi謝謝你的提示我會這樣做。 – Studento919