【问题标题】:How to get data from Qlikview when using extensions?使用扩展时如何从 Qlikview 获取数据?
【发布时间】:2017-04-21 10:59:19
【问题描述】:

我有以下扩展,当数据存在于函数本身时,它可以正常工作。但是,每当我尝试使用循环从 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 google-visualization qlikview


    【解决方案1】:

    在 JavaScript 中构建数组时,
    在填充值之前不需要定义/创建所有数组元素

    另外,当以这种方式使用for 循环时,对于第二个参数,
    需要使用小于(&lt;)
    不小于或等于 (&lt;=)

    否则,循环将在最后一个元素上失败,因为它们是从零开始的

    如果你有一个包含 2 个元素的数组,它们的索引将是 0 和 1
    例如-- arr[0] -- arr[1]

    所以当i 等于length 2 -- arr[2] 将不存在

    试试下面的 sn-p...

    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

    【讨论】:

    • 非常感谢。这绝对有帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多