2017-04-21 104 views
1

我有以下扩展功能,当数据出现在函数本身内时,它可以很好地工作。但是,每当我尝试使用循环从Qlikview获取数据时,它都会给我一个空白输出。任何人都可以帮助我吗?在下面的代码中,我已经注释了在函数本身中给出数据的部分。请帮忙。如何在使用扩展时从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%"} }); 
}); 
} 

回答

1
在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

+0

非常感谢。这绝对有助于:) –

相关问题