页面树结构
转至元数据结尾
转至元数据起始

一、透视分析宏界面

1、操作入口

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

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

2、透视分析宏模块

  • 类型

    • 客户端宏

  • 对象

    • ad_hoc_analysis

  • 宏事件

    • onRender(打开报表后)

    • onBeforeRefresh(每次刷新前)

    • onAfterRefresh(每次刷新后)

3、宏代码编辑区

  • main函数funcation main(...)

    • main函数是宏代码的入口函数,宏代码执行的时候会按照main函数里的逻辑顺序执行,声明的函数体不允许删除

  • ad_hoc_analysis参数

    • ad_hoc_analysis透视分析宏内置的接口对象,属于IAdHocAnalysis的接口对象

二、透视分析宏演示

1、需求场景

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

2、JS内置日期对象补充

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

  • 日期对象的作用

    • 日期对象主要提供了一系列的函数用来处理日期和时间,日期格式的字符串转为日期对象之后就可以使用到日期对象提供的函数获取年、月、日等计算时间差值,同时也直接使用两个日期对象做差,得到日期差值的时间戳。

  • 日期对象的基本使用

    • 创建日期对象

      • // 默认获取当前日期时间
        new Date();
        // 指定日期时间
        new Date("2020-01-01")
    • 日期对象计算

      • 两个日期对象可以直接进行相减,得到的结果为两个日期相差的毫秒数

    • 日期对象常用函数

      • 方法描述
        getDate()从 Date 对象返回一个月中的某一天 (1 ~ 31)。
        getDay()从 Date 对象返回一周中的某一天 (0 ~ 6)。
        getMonth()从 Date 对象返回月份 (0 ~ 11)。
        getFullYear()从 Date 对象以四位数字返回年份。
        toLocaleString()转为字符串格式的日期时间:'2025/2/16 16:21:18'
      • 所有方法:JavaScript 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


  • 无标签