一、透视分析宏界面

1、操作入口

透视分析宏入口:设置面板->交互->宏管理->设置

image2023-8-1_17-22-20.png

2、透视分析宏模块

3、宏代码编辑区

二、透视分析宏演示

1、需求场景

在透视分析上,为了避免用户查询数据量过大,通过使用开始时间和结束时间来限制用户的数据查询,但是当选择的时间范围较大的时候同样也会出现查询数据量过大的问题,为避免数据库的查询压力过大,所以查询的时间段不允许大于一年以上。

2、JS内置日期对象补充

在Smartbi中日期筛选器获取到的筛选器值是字符串类型的数据,如"2020-01-01",而要进行日期计算时,字符串往往无法实现这一个功能,如下图,对两个字符串的日期相减时得到的结果的NaN,这是因为JS本身不支持这一种用法。那需要进行日期的计算时,往往就需要使用JS内置的Date日期对象来实现。

2、代码示例

类型对象事件
ClientSide(客户端宏)ad_hoc_analysisonBeforeRefresh(每次刷新前)
function main(adHocAnalysis: IAdHocAnalysis) {
    // 获取筛选器面板
    let filterPanel: IFilterPanel = adHocAnalysis.getFilterPanel();
    let beginTime:IFilter = filterPanel.getFilterByAlias("开始时间");
    let overTime: IFilter = filterPanel.getFilterByAlias("结束时间");
    // 判空,保证两个筛选器都存在
    if (!beginTime || !overTime) {
        return
    }
​
    overTime.setValueChangeHandler((newValue) => {
        if (isExceedsOneYear(beginTime.getValue()[0],newValue[0])) {
            return newValue;
        } else { 
            alert("日期区间不能选择超过一年以上")
            return beginTime.getValue();
        }
​
    })
​
    beginTime.setValueChangeHandler((newValue) => {
        // 给结束时间设置值设为开始时间
        if (isExceedsOneYear(newValue[0], overTime.getValue()[0])) {
            return newValue;
        } else {
            alert("日期区间不能选择超过一年以上")
            overTime.setValue(newValue);
            return newValue;
        }
​
    })
​
}
​
function isExceedsOneYear(beginTimeValue:string,overTimeValue:string) {
    // 创建为日期对象
    let beginDate:Date = new Date(beginTimeValue);
    let overDate: Date = new Date(overTimeValue);
    return overDate - beginDate < 1000 * 3600 * 24 * 365
}

三、透视分析宏接口介绍

1、概述

透视分析宏需要使用TypeScript进行编写,提供的均为TypeScript接口。TypeScript是JavaScript类型的超集,它可以编译成纯JavaScript。

开发透视分析宏,就是通过Smartbi开放的TypeScript接口,对模型透视分析的页面或组件进行修改,实现定制化的效果。

2、组件接口说明

透视分析宏的接口对象如下表所示:

对象名称解释
IAdHocAnalysis透视分析界面接口
IAdHocTable透视分析表格接口
IAdHocToolbar透视分析工具栏接口
IFilterPanel筛选面板接口
IFilter筛选器接口
IParam参数接口

在实际的透视分析中,接口对象与实际页面的对应如下图所示:

四、视频教学

透视分析宏入门:https://my.smartbi.com.cn/edu/course-124