使用扩展程序时如何从 Qlikview 获取数据?
How to get data from Qlikview when using extensions?
我有以下扩展,当数据存在于函数本身中时,它可以完美地工作。但是,每当我尝试使用循环从 Qlikview 获取数据时,它都会给我一个空白输出。谁能帮我解决这个问题?在下面的代码中,我注释掉了我在函数本身中提供数据的部分。请帮忙。
Qva.LoadScript("http://www.google.com/jsapi?callback=loadGoogleCoreChart", function () {
});
function loadGoogleCoreChart() {
google.load('visualization', '1', {
packages: ['corechart'],
callback: googleCoreChartLoaded
});
}
function googleCoreChartLoaded() {
Qva.AddExtension('QlikView/Examples/GooglePieChart', function () {
//Declaring a two dimensional array (an array of arrays)
var row = new Array(this.Data.Rows.length + 1);
for (var i = 0; i <= this.Data.Rows.length; i++) {
row[i] = new Array(2);
}
//Getting the data from QlikView-- this part is not working!
for (var j = 1; j <= this.Data.Rows.length; j++) {
row[j][0] = this.Data.Rows[j - 1][0].text;
var temp = this.Data.Rows[j - 1][1].text;
row[j][1] = Number(temp);
}
var data = google.visualization.arrayToDataTable(row);
alert("hello");
/*
var data = google.visualization.arrayToDataTable([
['Task', 'Hours per Day'],
['Work', 11],
['Eat', 2],
['Commute', 2],
['Watch TV', 2],
['Sleep', 7]
]);
*/
new google.visualization.PieChart(this.Element).draw(data, { chartArea: { left: 20, top: 20, width: "100%", height: "100%"} });
});
}
在 JavaScript、
中构建数组时
在填充值
之前没有必要定义/创建所有数组元素
另外,当以这种方式使用 for
循环时,对于第二个参数,
需要使用小于 (<
)
不小于或等于 (<=
)
否则,循环将在最后一个元素上失败,因为它们是从零开始的
如果你有一个包含 2 个元素的数组,它们的索引将为零和一个
例如-- arr[0]
-- arr[1]
所以当i
等于length
2时——arr[2]
将不存在
尝试像下面的代码片段...
Qva.AddExtension('QlikView/Examples/GooglePieChart', function () {
var row = [];
for (var i = 0; i < this.Data.Rows.length; i++) {
row.push([
this.Data.Rows[i][0].text,
parseFloat(this.Data.Rows[i][1].text)
]);
}
var data = google.visualization.arrayToDataTable(row, true);
new google.visualization.PieChart(this.Element).draw(data, { chartArea: { left: 20, top: 20, width: "100%", height: "100%"} });
});
注意:如果您的数组第一行没有列标题,需要添加 true
作为第二个参数 --> arrayToDataTable
我有以下扩展,当数据存在于函数本身中时,它可以完美地工作。但是,每当我尝试使用循环从 Qlikview 获取数据时,它都会给我一个空白输出。谁能帮我解决这个问题?在下面的代码中,我注释掉了我在函数本身中提供数据的部分。请帮忙。
Qva.LoadScript("http://www.google.com/jsapi?callback=loadGoogleCoreChart", function () {
});
function loadGoogleCoreChart() {
google.load('visualization', '1', {
packages: ['corechart'],
callback: googleCoreChartLoaded
});
}
function googleCoreChartLoaded() {
Qva.AddExtension('QlikView/Examples/GooglePieChart', function () {
//Declaring a two dimensional array (an array of arrays)
var row = new Array(this.Data.Rows.length + 1);
for (var i = 0; i <= this.Data.Rows.length; i++) {
row[i] = new Array(2);
}
//Getting the data from QlikView-- this part is not working!
for (var j = 1; j <= this.Data.Rows.length; j++) {
row[j][0] = this.Data.Rows[j - 1][0].text;
var temp = this.Data.Rows[j - 1][1].text;
row[j][1] = Number(temp);
}
var data = google.visualization.arrayToDataTable(row);
alert("hello");
/*
var data = google.visualization.arrayToDataTable([
['Task', 'Hours per Day'],
['Work', 11],
['Eat', 2],
['Commute', 2],
['Watch TV', 2],
['Sleep', 7]
]);
*/
new google.visualization.PieChart(this.Element).draw(data, { chartArea: { left: 20, top: 20, width: "100%", height: "100%"} });
});
}
在 JavaScript、
中构建数组时
在填充值
另外,当以这种方式使用 for
循环时,对于第二个参数,
需要使用小于 (<
)
不小于或等于 (<=
)
否则,循环将在最后一个元素上失败,因为它们是从零开始的
如果你有一个包含 2 个元素的数组,它们的索引将为零和一个
例如-- arr[0]
-- arr[1]
所以当i
等于length
2时——arr[2]
将不存在
尝试像下面的代码片段...
Qva.AddExtension('QlikView/Examples/GooglePieChart', function () {
var row = [];
for (var i = 0; i < this.Data.Rows.length; i++) {
row.push([
this.Data.Rows[i][0].text,
parseFloat(this.Data.Rows[i][1].text)
]);
}
var data = google.visualization.arrayToDataTable(row, true);
new google.visualization.PieChart(this.Element).draw(data, { chartArea: { left: 20, top: 20, width: "100%", height: "100%"} });
});
注意:如果您的数组第一行没有列标题,需要添加 true
作为第二个参数 --> arrayToDataTable