需求:给公司的核心Boss系统做各种报表
困难:fineRePort软件熟悉的还凑合,难点在于java做的boss系统web界面和业务逻辑不熟悉,数据库的表和字段一概不知
熟悉数据库的思路:这次没有想几百张表怎么熟悉,或划模块熟悉。
而是直接参考同事以前做的报表,看他写的sql,并结合数据库文档,不断的改不断的试
看sql的难点在于,我们这报表一般的都要连十几张表,里面还各种if、case when、函数、关键字...等,一条sql写100多行,看着真心晕,真心懵逼啊。
1、先打开他那报表,试着跑起来,发现查不出来数据
2、选择查询条件,还是查不出来。这时候就只能看他那sql是咋写的了
看sql的思路(如下图,顺序无所谓,总共就3步):
1、先摒弃case等 多余的东西,只找出要查的字段
2、然后找出所有连表,并 分出来哪一张是主表,其他都是从表。
找外键关系,看他表的关系(通过sql的连表 + on的条件,对应真实表看)
3、根据查询条件分析使用,看他最后一个连表,后面跟的where条件
结果发现是没有授权,但是这思路我觉得对我还是有帮助的
解决:同事提点,给出了要操作哪5张表
我想出来了一个 在上千张表的库中,快速筛选有用数据表的方法
思路:只要数据不是今天或本月(不是热门表)就筛掉,换下一张表看
sql:select 添加时间 from 每个表 order by 添加时间 desc limit 100
4、鼠标跟随效果怎么做:模板-》模板web属性-》分页预览设置-》加载结束-》点铅笔(编辑)
var background_color = "rgb(255,0,0)"; //新背景色
var frozen_back_color = new Array();
var back_color = new Array();
var $last_tr;
var i = 1;
// 首行除外
$('.x-table tr:gt(1)').bind("mouseenter", function () {
//$(".x-table tr")
if (typeof($last_tr) != "undefined") {
if (typeof($(this).attr("id")) != "undefined") {
if (typeof($("#content-container #frozen-west").attr("id")) != "undefined") {
$("#content-container #" + $last_tr.attr("id")).each(function () {
$(this).children("td").each(function () {
$(this).css("background-color", frozen_back_color[$(this).index()]);
});
i = i + 1;
});
i = 1;
} else {
$last_tr.children("td").each(function () {
$(this).css("background-color", back_color[$(this).index()]);
});
}
frozen_back_color = [];
back_color = [];
}
}
if (typeof($(this).attr("id")) != "undefined") {
if (typeof($("#content-container #frozen-west").attr("id")) != "undefined") {
$("#content-container #" + $(this).attr("id")).each(function () {
frozen_back_color = new Array();
$(this).children("td").each(function () {
frozen_back_color[$(this).index()] = $(this).css("background-color");
$(this).css("background-color", background_color);
});
i = i + 1;
});
i = 1;
} else {
$(this).children("td").each(function () {
back_color[$(this).index()] = $(this).css("background-color");
$(this).css("background-color", background_color);
});
}
}
});
//首行除外
$('.x-table tr:gt(1)') .bind("mouseleave", function () {
if (typeof($(this).attr("id")) != "undefined") {
$last_tr = $(this);
}
});
5、报表字段的宽如何修改?
字段少 用 自适应
字段多 不用 自适应
如果查询时间短
怎么才能看到sql呢??
左上角,文件-》选项-》高级-》log级别设置-》改成debug即可
左上角红色 是 条件属性
左上角绿色 是 右侧-》单元格属性-》形态-》数据字典
右上角绿色 是 右侧-》单元格属性-》其他-》分页(行前分页)
左下角黄色 是 过滤条件
蓝色字带下划线 是 超链接
蓝色箭头 是 父格
sql上加limit
1、普通定位
思路:先看[]里,在看[]外
示例:=A1[A1:3]//这3是取A1扩展后的A3单元格的值(下面这4个特殊的值。是放到:3这个位置上的)
1 //第1个值
-1 //上一个值
!0//所有的值
!-1//最后一个值
2、带条件定位
[]后面跟{条件写这里} //带条件
示例:=A1[!0]{A1!=3} //取A1单元格扩展出的值,输出 值!=3的
3、特殊定位
$ //绝对定位时,不写才能取,取当前的值
& //每个
简单多源报表:连表查询。添加过滤条件时,选单元格
复杂多源报表:连库查询(使用的是内置数据集)
多源分片报表:最复杂的。多源就是一张报表的数据来源来自多个数据表,甚至是多个物理数据库。这里的“多个”常常不是两个三个,而是七八个乃至十几个,无法转成单源;
分片是指一张报表的纵向或横向或双向同时被分成了多个区域,往往每个区域来自不同的数据源;【蒙了,没学会】
按段分组:选中单元格-》分组-》高级-》自定义,设置分组条件(就和使用if写 && 条件一样)
归并分组:选中单元格-》分组-》高级-》自定义,设置分组条件(就和使用if写 || 条件一样)
自定义公式分组:【没学会】
主要参考的文档:
概念:
使用方法总结:
单元格的绝对定位(写在公式中,语法是 [])
1、普通定位
思路:先看[]里,在看[]外
示例:=A1[A1:3] //这3是取A1扩展后的A3单元格的值(下面这4个特殊的值。是放到:3这个位置上的)
1 //第1个值
-1 //上一个值
!0//所有的值
!-1//最后一个值
2、带条件定位
[]后面跟{条件写这里} //带条件
示例:=A1[!0]{A1!=3} //取A1单元格扩展出的值,输出 值!=3的
3、特殊定位
$ //绝对定位时,不写才能取,取当前的值
& //每个
单元格计算:
比较:当前月 减 1月份,的值(数字)
占比:当前月 / 所有月份的和(百分比)
环比:当前月 / 上一个月的值(百分比)
逐层累计:同一年中,每月的和,都加之前的和
跨层累计:2年中,18年的1月份+17年的整年和(比逐层多个判断,如果>1月份就要加上一年的和,用逐层累计的公式。否则)
下图是,勾上复选框后,深绿色的地方隐藏
在id那列,通过设置表达式 row()%2==0
多源报表:多源指的是多个数据源。就是多张表中取数据。
注意:连表,它不会自己判断搜索条件,需要手动设置on 谁等于谁
先选中b表的字段(看右侧单元格元素)-》过滤条件(点编辑)-》选单元格(输入和哪个单元格关联)-》先添加,在确定
思路:点击模板1的xx,跳转到一个新网页(模板2)
模板2数据集的,where条件使用参数(变量)代替
模板1的超级链接中
参数总结:在大数据量时使用,数据集参数;数据量不大,使用模板参数;
1、数据集参数,就是在sql中直接写
先在sql中定义参数,语法 ${参数名}
2、模板参数,菜单-》模板-》模板参数中定义
只比数据集多了下面这一步,联合过滤使用(sql的where用的是这可选列,and or是你添加多个条件时...)
1、模板参数-》添加到参数面板中-》传给单元格过滤用
2、Url参数-》定义模板参数-》在url后面加参数-》在单元格中使用(公式-》$调用参数名)就能接收到
url参数在sql中直接使用的语法: '${url上的参数名}'
1、传模板参数:$参数名 //直接放到公式中(如上图)
2、传模板参数:$参数名 //在公式中,将模板参数,当函数参数用
思路:参数为空不过滤
1、数据集参数(在sql上处理)看demo(11-1)
SELECT * FROM 销量 where 1=1 ${if(len(area)==0,"","and 地区='"+area+"'")}
2、模板参数。看demo(11-2)
if(len($a)==0,nofilter,$a)
总思路:填报是对数据库进行【改删】
1、设计报表(和平常一样。数据集-》字段拖过来-》加样式)
2、添加填报控件(相当于html的,各种不同type的input框)
3、设置填报属性。菜单-》模板-》报表填报属性(设置主键。表格字段和数据库表字段的对应关系等)
4、填报预览(进行修改测试)
多个sheet修改,提交时,是全部提交
概念:x轴是分类,Y轴是系列
1、先合并单元格(用于放图表)
2、插入图表(菜单-》插入-》单元格元素-》插入图表)
3、定义图表的数据
嵌入式部署:是有选择的复制文件夹,不是整个项目全复制过去
使用时:只有决策报表才能使用插件
多选控件:
如果带上这俩,会报sql语句错误,具体咋错了我也不知道,运行时的sql语句看不到