BI开发记录

Oracle SQL

join using(name) 等于 join on a.name = b.name

当模式设计对联接表的列采用了相同的命名样式时,就可以使用 USING 语法来简化 ON 语法,格式为:USING(column_name)。

1
2
3
select employee_id,last_name,department_name
from employees join departments
using (department_id)

等价于

1
2
3
select employee_id,last_name,department_name
from employees join departments
on employees.department_id = departments.department_id

Alternative quote operator 代替引用运算符

‘employee is ‘ || last_name => q’[employee is ]’ || last_name 使用q’[]’ 这样的组合来代替 ‘’
具体的使用场景,为了避免在拼接的自定义字符串中再次出现 符号导致无法查询语句无法被解释。
例如:

1
2
select department_name || ' Department's Manager Id: ' || manager_id
from departments

显然由于 Department’s Manager 中含有一个 ‘ 符号,导致这个语句会出错。
这是我们就可以使用代替引用运算符

1
2
select department_name || q'[ Department's Manager Id: ]' || manager_id
from departments

SQLite

介绍:SQLite是一种轻量级的关系型数据库管理系统(DBMS),它是一个开源的、零配置的、自包含的、事务性的SQL数据库引擎。

DDL操作

创建一个Employee表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE [F_Employee]
(
[EmployeeId] INTEGER NOT NULL,
[EmployeeName] NVARCHAR(20) NOT NULL,
[Phone] NVARCHAR(24),
[Email] NVARCHAR(60),
[HireDate] DATETIME,
[JobId] INTEGER,
[Salary] REAL, --单精度浮点
[CommissionPCT] INTEGER,
[ManagerId] INTEGER,
[DepartmentId] INTEGER,
[CreateUser] NVARCHAR(24),
[CreateTime] NVARCHAR(24),
[UpdateUser] NVARCHAR(24),
[UpdateTime] NVARCHAR(24),
CONSTRAINT [PK_Employee] PRIMARY KEY ([EmployeeId])
);

FineBI

获取[年/月]时间区间的天数

获取开始时间到结束时间之间的天数,开始时间和结束时间之间为[年/月]
DAYVALUE(MONTHDELTA(${结束时间},1)) - DAYVALUE(${开始时间})

DATEIF(${结束时间},${开始时间},'d')
持续更新

FineReport

动态SQL参数

1
2
where 1=1
${if(len(NY)==0,"","and NY like '"+NY+"'")}

导出模板按钮

1
2
3
4
5
6
7
8
var url="${servletURL}?viewlet=./test.cpt"
var config = {
//配置默认查询参数,
ny:this.options.form.getWidgetByName("ny").getValue(),
format:"excel",
extype:"simple"
}
FR.doHyperlinkByPost(url,config)

校验并提交按钮

1
2
_g().verifyAndWriteReport();
//校验并提交

Excel自定义导入按钮

1
_g().importExcel("customize");

删除按钮保留最后一行

删除按钮控件名称为 ‘del’ , 可见设置为 true,可用设置为 false

1
2
3
4
5
6
7
8
9
10
11
12
13
//设置最后一行删除键不可用
var arr = ['del'];
//定义需要执行事件的删除行按钮名称数组,如有多组则写法为['sc1','sc2']
for (i = 0; i < arr.length; i++) {
var kj = $('[widgetname="' + arr[i].toUpperCase() + '"]:visible');
//获取页面上可见的删除行按钮元素
var del = _g().getWidgetsByName(arr[i].toUpperCase());
//根据名字获取删除行按钮
for (j = 0; j < del.length; j++) {
kj.length <= 1 ? del[j].setEnable(false) : del[j].setEnable(true);
//当控件只剩1个时,禁用控件,否则遍历启用所有控件
}
}

修改默认按钮的背景色

1
2
//修改默认按钮的背景色
$('.fr-btn-up').css('background','#fff0')

部分美化(一)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//隐藏查询框折叠按钮
$('.parameter-container-collapseimg-up').removeClass('parameter-container-collapseimg-up');

//隐藏选中控件边框
$('.fDright').removeClass('fDright');
$('.fDbottom').removeClass('fDbottom');
$('.fDtop').removeClass('fDtop');
$('.fDleft').removeClass('fDleft');

//修改选中控件边框颜色
//$('.fDright').css('background', 'red');
//$('.fDbottom').css('background', 'red');
//$('.fDtop').css('background', 'red');
//$('.fDleft').css('background', 'red');

//修改编辑控件时,聚焦的边框颜色
$('.x-editor').css('border','2px solid #36d12a');
$('.fr-texteditor').css('border','2px solid #36d12a');
$('.editor-transparent').css('border','2px solid #36d12a');

配置单行编辑结束后的更新时间和更新人

通过控件“编辑结束”事件,配置setCellValue()函数来更改指定单元格的值

user_name = $fine_username
update_time = FORMAT(NOW(),”yyyy-MM-dd HH:mm:ss”)
user_cell = “更新人所在的单元格列号” + ROW()
update_time = “更新时间所在的单元格列号” + ROW()

1
2
_g().setCellValue(user_cell, user_name);
_g().setCellValue(time_cell, update_time);