Meikel Bisping
2 years ago
21 changed files with 1183 additions and 348 deletions
@ -0,0 +1,330 @@ |
|||||||
|
--freemarker template |
||||||
|
-- Maskenfelder -Leere Zeilen ausblenden, leere SPalten ausblenden? |
||||||
|
<sqlvars> |
||||||
|
<sqlvar name="table_name">select table_name from xcube where maskeninfo_id=${Maskennummer}</sqlvar> |
||||||
|
<sqlvar name="aggrfunction">select aggrfunction from xcube_kennzahl where maskeninfo_id=${Maskennummer} and tid=<<Kennzahl>></sqlvar> |
||||||
|
<sqlvar name="aggrfunction_restriction">select nvl(restriction,''::char(1)) from xcube_kennzahl where maskeninfo_id=${Maskennummer} and tid=<<Kennzahl>></sqlvar> |
||||||
|
<sqlvar name="datatype">select nvl(datatype,'decimal(17,2)'::varchar(30)) from xcube_kennzahl where maskeninfo_id=${Maskennummer} and tid=<<Kennzahl>></sqlvar> |
||||||
|
--benoetigt falls Kennzahlen in Zeilen oder Splaten |
||||||
|
<sqlvar name="kennzahlen" type="hashsequence">select apnr,aggrfunction,nvl(restriction,''::char(1)) as restriction from xcube_kennzahl where maskeninfo_id=${Maskennummer}</sqlvar> |
||||||
|
<sqlvar name="restriction" type="string"><![CDATA[<sximport>select restriction from xcube where maskeninfo_id=<<Maskennummer>></sximport>]]></sqlvar> |
||||||
|
<sqlvar name="coldef" type="hash"><![CDATA[select name,caption,foreignkey_tab,foreignkey_col, |
||||||
|
foreignkey_cap,nvl(foreignkey_cond,''::varchar(1)) as foreignkey_cond, |
||||||
|
--nvl(C.specific_restriction,''::varchar(1)) as specific_restriction, |
||||||
|
sortfield,is_sicht,calc_gesamt,is_virtual,vcsql,nvl(attrib_nachbearbeitung,''::char(1)) as attrib_nachbearbeitung |
||||||
|
from xcube_dimconfig where |
||||||
|
maskeninfo_id=${Maskennummer} |
||||||
|
and name=<<Ansicht in Ergebnisspalten>>]]> |
||||||
|
</sqlvar> |
||||||
|
<sqlvar name="nichtsicht_ergspalten" type='hashsequence'><![CDATA[ |
||||||
|
<#if coldef.is_sicht=0> |
||||||
|
select distinct ${coldef.foreignkey_col} as apnr,${coldef.foreignkey_cap} as name, |
||||||
|
1::smallint as detailgesamtsort,${coldef.sortfield} as tmp_sortfield |
||||||
|
from ${coldef.foreignkey_tab} where |
||||||
|
1=1 |
||||||
|
<#if coldef.foreignkey_cond!=''> and ${coldef.foreignkey_cond} </#if> |
||||||
|
--{coldef.specific_restriction} |
||||||
|
--ausblenden von Spalten, die gar nicht in konkretem Teilergebnis vorkommen |
||||||
|
<#if "<<Leere Spalten ausblenden>>"="'ja'"> |
||||||
|
and ${coldef.foreignkey_col}::varchar(255) in (select distinct ${coldef.name}::varchar(255) from ${table_name} where |
||||||
|
${restriction} |
||||||
|
) |
||||||
|
</#if> |
||||||
|
<#if coldef.calc_gesamt?number=1> |
||||||
|
union |
||||||
|
select 'gesamt','Gesamt',2::smallint as detailgesamtsort,null as tmp_sortfield from xdummy |
||||||
|
</#if> |
||||||
|
order by detailgesamtsort,tmp_sortfield,name; |
||||||
|
<#else> |
||||||
|
select 'Sichtspalten aktiv' from xdummy; |
||||||
|
</#if> |
||||||
|
]]> |
||||||
|
</sqlvar> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<sqlvar name="rowdef" type="hash"><![CDATA[select name,caption,is_sicht,calc_gesamt,foreignkey_tab,foreignkey_col,foreignkey_cap, |
||||||
|
nvl(foreignkey_cond,''::varchar(1)) as foreignkey_cond, |
||||||
|
--nvl(C.specific_restriction,''::varchar(1)) as specific_restriction, |
||||||
|
sortfield,is_virtual,vcsql,nvl(attrib_nachbearbeitung,''::char(1)) as attrib_nachbearbeitung |
||||||
|
from xcube_dimconfig C where maskeninfo_id=${Maskennummer} and name=<<Ansicht in Ergebniszeilen>>]]> |
||||||
|
</sqlvar> |
||||||
|
--nur bei wenn Ergzeilen_def nicht vom Typ Sicht relevant |
||||||
|
<sqlvar name="nichtsicht_ergzeilen" type='hashsequence'><![CDATA[ |
||||||
|
<#if rowdef.is_sicht=0> |
||||||
|
select 1::smallint as level, ${rowdef.foreignkey_col}::varchar(255) as key,--hier wird zur Vereinheitlichung mit Sichten Bezeichung "key" für eigentlichen Schluessel benoetigt |
||||||
|
${rowdef.foreignkey_cap} as name,${rowdef.sortfield} as tmp_sortfield from ${rowdef.foreignkey_tab} |
||||||
|
where 1=1 |
||||||
|
<#if rowdef.foreignkey_cond!=''> and ${rowdef.foreignkey_cond} </#if> |
||||||
|
--{rowdef.specific_restriction} |
||||||
|
<#if rowdef.calc_gesamt?number=1> |
||||||
|
union |
||||||
|
select 2,'gesamt','Gesamt',null as ${rowdef.sortfield} from xdummy |
||||||
|
</#if> |
||||||
|
order by level,tmp_sortfield; |
||||||
|
<#else> |
||||||
|
select 'nicht relevant' from xdummy;</#if> |
||||||
|
]]> |
||||||
|
</sqlvar> |
||||||
|
|
||||||
|
<sqlvar name="zweiteRowDef" type="hash"><![CDATA[ |
||||||
|
<#if "<<2.Ansicht in Zeilen>>"!=""&&"<<2.Ansicht in Zeilen>>"!="<<2.Ansicht in Zeilen>>"> |
||||||
|
select name,caption,is_sicht,calc_gesamt,foreignkey_tab,foreignkey_col,foreignkey_cap, |
||||||
|
nvl(foreignkey_cond,''::varchar(1)) as foreignkey_cond, |
||||||
|
--nvl(C.specific_restriction,''::varchar(1)) as specific_restriction, |
||||||
|
C.sortfield |
||||||
|
from xcube_dimconfig where maskeninfo_id=${Maskennummer} and name=<<2.Ansicht in Zeilen>> |
||||||
|
<#else> |
||||||
|
select 'keine zweite RowDef' from xdummy; |
||||||
|
</#if> |
||||||
|
]]> |
||||||
|
</sqlvar> |
||||||
|
--nur bei wenn Ergzeilen_def nicht vom Typ Sicht relevant |
||||||
|
<sqlvar name="zweiteRow_nichtsicht_ergzeilen" type='hashsequence'><![CDATA[ |
||||||
|
<#if "<<2.Ansicht in Zeilen>>"!=""&&"<<2.Ansicht in Zeilen>>"!="<<2.Ansicht in Zeilen>>"&&zweiteRowDef.is_sicht=0> |
||||||
|
select 1::smallint as level, ${zweiteRowDef.foreignkey_col}::varchar(255) as key,--hier wird zur Vereinheitlichung mit Sichten Bezeichung "key" für eigentlichen Schluessel benoetigt |
||||||
|
${zweiteRowDef.foreignkey_cap} as name,${zweiteRowDef.sortfield} as tmp_sortfield from ${zweiteRowDef.foreignkey_tab} |
||||||
|
where 1=1 |
||||||
|
<#if zweiteRowDef.foreignkey_cond!=''> and ${zweiteRowDef.foreignkey_cond} </#if> |
||||||
|
--{zweiteRowDef.specific_restriction} |
||||||
|
<#if zweiteRowDef.calc_gesamt?number=1> |
||||||
|
union |
||||||
|
select 2,'gesamt','Gesamt',null as ${zweiteRowDef.sortfield} from xdummy |
||||||
|
</#if> |
||||||
|
order by level,tmp_sortfield; |
||||||
|
<#else> |
||||||
|
select 'nicht relevant' from xdummy;</#if> |
||||||
|
]]> |
||||||
|
</sqlvar> |
||||||
|
|
||||||
|
|
||||||
|
</sqlvars> |
||||||
|
|
||||||
|
<#function kennzahlInRowOrCol> |
||||||
|
--TODO auch 2. Dimension in Zeilen/Spalten |
||||||
|
<#if coldef.name="xckennzahl"||rowdef.name="xckennzahl"> <#return 1><#else> return <#return 0> </#if> |
||||||
|
</#function> |
||||||
|
|
||||||
|
<#function hasVirtualColumns> |
||||||
|
--TODO auch 2. Dimension in Zeilen/Spalten |
||||||
|
<#if coldef.is_virtual?number=1||rowdef.is_virtual?number=1> <#return 1><#else> return <#return 0> </#if> |
||||||
|
</#function> |
||||||
|
|
||||||
|
|
||||||
|
<#if hasVirtualColumns()=1||kennzahlInRowOrCol()=1> |
||||||
|
select * into temp tmp_rohdaten from |
||||||
|
${table_name} |
||||||
|
where |
||||||
|
${restriction}; |
||||||
|
<#if coldef.is_virtual?number=1> alter table tmp_rohdaten add column ${coldef.name} varchar(255); ${coldef.vcsql}; </#if> |
||||||
|
<#if rowdef.is_virtual?number=1> alter table tmp_rohdaten add column ${rowdef.name} varchar(255); ${rowdef.vcsql}; </#if> |
||||||
|
--create index ix_tmp_r1 on tmp_rohdaten(${coldef.name},${rowdef.name}); --Todo nicht xckennzahl ggfs. für 2. Dimension in Spalten |
||||||
|
</#if> |
||||||
|
|
||||||
|
|
||||||
|
<#if kennzahlInRowOrCol()=0> |
||||||
|
create temp table tmp_cache ( |
||||||
|
colattrib varchar(255), <@addcomment comment=coldef.caption/> |
||||||
|
rowattrib varchar(255), <@addcomment comment=rowdef.caption/> |
||||||
|
row2attrib varchar(255), |
||||||
|
value decimal(17,5)); |
||||||
|
insert into tmp_cache (colattrib,rowattrib,<#if "<<2.Ansicht in Zeilen>>"!=""&&"<<2.Ansicht in Zeilen>>"!="<<2.Ansicht in Zeilen>>">row2attrib, </#if> value) |
||||||
|
select ${coldef.name}::varchar(255), |
||||||
|
${rowdef.name}::varchar(255), |
||||||
|
<#if "<<2.Ansicht in Zeilen>>"!=""&&"<<2.Ansicht in Zeilen>>"!="<<2.Ansicht in Zeilen>>">${zweiteRowDef.name}::varchar(255),</#if> |
||||||
|
${aggrfunction} |
||||||
|
|
||||||
|
<#if hasVirtualColumns()=0> |
||||||
|
from ${table_name} where |
||||||
|
${restriction} |
||||||
|
<#if (aggrfunction_restriction?length>0)> and ${aggrfunction_restriction} </#if> |
||||||
|
<#else> |
||||||
|
from tmp_rohdaten |
||||||
|
</#if> |
||||||
|
|
||||||
|
group by 1,2 <#if "<<2.Ansicht in Zeilen>>"!=""&&"<<2.Ansicht in Zeilen>>"!="<<2.Ansicht in Zeilen>>">,${zweiteRowDef.name}</#if> ; |
||||||
|
create index ix_tmp_roh1 on tmp_cache (colattrib,rowattrib,row2attrib); |
||||||
|
</#if> |
||||||
|
|
||||||
|
--moegliche attrib_nachbearbeitung |
||||||
|
<#if kennzahlInRowOrCol()=0> |
||||||
|
<#assign tmp_table="tmp_cache"/> <#assign rowfield="rowattrib"/> <#assign colfield="rowattrib"/> |
||||||
|
<#else> |
||||||
|
<#assign tmp_table="tmp_rohdaten"/> <#assign rowfield=rowdef.name/> <#assign colfield=coldef.name/> |
||||||
|
</#if> |
||||||
|
|
||||||
|
<#if (rowdef.attrib_nachbearbeitung?length>1)> |
||||||
|
${rowdef.attrib_nachbearbeitung?replace("<<tmp_table>>",tmp_table)?replace("<<col>>",rowfield)}; |
||||||
|
-- z.B. update tmp_cache R set rowattrib='s_'||rowattrib; |
||||||
|
</#if> |
||||||
|
<#if (coldef.attrib_nachbearbeitung?length>1)> |
||||||
|
${coldef.attrib_nachbearbeitung?replace("<<tmp_table>>",tmp_table)?replace("<<col>>",colfield)}; |
||||||
|
-- z.B. update tmp_cache R set rowattrib='s_'||rowattrib; |
||||||
|
</#if> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<#if coldef.is_sicht>0> |
||||||
|
<#assign ergspalten=.vars[coldef.caption].elements/> |
||||||
|
<#else> |
||||||
|
<#assign ergspalten=nichtsicht_ergspalten/> |
||||||
|
</#if> |
||||||
|
create temp table tmp_erg ( |
||||||
|
ebene integer, |
||||||
|
col1 varchar(255), |
||||||
|
name varchar(255), |
||||||
|
<#if "<<2.Ansicht in Zeilen>>"!=""&&"<<2.Ansicht in Zeilen>>"!="<<2.Ansicht in Zeilen>>">col2 varchar(255),</#if> |
||||||
|
<#assign i=0/> |
||||||
|
<#foreach spalte in ergspalten> |
||||||
|
<#assign i=i+1/> |
||||||
|
c${i} decimal(17,5) default 0, <@addcomment comment=spalte.name/> |
||||||
|
|
||||||
|
</#foreach> |
||||||
|
sortnr integer |
||||||
|
) <@informixnolog/>; |
||||||
|
|
||||||
|
create index ix_tmp_erg on tmp_erg (sortnr); |
||||||
|
|
||||||
|
<#if rowdef.is_sicht>0> |
||||||
|
<#assign zeilendef=.vars[rowdef.caption].elements/> --ermittelt des SichtObjekts anhand des Feldnames (aus felderinfo) |
||||||
|
<#else> |
||||||
|
<#assign zeilendef=nichtsicht_ergzeilen/> |
||||||
|
</#if> |
||||||
|
<#assign sortnr=0/> |
||||||
|
<#foreach zeile in zeilendef> |
||||||
|
<#if "<<2.Ansicht in Zeilen>>"!=""&&"<<2.Ansicht in Zeilen>>"!="<<2.Ansicht in Zeilen>>"> |
||||||
|
<#foreach zeile2 in zweiteRow_nichtsicht_ergzeilen> |
||||||
|
<#assign sortnr=sortnr+1/> |
||||||
|
insert into tmp_erg (ebene,col1,name,col2,sortnr) |
||||||
|
values (${zeile.level},'${zeile.key}','${zeile.name}','${zeile2.name}',${sortnr}); |
||||||
|
<#assign i=0/> |
||||||
|
<#foreach spalte in ergspalten> |
||||||
|
<#assign i=i+1/> |
||||||
|
<@updateval i=i col=spalte row=zeile row2=zeile2 sortnr=sortnr/> |
||||||
|
</#foreach> |
||||||
|
</#foreach> |
||||||
|
<#else> |
||||||
|
<#assign sortnr=sortnr+1/> |
||||||
|
insert into tmp_erg (ebene,col1,name,sortnr) |
||||||
|
values (${zeile.level},'${zeile.key}','${zeile.name}',${sortnr}); |
||||||
|
<#assign i=0/> |
||||||
|
<#foreach spalte in ergspalten> |
||||||
|
<#assign i=i+1/> |
||||||
|
<@updateval i=i col=spalte row=zeile row2='' sortnr=sortnr/> |
||||||
|
</#foreach> |
||||||
|
</#if> |
||||||
|
</#foreach> |
||||||
|
|
||||||
|
<#macro updateval i col row row2 sortnr> |
||||||
|
update tmp_erg T set c${i}= |
||||||
|
<#if kennzahlInRowOrCol()=0> |
||||||
|
(select nvl(sum(value),0) from tmp_cache R where 1=1 |
||||||
|
<@colrestriction col=col/> |
||||||
|
<@rowrestriction row=row row2=row2/> |
||||||
|
) |
||||||
|
<#else> -- Kennzahl ist in Zeile oder Spalte |
||||||
|
(select <@kennzahlSelect row=row col=col/> |
||||||
|
from tmp_rohdaten R where 1=1 |
||||||
|
<#if rowdef.name="xckennzahl"> <@kennzahlrestrict row=row col=col/> <#else> <@rowrestriction row=row row2=row2 rowattribname=rowdef.name/></#if> |
||||||
|
<#if coldef.name="xckennzahl"> <@kennzahlrestrict row=row col=col/> <#else> <@colrestriction col=col colattribname=coldef.name/></#if> |
||||||
|
|
||||||
|
) |
||||||
|
</#if> |
||||||
|
where T.sortnr='${sortnr}' |
||||||
|
; |
||||||
|
</#macro> |
||||||
|
|
||||||
|
<#macro kennzahlrestrict row col> |
||||||
|
<#if coldef.name="xckennzahl"> |
||||||
|
<#foreach k in kennzahlen> |
||||||
|
<#if (col.apnr=k.apnr&&k.restriction?length>0)> and ${k.restriction} </#if> |
||||||
|
</#foreach> |
||||||
|
</#if> |
||||||
|
<#if rowdef.name="xckennzahl"> |
||||||
|
<#foreach k in kennzahlen> |
||||||
|
<#if (row.key=k.apnr&&k.restriction?length>0)> and ${k.restriction} </#if> |
||||||
|
</#foreach> |
||||||
|
</#if> |
||||||
|
</#macro> |
||||||
|
|
||||||
|
<#macro kennzahlSelect row col> |
||||||
|
<#if coldef.name="xckennzahl"> |
||||||
|
<#foreach k in kennzahlen> |
||||||
|
<#if col.apnr=k.apnr> ${k.aggrfunction} </#if> |
||||||
|
</#foreach> |
||||||
|
</#if> |
||||||
|
<#if rowdef.name="xckennzahl"> |
||||||
|
<#foreach k in kennzahlen> |
||||||
|
<#if row.key=k.apnr> ${k.aggrfunction} </#if> |
||||||
|
</#foreach> |
||||||
|
</#if> |
||||||
|
|
||||||
|
|
||||||
|
</#macro> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<#macro colrestriction col colattribname='R.colattrib'> |
||||||
|
<#if coldef.is_sicht==1> |
||||||
|
and ${colattribname}::varchar(255) in ${col.subkeys} |
||||||
|
<#else> |
||||||
|
--TODO Sicht=2 |
||||||
|
<#if col.apnr!='gesamt'> |
||||||
|
and ${colattribname}::varchar(255)='${col.apnr}' |
||||||
|
</#if> |
||||||
|
</#if> |
||||||
|
</#macro> |
||||||
|
|
||||||
|
<#macro rowrestriction row row2 rowattribname='R.rowattrib' > |
||||||
|
<#if rowdef.is_sicht==1> |
||||||
|
and ${rowattribname}::varchar(255) in ${row.subkeys} |
||||||
|
<#elseif rowdef.is_sicht==2> |
||||||
|
and ( ${row.strukturStr?replace('$1',' '+rowattribname+"::varchar(255)")} ) |
||||||
|
<#else> |
||||||
|
<#if row.key!='gesamt'> and ${rowattribname}::varchar(255)='${row.key}' </#if> |
||||||
|
</#if> |
||||||
|
<#if row2?is_hash> and R.row2attrib='${row2.key}' </#if> |
||||||
|
</#macro> |
||||||
|
|
||||||
|
drop table if exists tmp_cache; |
||||||
|
|
||||||
|
drop table if exists tmp_rohdaten; |
||||||
|
|
||||||
|
-- Kennzahl in Spalten/Zeilen ggfs. null |
||||||
|
<#assign i=0/> |
||||||
|
<#foreach spalte in ergspalten> |
||||||
|
<#assign i=i+1/> |
||||||
|
update tmp_erg set c${i}=0 where c${i} is null; |
||||||
|
</#foreach> |
||||||
|
|
||||||
|
<#if "<<Leere Zeilen ausblenden>>"="'ja'"> |
||||||
|
delete from tmp_erg where |
||||||
|
<#assign i=0/> |
||||||
|
<#foreach spalte in ergspalten> |
||||||
|
<#assign i=i+1/> |
||||||
|
c${i}=0 <#if spalte_has_next> and </#if> |
||||||
|
</#foreach>; |
||||||
|
</#if> |
||||||
|
<#if "<<Ansicht in Ergebniszeilen>>"="'institution'"> |
||||||
|
update tmp_erg set name=replace(name,col1||' - ',''); |
||||||
|
update tmp_erg set col1=(select max(uniquename) from organigramm where col1=trim(key_apnr)) |
||||||
|
where substring(col1 from 1 for 1)='_'; |
||||||
|
--vorher war ggfs _3 zu O005030, auch O005030 in Namen ersetzen |
||||||
|
update tmp_erg set name=replace(name,col1||' - ',''); |
||||||
|
</#if> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
select |
||||||
|
<#if rowdef.is_sicht>0>ebene,col1,</#if> |
||||||
|
name, |
||||||
|
<#if "<<2.Ansicht in Zeilen>>"!=""&&"<<2.Ansicht in Zeilen>>"!="<<2.Ansicht in Zeilen>>">col2,</#if> |
||||||
|
<#assign i=0/> |
||||||
|
<#foreach spalte in ergspalten> |
||||||
|
<#assign i=i+1/> |
||||||
|
c${i}::${datatype} <#if spalte_has_next>,</#if> |
||||||
|
</#foreach> |
||||||
|
|
||||||
|
from tmp_erg order by sortnr; |
@ -0,0 +1,44 @@ |
|||||||
|
21000^Köpfe oder Fälle ?^0^0^0^140^150^1^sql^70^0^1^<<SQL>> select apnr, eintrag from koepfe_oder_faelle where eintrag not like 'gewichtet nach%' order by 2^apnr, eintrag^<<SQL>> select apnr, eintrag from koepfe_oder_faelle where eintrag='Köpfe';^ |
||||||
|
21001^Semester^3^0^0^140^80^3^integer^30^0^1^<<SQL>> select tid, eintrag from semester order by tid DESC;^Eintrag^<<SQL>> select tid,eintrag from semester where today() between sem_beginn and sem_ende;^ |
||||||
|
21002^Stichtag^1^350^-1^140^100^1^sql^30^0^1^<<SQL>> select tid, name from sos_stichtag where stichtagsart='Studierende';^^<<SQL>> select tid, name from sos_stichtag where stichtagsart='Studierende' and appl_key='0';^ |
||||||
|
21003^Staatsangehörigkeit^36^0^0^130^150^10^char^30^0^12^<<SQL>> select tid,name,sortnr from sichten where art='SOS-Staaten-Sicht' order by 3,2;^^^ |
||||||
|
21004^Status^14^350^-1^140^180^1^sql^30^0^1^<<SQL>> select apnr,eintrag from sos_status order by 2^^<<SQL>> select apnr,eintrag from sos_status where eintrag='Alle ohne Beurl.';^ |
||||||
|
21005^Hörerstatus^33^0^0^140^170^1^sql^30^0^1^<<SQL>> select apnr, eintrag from hoererstatus order by 2^apnr, eintrag^<<SQL>> select apnr, eintrag from hoererstatus where eintrag='alle';^ |
||||||
|
21006^Weitere Tabellen^123^0^0^140^140^10^char^30^0^999^<<SQL>> \ |
||||||
|
--freemarker template\ |
||||||
|
select name,string_not_null(caption) || ' - ' || name from sx_tables where name in (<#if "<<Köpfe oder Fälle ?>>"?index_of("S.gewichtung")==-1>'dim_studiengang'<#else>'dim_studiengang_gew'</#if>,'ikfz_bland_sem','ikfz_bland_hm','ikfz_bland_hzb','dim_staat', 'dim_person_attribute_aggr', 'semester')\ |
||||||
|
<#if <<tablestylesheet>>!='tabelle_html_datenblatt.xsl'>\ |
||||||
|
and name in (select distinct tablename from stylesheet_field where stylesheet_id in (select tid from sx_stylesheets where filename=<<tablestylesheet>>)) \ |
||||||
|
</#if>\ |
||||||
|
order by 2^^^ |
||||||
|
21007^bis Fachsemester^35^350^-1^140^100^1^integer^30^0^0^^^^ |
||||||
|
21009^Bis Semester^4^350^-1^140^80^1^integer^30^0^999^<<SQL>> select tid, eintrag from semester order by tid DESC;^Eintrag^<<SQL>> select tid,eintrag from semester where today() between sem_beginn and sem_ende;^ |
||||||
|
21010^Filter Studierende^119^0^0^140^150^1^sql^20^0^1^<<SQL>> SELECT id,caption from sx_repository where aktiv =1 and today() between gueltig_seit and gueltig_bis and art='SOS_STUD_FILTER' order by 2;^^^ |
||||||
|
21011^Geschlecht^37^0^0^140^80^1^integer^30^0^1^<<SQL>> SELECT apnr,druck FROM cif where key = 9003 and apnr between 1 and 4 order by 1;^^^ |
||||||
|
21012^Felder^125^0^0^150^190^10^char^30^0^999^<<SQL>>\ |
||||||
|
--freemarker template\ |
||||||
|
select trim(F.table_name) || '.' || F.name,trim(T.caption) || ':' || trim(F.caption) || ' - ' || trim(F.name) from sx_fields F,\ |
||||||
|
sx_tables T where F.table_name=T.name and F.currentlyused=1\ |
||||||
|
--Pseudonyme eingeschaltet:\ |
||||||
|
and (F.name != 'matrikel_nr' or 0=(select \ |
||||||
|
count(*) from konstanten where beschreibung='SOS_MTKNR_EXT'\ |
||||||
|
and apnr=1)) \ |
||||||
|
<#if <<tablestylesheet>>='tabelle_html_datenblatt.xsl'>\ |
||||||
|
and (F.table_name ='sos_stg_aggr'\ |
||||||
|
/* or F.table_name in (<<Weitere Tabellen>>) */) \ |
||||||
|
<#else>\ |
||||||
|
and trim(F.table_name) || '.' || F.name in (select trim(tablename)||'.'||trim(fieldname) from stylesheet_field where stylesheet_id in \ |
||||||
|
(select tid from sx_stylesheets where filename=<<tablestylesheet>>))\ |
||||||
|
</#if>\ |
||||||
|
order by 2;^^^ |
||||||
|
21013^Studiengang^6^0^0^140^150^50^char^30^0^12^<<SQL>> select tid,name,sortnr from sichten where art in ('SOS-Kostenstellen-Sicht', 'SOS-Studiengang-Sicht') order by 3,2;^^^ |
||||||
|
21014^Schlüssel anzeigen^150^0^0^100^100^1^integer^30^1^999^<<SQL>> select 1,'Ja' from xdummy union select 0,'Nein' from xdummy^^<<SQL>> select 1,'Ja' from xdummy^ |
||||||
|
21015^Ansicht in Ergebniszeilen^121^0^0^100^200^1^char^200^1^1^<<SQL>> select name,caption from xcube_dimconfig where maskeninfo_id=${Maskennummer} and is_rowdim=1 order by 1^^<<SQL>> select name,caption from xcube_dimconfig where maskeninfo_id=${Maskennummer} and is_rowdefault=1^ |
||||||
|
21016^Ansicht in Ergebnisspalten^2001^0^0^100^150^1^char^200^1^1^<<SQL>> select name,caption from xcube_dimconfig where maskeninfo_id=${Maskennummer} and is_coldim=1 order by 1^^<<SQL>> select name,caption from xcube_dimconfig where maskeninfo_id=${Maskennummer} and is_coldefault=1^ |
||||||
|
21017^Zivilstatus^41^350^-1^140^180^1^sql^30^0^13^<<SQL>> select attributevalue from personattribute_value_list where personattributetype_id = (select personattributetype_id from personattributetype where attributevalue = 'Status');^^^ |
||||||
|
21018^Jahrgang^42^350^-1^140^180^1^sql^30^0^13^<<SQL>> select attributevalue from personattribute_value_list where personattributetype_id = (select personattributetype_id from personattributetype where attributevalue = 'Jahrgang');^^^ |
||||||
|
21019^Leere Zeilen ausblenden^130^350^-1^140^80^1^char^30^0^1^<<SQL>> select 'ja','ja' from xdummy union select 'nein','nein' from xdummy^ ^<<SQL>> select 'ja','ja' from xdummy^ |
||||||
|
21020^Leere Spalten ausblenden^2020^0^0^100^100^1^char^30^0^1^<<SQL>> select 'ja','ja' from xdummy union select 'nein','nein' from xdummy^^<<SQL>> select 'ja','ja' from xdummy^ |
||||||
|
21021^Abschluss^7^0^0^140^170^5^char^30^0^1^<<SQL>> select abint,dtxt from k_abint order by 2;^^^ |
||||||
|
21022^Kennzahl^3000^350^-1^150^180^1^integer^200^1^1^<<SQL>> select tid,name from xcube_kennzahl where maskeninfo_id=${Maskennummer} order by sortnr,name;^hidden^<<SQL>> select tid,name from xcube_kennzahl where maskeninfo_id=${Maskennummer} and is_default=1^ |
||||||
|
21023^2.Ansicht in Zeilen^125^0^0^100^100^1^char^50^0^999^<<SQL>> select name,caption from xcube_dimconfig where maskeninfo_id=${Maskennummer} and is_secondrowdim=1 order by 1^hidden^1^ |
@ -0,0 +1 @@ |
|||||||
|
21000^7^ |
@ -0,0 +1,23 @@ |
|||||||
|
21000^21000^ |
||||||
|
21000^21001^ |
||||||
|
21000^21002^ |
||||||
|
21000^21003^ |
||||||
|
21000^21004^ |
||||||
|
21000^21005^ |
||||||
|
21000^21006^ |
||||||
|
21000^21007^ |
||||||
|
21000^21009^ |
||||||
|
21000^21010^ |
||||||
|
21000^21011^ |
||||||
|
21000^21012^ |
||||||
|
21000^21013^ |
||||||
|
21000^21014^ |
||||||
|
21000^21015^ |
||||||
|
21000^21016^ |
||||||
|
21000^21017^ |
||||||
|
21000^21018^ |
||||||
|
21000^21019^ |
||||||
|
21000^21020^ |
||||||
|
21000^21021^ |
||||||
|
21000^21022^ |
||||||
|
21000^21023^ |
@ -0,0 +1,369 @@ |
|||||||
|
21000^Studierendenwürfel^--freemarker template\ |
||||||
|
-- Maskenfelder -Leere Zeilen ausblenden, leere SPalten ausblenden?\ |
||||||
|
<sqlvars>\ |
||||||
|
<sqlvar name="table_name">select table_name from xcube where maskeninfo_id=${Maskennummer}</sqlvar>\ |
||||||
|
<sqlvar name="aggrfunction">select aggrfunction from xcube_kennzahl where maskeninfo_id=${Maskennummer} and tid=<<Kennzahl>></sqlvar>\ |
||||||
|
<sqlvar name="aggrfunction_restriction">select nvl(restriction,''::char(1)) from xcube_kennzahl where maskeninfo_id=${Maskennummer} and tid=<<Kennzahl>></sqlvar>\ |
||||||
|
<sqlvar name="datatype">select nvl(datatype,'decimal(17,2)'::varchar(30)) from xcube_kennzahl where maskeninfo_id=${Maskennummer} and tid=<<Kennzahl>></sqlvar>\ |
||||||
|
--benoetigt falls Kennzahlen in Zeilen oder Splaten\ |
||||||
|
<sqlvar name="kennzahlen" type="hashsequence">select apnr,aggrfunction,nvl(restriction,''::char(1)) as restriction from xcube_kennzahl where maskeninfo_id=${Maskennummer}</sqlvar>\ |
||||||
|
<sqlvar name="restriction" type="string"><![CDATA[<sximport>select restriction from xcube where maskeninfo_id=<<Maskennummer>></sximport>]]></sqlvar>\ |
||||||
|
<sqlvar name="coldef" type="hash"><![CDATA[select name,caption,foreignkey_tab,foreignkey_col,\ |
||||||
|
foreignkey_cap,nvl(foreignkey_cond,''::varchar(1)) as foreignkey_cond,\ |
||||||
|
--nvl(C.specific_restriction,''::varchar(1)) as specific_restriction,\ |
||||||
|
sortfield,is_sicht,calc_gesamt,is_virtual,vcsql,nvl(attrib_nachbearbeitung,''::char(1)) as attrib_nachbearbeitung\ |
||||||
|
from xcube_dimconfig where \ |
||||||
|
maskeninfo_id=${Maskennummer} \ |
||||||
|
and name=<<Ansicht in Ergebnisspalten>>]]>\ |
||||||
|
</sqlvar>\ |
||||||
|
<sqlvar name="nichtsicht_ergspalten" type='hashsequence'><![CDATA[\ |
||||||
|
<#if coldef.is_sicht=0>\ |
||||||
|
select distinct ${coldef.foreignkey_col} as apnr,${coldef.foreignkey_cap} as name,\ |
||||||
|
1::smallint as detailgesamtsort,${coldef.sortfield} as tmp_sortfield\ |
||||||
|
from ${coldef.foreignkey_tab} where \ |
||||||
|
1=1 \ |
||||||
|
<#if coldef.foreignkey_cond!=''> and ${coldef.foreignkey_cond} </#if>\ |
||||||
|
--{coldef.specific_restriction} \ |
||||||
|
--ausblenden von Spalten, die gar nicht in konkretem Teilergebnis vorkommen\ |
||||||
|
<#if "<<Leere Spalten ausblenden>>"="'ja'">\ |
||||||
|
and ${coldef.foreignkey_col}::varchar(255) in (select distinct ${coldef.name}::varchar(255) from ${table_name} where \ |
||||||
|
${restriction} \ |
||||||
|
)\ |
||||||
|
</#if>\ |
||||||
|
<#if coldef.calc_gesamt?number=1> \ |
||||||
|
union\ |
||||||
|
select 'gesamt','Gesamt',2::smallint as detailgesamtsort,null as tmp_sortfield from xdummy\ |
||||||
|
</#if>\ |
||||||
|
order by detailgesamtsort,tmp_sortfield,name;\ |
||||||
|
<#else>\ |
||||||
|
select 'Sichtspalten aktiv' from xdummy;\ |
||||||
|
</#if>\ |
||||||
|
]]>\ |
||||||
|
</sqlvar>\ |
||||||
|
\ |
||||||
|
\ |
||||||
|
\ |
||||||
|
<sqlvar name="rowdef" type="hash"><![CDATA[select name,caption,is_sicht,calc_gesamt,foreignkey_tab,foreignkey_col,foreignkey_cap,\ |
||||||
|
nvl(foreignkey_cond,''::varchar(1)) as foreignkey_cond,\ |
||||||
|
--nvl(C.specific_restriction,''::varchar(1)) as specific_restriction,\ |
||||||
|
sortfield,is_virtual,vcsql,nvl(attrib_nachbearbeitung,''::char(1)) as attrib_nachbearbeitung\ |
||||||
|
from xcube_dimconfig C where maskeninfo_id=${Maskennummer} and name=<<Ansicht in Ergebniszeilen>>]]>\ |
||||||
|
</sqlvar>\ |
||||||
|
--nur bei wenn Ergzeilen_def nicht vom Typ Sicht relevant\ |
||||||
|
<sqlvar name="nichtsicht_ergzeilen" type='hashsequence'><![CDATA[\ |
||||||
|
<#if rowdef.is_sicht=0>\ |
||||||
|
select 1::smallint as level, ${rowdef.foreignkey_col}::varchar(255) as key,--hier wird zur Vereinheitlichung mit Sichten Bezeichung "key" für eigentlichen Schluessel benoetigt\ |
||||||
|
${rowdef.foreignkey_cap} as name,${rowdef.sortfield} as tmp_sortfield from ${rowdef.foreignkey_tab}\ |
||||||
|
where 1=1\ |
||||||
|
<#if rowdef.foreignkey_cond!=''> and ${rowdef.foreignkey_cond} </#if>\ |
||||||
|
--{rowdef.specific_restriction} \ |
||||||
|
<#if rowdef.calc_gesamt?number=1>\ |
||||||
|
union\ |
||||||
|
select 2,'gesamt','Gesamt',null as ${rowdef.sortfield} from xdummy\ |
||||||
|
</#if>\ |
||||||
|
order by level,tmp_sortfield; \ |
||||||
|
<#else>\ |
||||||
|
select 'nicht relevant' from xdummy;</#if>\ |
||||||
|
]]>\ |
||||||
|
</sqlvar>\ |
||||||
|
\ |
||||||
|
<sqlvar name="zweiteRowDef" type="hash"><![CDATA[\ |
||||||
|
<#if "<<2.Ansicht in Zeilen>>"!=""&&"<<2.Ansicht in Zeilen>>"!="<<2.Ansicht in Zeilen>>">\ |
||||||
|
select name,caption,is_sicht,calc_gesamt,foreignkey_tab,foreignkey_col,foreignkey_cap,\ |
||||||
|
nvl(foreignkey_cond,''::varchar(1)) as foreignkey_cond,\ |
||||||
|
--nvl(C.specific_restriction,''::varchar(1)) as specific_restriction,\ |
||||||
|
C.sortfield\ |
||||||
|
from xcube_dimconfig where maskeninfo_id=${Maskennummer} and name=<<2.Ansicht in Zeilen>>\ |
||||||
|
<#else>\ |
||||||
|
select 'keine zweite RowDef' from xdummy;\ |
||||||
|
</#if>\ |
||||||
|
]]>\ |
||||||
|
</sqlvar>\ |
||||||
|
--nur bei wenn Ergzeilen_def nicht vom Typ Sicht relevant\ |
||||||
|
<sqlvar name="zweiteRow_nichtsicht_ergzeilen" type='hashsequence'><![CDATA[\ |
||||||
|
<#if "<<2.Ansicht in Zeilen>>"!=""&&"<<2.Ansicht in Zeilen>>"!="<<2.Ansicht in Zeilen>>"&&zweiteRowDef.is_sicht=0>\ |
||||||
|
select 1::smallint as level, ${zweiteRowDef.foreignkey_col}::varchar(255) as key,--hier wird zur Vereinheitlichung mit Sichten Bezeichung "key" für eigentlichen Schluessel benoetigt\ |
||||||
|
${zweiteRowDef.foreignkey_cap} as name,${zweiteRowDef.sortfield} as tmp_sortfield from ${zweiteRowDef.foreignkey_tab}\ |
||||||
|
where 1=1\ |
||||||
|
<#if zweiteRowDef.foreignkey_cond!=''> and ${zweiteRowDef.foreignkey_cond} </#if>\ |
||||||
|
--{zweiteRowDef.specific_restriction} \ |
||||||
|
<#if zweiteRowDef.calc_gesamt?number=1>\ |
||||||
|
union\ |
||||||
|
select 2,'gesamt','Gesamt',null as ${zweiteRowDef.sortfield} from xdummy\ |
||||||
|
</#if>\ |
||||||
|
order by level,tmp_sortfield; \ |
||||||
|
<#else>\ |
||||||
|
select 'nicht relevant' from xdummy;</#if>\ |
||||||
|
]]>\ |
||||||
|
</sqlvar>\ |
||||||
|
\ |
||||||
|
\ |
||||||
|
</sqlvars>\ |
||||||
|
\ |
||||||
|
<#function kennzahlInRowOrCol>\ |
||||||
|
--TODO auch 2. Dimension in Zeilen/Spalten\ |
||||||
|
<#if coldef.name="xckennzahl"||rowdef.name="xckennzahl"> <#return 1><#else> return <#return 0> </#if>\ |
||||||
|
</#function>\ |
||||||
|
\ |
||||||
|
<#function hasVirtualColumns>\ |
||||||
|
--TODO auch 2. Dimension in Zeilen/Spalten\ |
||||||
|
<#if coldef.is_virtual?number=1||rowdef.is_virtual?number=1> <#return 1><#else> return <#return 0> </#if>\ |
||||||
|
</#function>\ |
||||||
|
\ |
||||||
|
\ |
||||||
|
<#if hasVirtualColumns()=1||kennzahlInRowOrCol()=1>\ |
||||||
|
select * into temp tmp_rohdaten from \ |
||||||
|
${table_name}\ |
||||||
|
where \ |
||||||
|
${restriction};\ |
||||||
|
<#if coldef.is_virtual?number=1> alter table tmp_rohdaten add column ${coldef.name} varchar(255); ${coldef.vcsql}; </#if>\ |
||||||
|
<#if rowdef.is_virtual?number=1> alter table tmp_rohdaten add column ${rowdef.name} varchar(255); ${rowdef.vcsql}; </#if>\ |
||||||
|
--create index ix_tmp_r1 on tmp_rohdaten(${coldef.name},${rowdef.name}); --Todo nicht xckennzahl ggfs. für 2. Dimension in Spalten\ |
||||||
|
</#if>\ |
||||||
|
\ |
||||||
|
\ |
||||||
|
<#if kennzahlInRowOrCol()=0>\ |
||||||
|
create temp table tmp_cache (\ |
||||||
|
colattrib varchar(255), <@addcomment comment=coldef.caption/>\ |
||||||
|
rowattrib varchar(255), <@addcomment comment=rowdef.caption/>\ |
||||||
|
row2attrib varchar(255),\ |
||||||
|
value decimal(17,5));\ |
||||||
|
insert into tmp_cache (colattrib,rowattrib,<#if "<<2.Ansicht in Zeilen>>"!=""&&"<<2.Ansicht in Zeilen>>"!="<<2.Ansicht in Zeilen>>">row2attrib, </#if> value)\ |
||||||
|
select ${coldef.name}::varchar(255), \ |
||||||
|
${rowdef.name}::varchar(255),\ |
||||||
|
<#if "<<2.Ansicht in Zeilen>>"!=""&&"<<2.Ansicht in Zeilen>>"!="<<2.Ansicht in Zeilen>>">${zweiteRowDef.name}::varchar(255),</#if>\ |
||||||
|
${aggrfunction}\ |
||||||
|
\ |
||||||
|
<#if hasVirtualColumns()=0> \ |
||||||
|
from ${table_name} where \ |
||||||
|
${restriction}\ |
||||||
|
<#if (aggrfunction_restriction?length>0)> and ${aggrfunction_restriction} </#if>\ |
||||||
|
<#else>\ |
||||||
|
from tmp_rohdaten\ |
||||||
|
</#if>\ |
||||||
|
\ |
||||||
|
group by 1,2 <#if "<<2.Ansicht in Zeilen>>"!=""&&"<<2.Ansicht in Zeilen>>"!="<<2.Ansicht in Zeilen>>">,${zweiteRowDef.name}</#if> ;\ |
||||||
|
create index ix_tmp_roh1 on tmp_cache (colattrib,rowattrib,row2attrib);\ |
||||||
|
</#if>\ |
||||||
|
\ |
||||||
|
--moegliche attrib_nachbearbeitung\ |
||||||
|
<#if kennzahlInRowOrCol()=0> \ |
||||||
|
<#assign tmp_table="tmp_cache"/> <#assign rowfield="rowattrib"/> <#assign colfield="rowattrib"/> \ |
||||||
|
<#else>\ |
||||||
|
<#assign tmp_table="tmp_rohdaten"/> <#assign rowfield=rowdef.name/> <#assign colfield=coldef.name/> \ |
||||||
|
</#if>\ |
||||||
|
\ |
||||||
|
<#if (rowdef.attrib_nachbearbeitung?length>1)>\ |
||||||
|
${rowdef.attrib_nachbearbeitung?replace("<<tmp_table>>",tmp_table)?replace("<<col>>",rowfield)};\ |
||||||
|
-- z.B. update tmp_cache R set rowattrib='s_'||rowattrib;\ |
||||||
|
</#if>\ |
||||||
|
<#if (coldef.attrib_nachbearbeitung?length>1)>\ |
||||||
|
${coldef.attrib_nachbearbeitung?replace("<<tmp_table>>",tmp_table)?replace("<<col>>",colfield)};\ |
||||||
|
-- z.B. update tmp_cache R set rowattrib='s_'||rowattrib;\ |
||||||
|
</#if>\ |
||||||
|
\ |
||||||
|
\ |
||||||
|
\ |
||||||
|
\ |
||||||
|
<#if coldef.is_sicht>0>\ |
||||||
|
<#assign ergspalten=.vars[coldef.caption].elements/>\ |
||||||
|
<#else>\ |
||||||
|
<#assign ergspalten=nichtsicht_ergspalten/>\ |
||||||
|
</#if>\ |
||||||
|
create temp table tmp_erg (\ |
||||||
|
ebene integer,\ |
||||||
|
col1 varchar(255),\ |
||||||
|
name varchar(255),\ |
||||||
|
<#if "<<2.Ansicht in Zeilen>>"!=""&&"<<2.Ansicht in Zeilen>>"!="<<2.Ansicht in Zeilen>>">col2 varchar(255),</#if>\ |
||||||
|
<#assign i=0/>\ |
||||||
|
<#foreach spalte in ergspalten>\ |
||||||
|
<#assign i=i+1/>\ |
||||||
|
c${i} decimal(17,5) default 0, <@addcomment comment=spalte.name/>\ |
||||||
|
\ |
||||||
|
</#foreach>\ |
||||||
|
sortnr integer\ |
||||||
|
) <@informixnolog/>;\ |
||||||
|
\ |
||||||
|
create index ix_tmp_erg on tmp_erg (sortnr);\ |
||||||
|
\ |
||||||
|
<#if rowdef.is_sicht>0> \ |
||||||
|
<#assign zeilendef=.vars[rowdef.caption].elements/> --ermittelt des SichtObjekts anhand des Feldnames (aus felderinfo)\ |
||||||
|
<#else>\ |
||||||
|
<#assign zeilendef=nichtsicht_ergzeilen/>\ |
||||||
|
</#if>\ |
||||||
|
<#assign sortnr=0/>\ |
||||||
|
<#foreach zeile in zeilendef>\ |
||||||
|
<#if "<<2.Ansicht in Zeilen>>"!=""&&"<<2.Ansicht in Zeilen>>"!="<<2.Ansicht in Zeilen>>">\ |
||||||
|
<#foreach zeile2 in zweiteRow_nichtsicht_ergzeilen>\ |
||||||
|
<#assign sortnr=sortnr+1/>\ |
||||||
|
insert into tmp_erg (ebene,col1,name,col2,sortnr)\ |
||||||
|
values (${zeile.level},'${zeile.key}','${zeile.name}','${zeile2.name}',${sortnr});\ |
||||||
|
<#assign i=0/>\ |
||||||
|
<#foreach spalte in ergspalten>\ |
||||||
|
<#assign i=i+1/>\ |
||||||
|
<@updateval i=i col=spalte row=zeile row2=zeile2 sortnr=sortnr/>\ |
||||||
|
</#foreach>\ |
||||||
|
</#foreach>\ |
||||||
|
<#else>\ |
||||||
|
<#assign sortnr=sortnr+1/>\ |
||||||
|
insert into tmp_erg (ebene,col1,name,sortnr)\ |
||||||
|
values (${zeile.level},'${zeile.key}','${zeile.name}',${sortnr});\ |
||||||
|
<#assign i=0/>\ |
||||||
|
<#foreach spalte in ergspalten>\ |
||||||
|
<#assign i=i+1/>\ |
||||||
|
<@updateval i=i col=spalte row=zeile row2='' sortnr=sortnr/>\ |
||||||
|
</#foreach>\ |
||||||
|
</#if> \ |
||||||
|
</#foreach>\ |
||||||
|
\ |
||||||
|
<#macro updateval i col row row2 sortnr>\ |
||||||
|
update tmp_erg T set c${i}=\ |
||||||
|
<#if kennzahlInRowOrCol()=0>\ |
||||||
|
(select nvl(sum(value),0) from tmp_cache R where 1=1 \ |
||||||
|
<@colrestriction col=col/>\ |
||||||
|
<@rowrestriction row=row row2=row2/>\ |
||||||
|
) \ |
||||||
|
<#else> -- Kennzahl ist in Zeile oder Spalte\ |
||||||
|
(select <@kennzahlSelect row=row col=col/>\ |
||||||
|
from tmp_rohdaten R where 1=1 \ |
||||||
|
<#if rowdef.name="xckennzahl"> <@kennzahlrestrict row=row col=col/> <#else> <@rowrestriction row=row row2=row2 rowattribname=rowdef.name/></#if>\ |
||||||
|
<#if coldef.name="xckennzahl"> <@kennzahlrestrict row=row col=col/> <#else> <@colrestriction col=col colattribname=coldef.name/></#if>\ |
||||||
|
\ |
||||||
|
)\ |
||||||
|
</#if>\ |
||||||
|
where T.sortnr='${sortnr}'\ |
||||||
|
;\ |
||||||
|
</#macro>\ |
||||||
|
\ |
||||||
|
<#macro kennzahlrestrict row col>\ |
||||||
|
<#if coldef.name="xckennzahl">\ |
||||||
|
<#foreach k in kennzahlen>\ |
||||||
|
<#if (col.apnr=k.apnr&&k.restriction?length>0)> and ${k.restriction} </#if>\ |
||||||
|
</#foreach>\ |
||||||
|
</#if>\ |
||||||
|
<#if rowdef.name="xckennzahl">\ |
||||||
|
<#foreach k in kennzahlen>\ |
||||||
|
<#if (row.key=k.apnr&&k.restriction?length>0)> and ${k.restriction} </#if>\ |
||||||
|
</#foreach>\ |
||||||
|
</#if>\ |
||||||
|
</#macro>\ |
||||||
|
\ |
||||||
|
<#macro kennzahlSelect row col>\ |
||||||
|
<#if coldef.name="xckennzahl">\ |
||||||
|
<#foreach k in kennzahlen>\ |
||||||
|
<#if col.apnr=k.apnr> ${k.aggrfunction} </#if>\ |
||||||
|
</#foreach>\ |
||||||
|
</#if>\ |
||||||
|
<#if rowdef.name="xckennzahl">\ |
||||||
|
<#foreach k in kennzahlen>\ |
||||||
|
<#if row.key=k.apnr> ${k.aggrfunction} </#if>\ |
||||||
|
</#foreach>\ |
||||||
|
</#if>\ |
||||||
|
\ |
||||||
|
\ |
||||||
|
</#macro>\ |
||||||
|
\ |
||||||
|
\ |
||||||
|
\ |
||||||
|
<#macro colrestriction col colattribname='R.colattrib'>\ |
||||||
|
<#if coldef.is_sicht==1>\ |
||||||
|
and ${colattribname}::varchar(255) in ${col.subkeys}\ |
||||||
|
<#else>\ |
||||||
|
--TODO Sicht=2\ |
||||||
|
<#if col.apnr!='gesamt'>\ |
||||||
|
and ${colattribname}::varchar(255)='${col.apnr}' \ |
||||||
|
</#if>\ |
||||||
|
</#if>\ |
||||||
|
</#macro>\ |
||||||
|
\ |
||||||
|
<#macro rowrestriction row row2 rowattribname='R.rowattrib' >\ |
||||||
|
<#if rowdef.is_sicht==1>\ |
||||||
|
and ${rowattribname}::varchar(255) in ${row.subkeys}\ |
||||||
|
<#elseif rowdef.is_sicht==2>\ |
||||||
|
and ( ${row.strukturStr?replace('$1',' '+rowattribname+"::varchar(255)")} ) \ |
||||||
|
<#else>\ |
||||||
|
<#if row.key!='gesamt'> and ${rowattribname}::varchar(255)='${row.key}' </#if>\ |
||||||
|
</#if>\ |
||||||
|
<#if row2?is_hash> and R.row2attrib='${row2.key}' </#if> \ |
||||||
|
</#macro>\ |
||||||
|
\ |
||||||
|
drop table if exists tmp_cache;\ |
||||||
|
\ |
||||||
|
drop table if exists tmp_rohdaten;\ |
||||||
|
\ |
||||||
|
-- Kennzahl in Spalten/Zeilen ggfs. null\ |
||||||
|
<#assign i=0/>\ |
||||||
|
<#foreach spalte in ergspalten>\ |
||||||
|
<#assign i=i+1/>\ |
||||||
|
update tmp_erg set c${i}=0 where c${i} is null; \ |
||||||
|
</#foreach>\ |
||||||
|
\ |
||||||
|
<#if "<<Leere Zeilen ausblenden>>"="'ja'">\ |
||||||
|
delete from tmp_erg where\ |
||||||
|
<#assign i=0/>\ |
||||||
|
<#foreach spalte in ergspalten>\ |
||||||
|
<#assign i=i+1/>\ |
||||||
|
c${i}=0 <#if spalte_has_next> and </#if>\ |
||||||
|
</#foreach>;\ |
||||||
|
</#if>\ |
||||||
|
<#if "<<Ansicht in Ergebniszeilen>>"="'institution'">\ |
||||||
|
update tmp_erg set name=replace(name,col1||' - ','');\ |
||||||
|
update tmp_erg set col1=(select max(uniquename) from organigramm where col1=trim(key_apnr))\ |
||||||
|
where substring(col1 from 1 for 1)='_';\ |
||||||
|
--vorher war ggfs _3 zu O005030, auch O005030 in Namen ersetzen\ |
||||||
|
update tmp_erg set name=replace(name,col1||' - ','');\ |
||||||
|
</#if> \ |
||||||
|
\ |
||||||
|
\ |
||||||
|
\ |
||||||
|
\ |
||||||
|
select \ |
||||||
|
<#if rowdef.is_sicht>0>ebene,col1,</#if>\ |
||||||
|
name,\ |
||||||
|
<#if "<<2.Ansicht in Zeilen>>"!=""&&"<<2.Ansicht in Zeilen>>"!="<<2.Ansicht in Zeilen>>">col2,</#if>\ |
||||||
|
<#assign i=0/>\ |
||||||
|
<#foreach spalte in ergspalten>\ |
||||||
|
<#assign i=i+1/>\ |
||||||
|
c${i}::${datatype} <#if spalte_has_next>,</#if>\ |
||||||
|
</#foreach>\ |
||||||
|
\ |
||||||
|
from tmp_erg order by sortnr;^--freemarker Template\ |
||||||
|
XIL List\ |
||||||
|
sizable_columns horizontal_scrolling\ |
||||||
|
drop_and_delete movable_columns\ |
||||||
|
white_space_color=COLOR_WHITE fixed_columns=1\ |
||||||
|
min_heading_height=35\ |
||||||
|
XIL List\ |
||||||
|
sizable_columns horizontal_scrolling\ |
||||||
|
drop_and_delete movable_columns\ |
||||||
|
white_space_color=COLOR_WHITE fixed_columns=1\ |
||||||
|
min_heading_height=35\ |
||||||
|
<#if rowdef.is_sicht==1>\ |
||||||
|
Column CID=0 heading_text="Ebene" center_heading\ |
||||||
|
row_selectable heading_platform readonly\ |
||||||
|
width=10 text_size=8\ |
||||||
|
Column CID=20 heading_text="${.vars["Ansicht in ErgebniszeilenObject"].selectedItems[0].name}Nr" center_heading\ |
||||||
|
row_selectable heading_platform readonly\ |
||||||
|
width=10 text_size=10\ |
||||||
|
</#if>\ |
||||||
|
Column CID=20 heading_text="${.vars["Ansicht in ErgebniszeilenObject"].selectedItems[0].name}" center_heading\ |
||||||
|
row_selectable heading_platform readonly\ |
||||||
|
width=10 text_size=10\ |
||||||
|
<#if "<<2.Ansicht in Zeilen>>"!=""&&"<<2.Ansicht in Zeilen>>"!="<<2.Ansicht in Zeilen>>">\ |
||||||
|
Column CID=20 heading_text="${.vars["2.Ansicht in ZeilenObject"].selectedItems[0].name}" center_heading\ |
||||||
|
row_selectable heading_platform readonly\ |
||||||
|
width=10 text_size=10\ |
||||||
|
</#if>\ |
||||||
|
<#if coldef.is_sicht>0>\ |
||||||
|
<#assign ergspalten=.vars[coldef.caption].elements/>\ |
||||||
|
<#else>\ |
||||||
|
<#assign ergspalten=nichtsicht_ergspalten/>\ |
||||||
|
</#if>\ |
||||||
|
<#foreach spalte in ergspalten>\ |
||||||
|
Column CID=1 heading_text="${spalte.name}" center_heading\ |
||||||
|
row_selectable heading_platform readonly\ |
||||||
|
width=12\ |
||||||
|
</#foreach>\ |
||||||
|
\ |
||||||
|
\ |
||||||
|
@@@^Altersgruppe^Anzahl^Dynamische Darstellung von Studierendenzahlen^drop table tmp_erg;^^3^700^360^0^1^^ |
@ -0,0 +1 @@ |
|||||||
|
16^21000^ |
@ -0,0 +1,11 @@ |
|||||||
|
update xcube set restriction='<<Köpfe oder Fälle ?>> |
||||||
|
and sem_rueck_beur_ein in (<<Semester>>) |
||||||
|
/* and <<Hörerstatus>> */ |
||||||
|
/* AND fach_sem_zahl <= <<bis Fachsemester>> */ |
||||||
|
/* and stichtag = <<Stichtag>> */ |
||||||
|
/* and kz_rueck_beur_ein in(<<Status>>) */ |
||||||
|
/* and geschlecht=<<Geschlecht>> */ |
||||||
|
/* and ${<<Filter Studierende>>} */ |
||||||
|
/* and L.abschluss in (<<Abschluss>>) */ |
||||||
|
/* and '' || ca12_staat in <@printkeys Staatsangehörigkeit.allNeededKeysList/> --<<Staatsangehörigkeit>> */ |
||||||
|
' where maskeninfo_id=21000; |
@ -0,0 +1,3 @@ |
|||||||
|
#!/bin/bash |
||||||
|
module_drop.x xcube $XCUBE_PFAD |
||||||
|
|
@ -0,0 +1,4 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
module_install.x xcube $XCUBE_PFAD |
||||||
|
|
@ -0,0 +1,9 @@ |
|||||||
|
#Beispielumgebung für das Xcube-Modul: |
||||||
|
|
||||||
|
#SUPERX_MODULE=$SUPERX_DIR/db/module |
||||||
|
#SUPERX_ROHDATEN=rohdaten |
||||||
|
|
||||||
|
XCUBE_PFAD=$SUPERX_MODULE/xcube; export XCUBE_PFAD |
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,10 +0,0 @@ |
|||||||
99990031^Ansicht in Ergebniszeilen^200^0^0^150^200^1^char^30^1^1^<<SQL>> select F.name,F.caption from sx_fields F,xcube_dimconfig C where F.table_name=C.table_name and F.name=C.name and C.table_name='kenn_vtbu_cube' and is_rowdim=1 order by 1^^<<SQL>> select F.name,F.caption from sx_fields F,xcube_dimconfig C where F.table_name=C.table_name and F.name=C.name and C.table_name='kenn_vtbu_cube' and is_rowdim=1 and is_rowdefault=1^ |
|
||||||
99990032^Haushaltsjahr^7^0^0^100^50^1^integer^30^1^1^<<SQL>> SELECT distinct ord,name FROM aggregierung where kategorie='KENN-Jahr' order by 1;^^<<SQL>> select year(today()) -1 from xdummy;^ |
|
||||||
99990033^Zeitraum^10^200^-1^100^100^1^sql^30^0^1^<<SQL>> select apnr,druck from kenn_quartale order by 1;^^^ |
|
||||||
99990034^Ansicht in Ergebnisspalten^300^0^0^150^200^1^char^30^1^1^<<SQL>> select F.name,F.caption from sx_fields F,xcube_dimconfig C where F.table_name=C.table_name and F.name=C.name and C.table_name='kenn_vtbu_cube' and is_coldim=1 order by 1;^^<<SQL>> select F.name,F.caption from sx_fields F,xcube_dimconfig C where F.table_name=C.table_name and F.name=C.name and C.table_name='kenn_vtbu_cube' and is_coldim=1 and is_coldefault=1^ |
|
||||||
99990035^Hochschule^0^0^0^100^200^1^char^30^1^12^<<SQL>> select tid, type, name , sortnr from sichten where art in ('KENN-Kostenstellen-Sicht', 'KENN-Hochschulen-Sicht') order by sortnr,name;^^^ |
|
||||||
99990036^Lehreinheit anzeigen^90^200^-1^100^100^1^char^30^1^1^<<SQL>> select 'j','Ja' from xdummy union select 'n','Nein' from xdummy;^hidden^<<SQL>> select 'j','Ja' from xdummy^ |
|
||||||
99990037^Kostenträger^1^0^0^100^200^1^char^30^0^12^<<SQL>> select tid,type,name from sichten where art='KENN-Kostenträger-Sicht' and name_intern like '%lehre%' and aktiv=1 order by type,name^^^ |
|
||||||
99990038^Filter auf Ebene^80^0^0^100^20^1^integer^30^0^0^^hidden^^ |
|
||||||
99990039^Primär/Sekundär^2^200^-1^100^200^1^char^30^0^1^<<SQL>> select key,name from joolap_blueprints where blueprint='bluep_kenn_pr_sek' order by 2^ ^ ^ |
|
||||||
99990040^Kostenartenblock^100^0^0^100^200^1^char^30^0^1^<<SQL>>select art2,caption from sx_repository where aktiv=1 and art='KENN_KOA_BLOCK' and art2 not like '_ERL%' order by 2^hidden^^ |
|
@ -1 +0,0 @@ |
|||||||
99990030^109^ |
|
@ -1,10 +0,0 @@ |
|||||||
99990030^99990031^ |
|
||||||
99990030^99990032^ |
|
||||||
99990030^99990033^ |
|
||||||
99990030^99990034^ |
|
||||||
99990030^99990035^ |
|
||||||
99990030^99990036^ |
|
||||||
99990030^99990037^ |
|
||||||
99990030^99990038^ |
|
||||||
99990030^99990039^ |
|
||||||
99990030^99990040^ |
|
@ -1,188 +0,0 @@ |
|||||||
99990030^xCube Sekundärkosten^-- Personal nach Finanzierung (der amtl. Statistik)\ |
|
||||||
--freemarker template\ |
|
||||||
<sqlvars>\ |
|
||||||
<sqlvar name="tablename">select 'kenn_vtbu_cube' from xdummy</sqlvar>\ |
|
||||||
<sqlvar name="coldef" type="hash"><![CDATA[select F.name,F.caption,F.foreignkey_tab,F.foreignkey_col,\ |
|
||||||
F.foreignkey_cap,nvl(F.foreignkey_cond,''::varchar(1)) as foreignkey_cond,\ |
|
||||||
nvl(C.specific_restriction,''::varchar(1)) as specific_restriction,\ |
|
||||||
C.sortfield\ |
|
||||||
from sx_fields F,xcube_dimconfig C where C.table_name=F.table_name and F.name=C.name \ |
|
||||||
and C.maskeninfo_id=${Maskennummer} and F.table_name='${tablename}' \ |
|
||||||
and F.name=<<Ansicht in Ergebnisspalten>>]]>\ |
|
||||||
</sqlvar>\ |
|
||||||
<sqlvar name="ergspalten" type='hashsequence'><![CDATA[\ |
|
||||||
select distinct ${coldef.foreignkey_col} as apnr,${coldef.foreignkey_cap} as name,\ |
|
||||||
1::smallint as detailgesamtsort,${coldef.sortfield}\ |
|
||||||
from ${coldef.foreignkey_tab} where \ |
|
||||||
1=1 \ |
|
||||||
<#if coldef.foreignkey_cond!=''> and ${coldef.foreignkey_cond} </#if>\ |
|
||||||
${coldef.specific_restriction} \ |
|
||||||
--ausblenden von Spalten, die gar nicht in konkretem Teilergebnis vorkommen\ |
|
||||||
--and ${coldef.foreignkey_col} in (select distinct ${coldef.name} from ${tablename} where\ |
|
||||||
--Hier allgemeine Einschränkungen\ |
|
||||||
--jahr=<<Jahr>> \ |
|
||||||
--)\ |
|
||||||
union\ |
|
||||||
select 'gesamt','Gesamt',2::smallint as detailgesamtsort,null as ${coldef.sortfield} from xdummy\ |
|
||||||
order by detailgesamtsort,${coldef.sortfield},name; \ |
|
||||||
]]>\ |
|
||||||
</sqlvar>\ |
|
||||||
\ |
|
||||||
\ |
|
||||||
\ |
|
||||||
<sqlvar name="rowdef" type="hash"><![CDATA[select F.name,F.caption,C.is_sicht,foreignkey_tab,foreignkey_col,foreignkey_cap,\ |
|
||||||
nvl(F.foreignkey_cond,''::varchar(1)) as foreignkey_cond,\ |
|
||||||
nvl(C.specific_restriction,''::varchar(1)) as specific_restriction\ |
|
||||||
from sx_fields F,xcube_dimconfig C where F.table_name=C.table_name and F.name=C.name \ |
|
||||||
and F.table_name='${tablename}' and F.name=<<Ansicht in Ergebniszeilen>>]]>\ |
|
||||||
</sqlvar>\ |
|
||||||
--nur bei wenn Ergzeilen_def nicht vom Typ Sicht relevant\ |
|
||||||
<sqlvar name="nichtsicht_ergzeilen" type='hashsequence'><![CDATA[\ |
|
||||||
<#if rowdef.is_sicht=0>\ |
|
||||||
select 1::smallint as level, ${rowdef.foreignkey_col}::varchar(255) as key,--hier wird zur Vereinheitlichung mit Sichten Bezeichung "key" für eigentlichen Schluessel benoetigt\ |
|
||||||
${rowdef.foreignkey_cap} as name from ${rowdef.foreignkey_tab}\ |
|
||||||
where 1=1\ |
|
||||||
<#if rowdef.foreignkey_cond!=''> and ${rowdef.foreignkey_cond} </#if>\ |
|
||||||
${rowdef.specific_restriction} \ |
|
||||||
union\ |
|
||||||
select 2,'gesamt','Gesamt' from xdummy\ |
|
||||||
order by level,name; \ |
|
||||||
<#else>\ |
|
||||||
select 'nicht relevant' from xdummy;</#if>\ |
|
||||||
]]>\ |
|
||||||
</sqlvar>\ |
|
||||||
</sqlvars>\ |
|
||||||
\ |
|
||||||
<#assign aggrfunction="sum(betrag)"/>\ |
|
||||||
\ |
|
||||||
\ |
|
||||||
\ |
|
||||||
create temp table tmp_rohdaten (\ |
|
||||||
colattrib varchar(255), <@addcomment comment=coldef.caption/>\ |
|
||||||
rowattrib varchar(255), <@addcomment comment=rowdef.caption/>\ |
|
||||||
value decimal(17,5));\ |
|
||||||
insert into tmp_rohdaten (colattrib,rowattrib,value)\ |
|
||||||
select ${coldef.name}::varchar(255), \ |
|
||||||
${rowdef.name}::varchar(255), ${aggrfunction}\ |
|
||||||
from \ |
|
||||||
kenn_vtbu_cube V\ |
|
||||||
where \ |
|
||||||
<<Haushaltsjahr>> = V.jahr \ |
|
||||||
/* and V.projnr in <@printkeys Kostenträger.allNeededKeys/> --<<Kostenträger>> */\ |
|
||||||
/* and V.prim_sek =<<Primär/Sekundär>> */\ |
|
||||||
and V.hs_nr::char(10) in <@printkeys .vars["Hochschule"].allNeededKeys />\ |
|
||||||
\ |
|
||||||
group by 1,2;\ |
|
||||||
create index ix_tmp_roh1 on tmp_rohdaten (colattrib,rowattrib);\ |
|
||||||
\ |
|
||||||
create temp table tmp_erg (\ |
|
||||||
ebene integer,\ |
|
||||||
col1 varchar(255),\ |
|
||||||
name varchar(255),\ |
|
||||||
<#assign i=0/>\ |
|
||||||
<#foreach spalte in ergspalten>\ |
|
||||||
<#assign i=i+1/>\ |
|
||||||
c${i} decimal(17,5) default 0, <@addcomment comment=spalte.name/>\ |
|
||||||
\ |
|
||||||
</#foreach>\ |
|
||||||
sortnr integer\ |
|
||||||
) <@informixnolog/>;\ |
|
||||||
<#assign sortnr=0/>\ |
|
||||||
\ |
|
||||||
\ |
|
||||||
<#if rowdef.is_sicht==1> \ |
|
||||||
<#assign zeilendef=.vars[rowdef.caption].elements/> --ermittel des SichtObjekts anhand des Feldnames (aus felderinfo)\ |
|
||||||
<#else>\ |
|
||||||
<#assign zeilendef=nichtsicht_ergzeilen/>\ |
|
||||||
</#if>\ |
|
||||||
\ |
|
||||||
<#foreach zeile in zeilendef>\ |
|
||||||
<#assign sortnr=sortnr+1/>\ |
|
||||||
insert into tmp_erg (ebene,col1,name,sortnr)\ |
|
||||||
values (${zeile.level},'${zeile.key}','${zeile.name}',${sortnr});\ |
|
||||||
<#assign i=0/>\ |
|
||||||
<#foreach spalte in ergspalten>\ |
|
||||||
<#assign i=i+1/>\ |
|
||||||
<@updateval i=i col=spalte row=zeile art='gesamt'/>\ |
|
||||||
\ |
|
||||||
</#foreach>\ |
|
||||||
</#foreach>\ |
|
||||||
\ |
|
||||||
<#macro updateval i col row art>\ |
|
||||||
update tmp_erg T set c${i}=\ |
|
||||||
(select nvl(sum(value),0) from tmp_rohdaten R where 1=1 \ |
|
||||||
<#if col.apnr!='gesamt'>\ |
|
||||||
and R.colattrib='${col.apnr}' \ |
|
||||||
</#if>\ |
|
||||||
\ |
|
||||||
<#if rowdef.is_sicht==1>\ |
|
||||||
and R.rowattrib in ${row.subkeys}\ |
|
||||||
<#else>\ |
|
||||||
<#if row.key!='gesamt'> and R.rowattrib='${row.key}' </#if>\ |
|
||||||
</#if>\ |
|
||||||
) where T.col1='${row.key}'\ |
|
||||||
;\ |
|
||||||
</#macro>\ |
|
||||||
\ |
|
||||||
drop table tmp_rohdaten;\ |
|
||||||
\ |
|
||||||
\ |
|
||||||
\ |
|
||||||
--Leerzeilen entfernen\ |
|
||||||
delete from tmp_erg where\ |
|
||||||
<#assign i=0/>\ |
|
||||||
<#foreach spalte in ergspalten>\ |
|
||||||
<#assign i=i+1/>\ |
|
||||||
c${i}=0 <#if spalte_has_next> and </#if>\ |
|
||||||
</#foreach>;\ |
|
||||||
\ |
|
||||||
<#if "<<Ansicht in Ergebniszeilen>>"="'institution'">\ |
|
||||||
update tmp_erg set name=replace(name,col1||' - ','');\ |
|
||||||
update tmp_erg set col1=(select max(uniquename) from organigramm where col1=trim(key_apnr))\ |
|
||||||
where substring(col1 from 1 for 1)='_';\ |
|
||||||
--vorher war ggfs _3 zu O005030, auch O005030 in Namen ersetzen\ |
|
||||||
update tmp_erg set name=replace(name,col1||' - ','');\ |
|
||||||
</#if> \ |
|
||||||
\ |
|
||||||
\ |
|
||||||
\ |
|
||||||
\ |
|
||||||
select \ |
|
||||||
<#if rowdef.is_sicht==1>ebene,col1,</#if>\ |
|
||||||
name,\ |
|
||||||
<#assign i=0/>\ |
|
||||||
<#foreach spalte in ergspalten>\ |
|
||||||
<#assign i=i+1/>\ |
|
||||||
c${i}::integer <#if spalte_has_next>,</#if>\ |
|
||||||
</#foreach>\ |
|
||||||
\ |
|
||||||
from tmp_erg order by sortnr;^--freemarker Template\ |
|
||||||
XIL List\ |
|
||||||
sizable_columns horizontal_scrolling\ |
|
||||||
drop_and_delete movable_columns\ |
|
||||||
white_space_color=COLOR_WHITE fixed_columns=1\ |
|
||||||
min_heading_height=35\ |
|
||||||
XIL List\ |
|
||||||
sizable_columns horizontal_scrolling\ |
|
||||||
drop_and_delete movable_columns\ |
|
||||||
white_space_color=COLOR_WHITE fixed_columns=1\ |
|
||||||
min_heading_height=35\ |
|
||||||
<#if rowdef.is_sicht==1>\ |
|
||||||
Column CID=0 heading_text="Ebene" center_heading\ |
|
||||||
row_selectable heading_platform readonly\ |
|
||||||
width=10 text_size=8\ |
|
||||||
Column CID=20 heading_text="${.vars["Ansicht in ErgebniszeilenObject"].selectedItems[0].name}Nr" center_heading\ |
|
||||||
row_selectable heading_platform readonly\ |
|
||||||
width=10 text_size=10\ |
|
||||||
</#if>\ |
|
||||||
Column CID=20 heading_text="${.vars["Ansicht in ErgebniszeilenObject"].selectedItems[0].name}" center_heading\ |
|
||||||
row_selectable heading_platform readonly\ |
|
||||||
width=10 text_size=10\ |
|
||||||
<#foreach spalte in ergspalten>\ |
|
||||||
Column CID=1 heading_text="${spalte.name}" center_heading\ |
|
||||||
row_selectable heading_platform readonly\ |
|
||||||
width=12\ |
|
||||||
</#foreach>\ |
|
||||||
\ |
|
||||||
\ |
|
||||||
@@@^^^Kostenwürfel nach Produktbereich^drop table tmp_erg;^^2^600^400^0^1^<<SQL>> select 'Letzte Lieferung: ' || date_str(max(datum)) from kenn_lieferung where (1 =0 /* or hs_nr::char(10) in (<<Hochschule>>) */ /* or hs_nr::char(10) in (select key_apnr from organigramm where parent in (<<Hochschule>>)) */ /* or <<Hochschule>>='0' */ ) and kennzahl ='KOTN'^ |
|
Loading…
Reference in new issue