saiku前端query.js

原创 2016年05月30日 10:49:43
/*  
 *   Copyright 2012 OSBI Ltd
 *
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */
 
/**
 * Workspace query
 */
var Query = Backbone.Model.extend({

    formatter: Settings.CELLSET_FORMATTER,
    properties: null,
    //初始化
    <span style="font-size:18px;color:#ff0000;">initialize:</span> function(args, options) {
        // Save cube
        _.extend(this, options);
        
        // Bind `this`运行查询,维度移动改变等查询方法
        _.bindAll(this, <span style="font-size:18px;">"<span style="color:#ff0000;">run</span>", "<span style="color:#ff0000;">move_dimension</span>", "<span style="color:#ff0000;">reflect_properties</span>"</span>);
        
       <span style="font-size:18px;"> <span style="color:#ff0000;">// Generate a unique query id 交互编号ID,查询ID
        this.uuid = 'xxxxxxxx-xxxx-xxxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,</span></span><span style="color:#ff0000;"> </span>
            function (c) {
                var r = Math.random() * 16 | 0,
                v = c == 'x' ? r : (r & 0x3 | 0x8);
                return v.toString(16);
            }).toUpperCase();
        
        <span style="font-size:18px;color:#ff0000;">// Initialize properties, action handler, and result handler查询参数设置和返回程序</span>
        this.action = new QueryAction({}, { query: this });
        this.result = new Result({ limit: Settings.RESULT_LIMIT }, { query: this });
        this.scenario = new QueryScenario({}, { query: this });
         
        this.set({type:'QM'});
    },
    
    parse: function(response) {
        // Assign id so Backbone knows to PUT instead of POST
        this.id = this.uuid;

        this.set({
            connection: response.cube.connectionName,
                catalog: response.cube.catalogName,
                schema: response.cube.schemaName,
                cube: encodeURIComponent(response.cube.name),
                axes: response.saikuAxes,
                type: response.type
        });

        if (typeof response.properties != "undefined" && "saiku.ui.formatter" in response.properties) {
            this.set({formatter : response.properties['saiku.ui.formatter']});
        }

        this.properties = new Properties(response.properties, { query: this });
        this.reflect_properties();
    },
    
    reflect_properties: function() {
        this.workspace.trigger('properties:loaded');
    },

    setProperty: function(key, value) {
        if (typeof this.properties != "undefined" && this.properties.properties ) {
            this.properties.properties[key] = value;
        }
    },
    <span style="font-size:18px;color:#ff0000;">//页面查询绿色箭头执行查询方法
    run: function(force, mdx)</span> {
        // Check for automatic execution
        Saiku.ui.unblock();
        if (typeof this.properties != "undefined" && this.properties.properties['saiku.olap.query.automatic_execution'] === 'false'&&
            ! (force === true)) {
            return;
        }
        this.workspace.unblock();

        $(this.workspace.el).find(".workspace_results_info").empty();
        this.workspace.trigger('query:run');
        this.result.result = null;
        // TODO - Validate query
        // maybe we should sync it with the backend query JSON?
        // this definitely needs improvement
        if (this.get('type') != "MDX") {
            var rows = $(this.workspace.el).find('.rows ul li').size();
            var columns = $(this.workspace.el).find('.columns ul li').size(); 
            if ((rows == 0 && columns == 0) && !this.workspace.other_dimension) {
                var axes = this.get('axes');
                if (axes) {
                    for (var axis_iter = 0; axis_iter < axes.length; axis_iter++) {
                        var axis = axes[axis_iter];
                        if (axis.name && axis.name == "ROWS") {
                            rows = axis.dimensionSelections.length;
                        }
                        if (axis.name && axis.name == "COLUMNS") {
                            columns = axis.dimensionSelections.length;
                        }
                    }
                }
            }
            if (rows == 0 || columns == 0) {
                $(this.workspace.table.el).html('');
                $(this.workspace.processing).html('<span class="i18n">You need to put at least one level or measure on Columns and Rows for a valid query.</span>').show();
                this.workspace.adjust();
                Saiku.i18n.translate();
                return;
            }
        }


        // Run it
        $(this.workspace.table.el)
            .html('');
        $(this.workspace.processing).html('<span class="processing_image">  </span> <span class="i18n">Running query...</span> [ <a class="cancel i18n" href="#cancel">Cancel</a> ]').show();
        this.workspace.adjust();
        this.workspace.trigger('query:fetch');
		Saiku.i18n.translate();
            // <a class="cancel" href="#cancel">x</a>
        
        var message = '<span class="processing_image">  </span> <span class="i18n">Running query...</span> [ <a class="cancel i18n" href="#cancel">Cancel</a> ]';
        this.workspace.block(message);

        
        if (this.get('type')  == "MDX" && mdx != null) {
            this.result.save({ mdx: mdx});
        } else {
            this.result.fetch();
        }
    },
    <span style="font-size:18px;color:#ff0000;">//页面维度发生变化时调用该方法查询
    move_dimension: function(dimension, target, index)</span> {
        $(this.workspace.el).find('.run').removeClass('disabled_toolbar');
        var url = "/axis/" + target + "/dimension/" + dimension;
        
        this.action.post(url, {
            data: {
                position: index
            },
            
            success: function() {
                if (('MODE' in Settings && (Settings.MODE == 'view' || Settings.MODE == 'table')) || (typeof this.query.properties != "undefined" && this.query.properties 
                    .properties['saiku.olap.query.automatic_execution'] === 'true')) {
                    this.query.run(true);
                }
            }
        });
    },
    
   <span style="color:#cc0000;"> </span><span style="font-size:18px;color:#ff0000;">url: function() {
        return encodeURI(Saiku.session.username + "/query/" + this.uuid);
    }</span>
});
URL:查询连接串示例:http://localhost:8080/saiku/rest/saiku/anonymousUser/query/4FF7D01E-8A6B-5EB4-991B-C0CE680A4BCA/result/flat

