目录
简介
测试数据
闭环链路关系
解决办法:
根不唯一
解决办法:
简介
在框架图的应用中,一些表达上下游关系的数据非常适合用于做链路图相关的报表。可以展示成雪花图,普通架构图。但是在实际操作中有几点关于数据的注意事项需要留意。
关于框架的基本使用方法帆软官方帮助文档中,已经给出教程。可以自行前往观看。
测试数据
使用版本
数据库:Oracle19C
报表:Finereport-11
CREATE TABLE employees (id NUMBER(10) NOT NULL,name VARCHAR2(100) NOT NULL,manager_id NUMBER(10),CONSTRAINT employees_pk PRIMARY KEY (id),CONSTRAINT employees_fk FOREIGN KEY (manager_id) REFERENCES employees(id)
);DECLAREi NUMBER;
BEGINi := 1;INSERT INTO employees (id, name, manager_id) VALUES (i, 'Employee ' || i, NULL);FOR i IN 2..50 LOOPINSERT INTO employees (id, name, manager_id) VALUES (i, 'Employee ' || i, MOD(i,10)+1);END LOOP;COMMIT;
END;select * from employees ;
此时框架图没有问题
闭环链路关系
id为1依然是置顶,我们给数据做一次修改,使其数据形成一个闭环的递归下转关系。
update employees
set manager_id=25 where id = 1
报表端预览数据是否更新成功(注意数据库AC状态是否开启。以报表段预览的数据为准)
此时我们再看一下报表展示效果。其闭环的下钻关系,导致其无法成功展示出来
当整个链路没有形成闭环的时候,数据便不可展示,
解决办法:
此时我们就需要把闭环的链路进行断开,使其能形成单向下钻的数据链路
根不唯一
在这个数据的递归关系中,ID为1的数据,我们称之为“根”,做框架图,需要保证其根是唯一的,如果不唯一,在框架图中会随机抽取一个根进行下转。
此时我们删刚刚ID为1的数据使其“根”不唯一
以下删掉1,20各位造的数据随机性不一样,需要根据情况删除
delete from employees where id =1
delete from employees where id =20select * from employees
注:本文中采用事务随机生成数据,各位模仿者,请根据生成数据的实际情况进行删除,以达到本博文的实际效果。
此时可以通过递归查看部分根的关系
SELECT id, name, manager_id,level
FROM employees
START WITH manager_id =20
CONNECT BY PRIOR id = manager_id;
(至于为什么删掉1,20,在finereport,其会采用string的数据类型以第一列为准,在框架图中,会优先检索父节点值为空数据为“根”进行下钻,当根不唯一的时候,其“根”的选择会具有不可控性。所以我们根据他选择的“根”将1,10删掉后,20会作为“根”进行下转)。
此时ID为20的数据其没有可以进行下钻的层级
此时我们再观看报表的展示情况
关于框架图,当“根”不唯一的时候,其并不会产生扩散效果。
解决办法:
当“根”不唯一,我们可以增加一个节点作为当前所有“根”的上一层级,使其汇总到新增的“根”上,当然这个新增的“根”可以作为一个主题名称、公司名称、业务名称存在。如下图所示。
如对本文中相关的操作仍有疑问,欢迎私信咨询。
希望能帮助各位。双击三连。