头脑发热,想跳过sql用kettle生成多层级维度结构
整体流程图
1、源数据表结构包含字段
表名:code_dept
字段:
dwdm:代码
dwmc:代码名称
sjdwdm :父级代码
2、拼接所有层级,其中最上级的sjdwdm 字段值为空值
步骤:管理部门字段拼接
select SYS_CONNECT_BY_PATH(dwdm||'m'||dwmc, '|') dwdmpaste
from code_dept
start with sjdwdm is null
connect by prior dwdm=sjdwdm
3、过滤记录
3、拆分字段,行生成多列
代码(都生成四个层级,少的用本身值代替):
//Script here
//i is not care capital and small letter
//g ls global match
var decollator=/[m]/ig
var SUB_CODE_NEW= substr(DWDMPASTE,1);
var num=DWDMPASTE.match(decollator).length
//
var str1="";
var str2="";
var str3="";
var str4="";
var glbmadbm="";
var glbmadmc="";
var glbmzdbm="";
var glbmzdmc="";
var glbmddbm="";
var glbmddmc="";
var glbmmdbm="";
var glbmmdmc="";
var strArray=new Array();
var strArray0=new Array();
strArray=SUB_CODE_NEW.split("|");
if(num==4)
{
str1=strArray[0];
strArray0=str1.split("m")
glbmadbm=strArray0[0];
glbmadmc=strArray0[1];
str1=strArray[1];
strArray0=str1.split("m")
glbmzdbm=strArray0[0];
glbmzdmc=strArray0[1];
str1=strArray[2];
strArray0=str1.split("m")
glbmddbm=strArray0[0];
glbmddmc=strArray0[1];
str1=strArray[3];
strArray0=str1.split("m")
glbmmdbm=strArray0[0];
glbmmdmc=strArray0[1];
}
if(num==3)
{
str1=strArray[0];
strArray0=str1.split("m")
glbmadbm=strArray0[0];
glbmadmc=strArray0[1];
str1=strArray[1];
strArray0=str1.split("m")
glbmzdbm=strArray0[0];
glbmzdmc=strArray0[1];
str1=strArray[2];
strArray0=str1.split("m")
glbmddbm=strArray0[0];
glbmddmc=strArray0[1];
glbmmdbm=glbmddbm;
glbmmdmc=glbmddmc;
}
if(num==2)
{
str1=strArray[0];
strArray0=str1.split("m")
glbmadbm=strArray0[0];
glbmadmc=strArray0[1];
str1=strArray[1];
strArray0=str1.split("m")
glbmzdbm=strArray0[0];
glbmzdmc=strArray0[1];
glbmddbm=glbmzdbm;
glbmddmc=glbmzdmc;
glbmmdbm=glbmzdbm;
glbmmdmc=glbmzdmc;
}
if(num==1)
{
str1=strArray[0];
strArray0=str1.split("m")
glbmadbm=strArray0[0];
glbmadmc=strArray0[1];
glbmzdbm=glbmadbm;
glbmzdmc=glbmadmc;
glbmddbm=glbmadbm;
glbmddmc=glbmadmc;
glbmmdbm=glbmadbm;
glbmmdmc=glbmadmc;
}
4、字段选择,剔除不需要字段(略)
5、过滤不需要的值(略)
6、插入/更新
7、over