saiku前后端交互

通过query.js传一个交互ID到后端是,查询ID和cube的MDX到后端OlapQueryService.java执行查询。...
  • zhangzhongzhong
  • zhangzhongzhong
  • 2016年05月30日 09:51
  • 1611

saiku用户登陆模块源码分析

选择saiku的登陆模块做源码分析是因为登陆这个功能比较常见,思路也比较清晰,刚开始比较容易上手,saiku也只是使用一些新的技术或框架,总体上还是遵循登陆功能的一般套路:用户输入用户名与密码,提交到...
  • zstao168
  • zstao168
  • 2016年09月14日 18:11
  • 1861

saiku前端query.js

saiku前端query.js
  • zhangzhongzhong
  • zhangzhongzhong
  • 2016年05月30日 10:49
  • 1158

Saiku-ui代码结构分析

1、Saiku简介OLAP(On-Line Analytical Processing,联机分析处理)是一个使分析师、管理者和执行者从原始数据中用来快速、一致、交互 访问的一种软件技术,从而真实的反...
  • fanxue456
  • fanxue456
  • 2016年04月29日 15:13
  • 2617

数据仓库-多维分析展示平台Saiku

Saiku Saiku是一个轻量级的OLAP分析引擎,可以方便的扩展、嵌入和配置。Saiku通过REST API连接OLAP系统,利用其友好的界面为用户提供直观的分析数据的方式,它是基于jQue...
  • zoubf
  • zoubf
  • 2016年08月02日 16:46
  • 2173

Saiku初步学习

1. saiku启动乱码的问题 编辑saiku.bat,把UTF-8 改成GBK 即可。 2. saiku启动警告docbase找不到的问题 找到文件tomcat\webapps\pen...
  • liuxiang860927
  • liuxiang860927
  • 2017年03月21日 16:38
  • 700

Saiku初解

Saiku是一个轻量级的OLAP分析引擎,可以方便的扩展、嵌入和配置。Saiku通过REST API连接OLAP系统,利用其友好的界面为用户提供直观的分析数据的方式,它是基于jQuery做的前端界面。...
  • hou28364
  • hou28364
  • 2016年05月18日 17:21
  • 1340

saiku与kylin整合备忘录

为什么要整合? Kylin是通过离线预计算将Hive中事实表的各组合维度的值存储在Hbase中,在前端可实时展现。但是kylin的多维查询需要写SQL,对于不会写SQL的数据分析人员或者业务人员来说...
  • FreeFishLy
  • FreeFishLy
  • 2016年06月25日 17:38
  • 1797

Saiku前端自动查询设置

1、Setting.js中有个配置项:'saiku.olap.query.automatic_execution': 'true', 设置值为false,在设计界面即可不自动查询 ...
  • gsying1474
  • gsying1474
  • 2014年11月15日 11:22
  • 1643

kylin + Calcite + Saiku

由eBay开源的一个大数据OLAP框架,2014年11月加入了Apache,项目名字也改成了“Apache Kylin”,Apache Kylin是唯一来自中国的Apache顶级开源项目,定位于在Ha...
  • ronmy
  • ronmy
  • 2017年05月22日 17:23
  • 2023
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:saiku前端query.js
举报原因:
原因补充:

(最多只允许输入30个字)