Browse Source

Weiterentwicklung xcube, Studierendenwuerfel

xcube0.1
Meikel Bisping 2 years ago
parent
commit
2c865a176e
  1. 65
      src-modules/module/xcube/conf/xcube.xml
  2. 330
      src-modules/module/xcube/masken/21000.sql
  3. 44
      src-modules/module/xcube/masken/21000_felderinfo.unl
  4. 1
      src-modules/module/xcube/masken/21000_maske_system_bez.unl
  5. 23
      src-modules/module/xcube/masken/21000_masken_felder_bez.unl
  6. 369
      src-modules/module/xcube/masken/21000_maskeninfo.unl
  7. 1
      src-modules/module/xcube/masken/21000_sachgeb_maske_bez.unl
  8. 166
      src-modules/module/xcube/masken/999990060.sql
  9. 6
      src-modules/module/xcube/masken/999990060_felderinfo.unl
  10. 152
      src-modules/module/xcube/masken/999990060_maskeninfo.unl
  11. 8
      src-modules/module/xcube/schluesseltabellen/xcube_dims_install.sql
  12. 129
      src-modules/module/xcube/schluesseltabellen/xcube_install.sql
  13. 11
      src-modules/module/xcube/schluesseltabellen/xcube_install_restrictions.sql
  14. 3
      src-modules/module/xcube/xcube_modul_entfernen.x
  15. 4
      src-modules/module/xcube/xcube_modul_erzeugen.x
  16. 9
      superx/WEB-INF/conf/edustore/db/bin/SQL_ENV_xcube.sam
  17. 10
      superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_felderinfo.unl
  18. 1
      superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_maske_system_bez.unl
  19. 10
      superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_masken_felder_bez.unl
  20. 188
      superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_maskeninfo.unl
  21. 1
      superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_sachgeb_maske_bez.unl

65
src-modules/module/xcube/conf/xcube.xml

@ -16,12 +16,12 @@ @@ -16,12 +16,12 @@
<table name="xcube_kennzahl">
<columns>
<column name="tid" type ="SERIAL" size ="" default ="" notnull ="true" isKey="true"/>
<column name="xcube" type ="VARCHAR" size ="255" default ="" notnull ="false" />
<column name="maskeninfo_id" type ="INTEGER" size ="10" default ="" notnull ="true" />
<column name="apnr" type ="VARCHAR" size ="255" default ="" notnull ="false" />
<column name="name" type ="VARCHAR" size ="255" default ="" notnull ="false" />
<column name="aggrfunction" type ="TEXT" size ="" default ="" notnull ="false" />
<column name="apnr" type ="VARCHAR" size ="255" default ="" notnull ="true" />
<column name="name" type ="VARCHAR" size ="255" default ="" notnull ="true" />
<column name="aggrfunction" type ="TEXT" size ="" default ="" notnull ="true" />
<column name="restriction" type ="TEXT" size ="" default ="" notnull ="false" />
<column name="datatype" type ="VARCHAR" size ="255" default ="" notnull ="false" />
<column name="is_default" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="sortnr" type ="SMALLINT" size ="5" default ="" notnull ="false" />
</columns>
@ -29,23 +29,36 @@ @@ -29,23 +29,36 @@
<table name="xcube_dimconfig">
<columns>
<column name="tid" type ="SERIAL" size ="" default ="" notnull ="true" isKey="true"/>
<column name="xcube" type ="VARCHAR" size ="255" default ="" notnull ="false" />
<column name="maskeninfo_id" type ="INTEGER" size ="10" default ="" notnull ="true" />
<column name="table_name" type ="VARCHAR" size ="255" default ="" notnull ="false" />
<column name="name" type ="VARCHAR" size ="255" default ="" notnull ="false" />
<column name="name" type ="VARCHAR" size ="255" default ="" notnull ="true" />
<column name="caption" type ="VARCHAR" size ="255" default ="" notnull ="true" />
<!-- <column name="generic_dimension" type ="VARCHAR" size ="255" default ="" notnull ="false" /> -->
<column name="is_sicht" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="is_rowdim" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="is_secondrowdim" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="is_rowdefault" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="is_coldim" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="is_secondcoldim" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="is_coldefault" type ="SMALLINT" size ="5" default ="" notnull ="false" />
<column name="is_sicht" type ="SMALLINT" size ="5" default ="0" notnull ="true" />
<column name="calc_gesamt" type ="SMALLINT" size ="5" default ="1" notnull ="true" />
<column name="is_rowdim" type ="SMALLINT" size ="5" default ="1" notnull ="true" />
<column name="is_secondrowdim" type ="SMALLINT" size ="5" default ="1" notnull ="true" />
<column name="is_rowdefault" type ="SMALLINT" size ="5" default ="0" notnull ="true" />
<column name="is_coldim" type ="SMALLINT" size ="5" default ="1" notnull ="true" />
<column name="is_secondcoldim" type ="SMALLINT" size ="5" default ="1" notnull ="true" />
<column name="is_coldefault" type ="SMALLINT" size ="5" default ="0" notnull ="true" />
<column name="attrib_nachbearbeitung" type ="TEXT" size ="" default ="" notnull ="false" description="Nachbearbeiten eines Attributs"/>
<!-- <column name="specific_restriction" type ="VARCHAR" size ="255" default ="" notnull ="false" />
<column name="specific_2ndcol_restriction" type ="VARCHAR" size ="255" default ="" notnull ="false" />-->
<column name="is_virtual" type ="SMALLINT" size ="" default ="0" notnull ="true" />
<column name="vcsql" type ="TEXT" size ="" default ="" notnull ="false" description="SQL zum Setzen der virtuellen Spalte"/>
<column name="foreignkey_tab" type="VARCHAR" size="255" default="" notnull="false" description="Fremdschlüssel Tabelle" />
<column name="foreignkey_col" type="VARCHAR" size="255" default="" notnull="false" description="Fremdschlüssel Feld (Schlüssel)" />
<column name="foreignkey_cap" type="VARCHAR" size="255" default="" notnull="false" description="Fremdschlüssel Feld (Bezeichnung)" />
<column name="foreignkey_cond" type="VARCHAR" size="255" default="" notnull="false" description="Zusätzliche Bedingung für Fremdschlüssel" />
<column name="foreignkey_func" type="VARCHAR" size="255" default="" notnull="false" description="Zusätzliche Funktion für Fremdschlüssel" />
<column name="sortfield" type ="VARCHAR" size ="255" default ="" notnull ="false" />
</columns>
<indexes></indexes>
<indexes>
<index name="ix_xc_dc">
<index-column name="maskeninfo_id" />
</index>
</indexes>
<primaryKeys><rs>
</rs></primaryKeys>
<foreignKeys></foreignKeys>
@ -53,7 +66,7 @@ @@ -53,7 +66,7 @@
<privileges><rs>
</rs></privileges>
</table>
<table name="xcube_dims">
<columns>
<column name="id" type ="VARCHAR" size ="255" default ="" notnull ="false" />
@ -64,7 +77,11 @@ @@ -64,7 +77,11 @@
<column name="strukturint" type ="INTEGER" size ="" default ="" notnull ="false" />
<column name="sort1" type ="INTEGER" size ="10" default ="" notnull ="false" />
</columns>
<indexes></indexes>
<indexes>
<index name="ix_xc_dim11">
<index-column name="id" />
</index>
</indexes>
<primaryKeys><rs>
</rs></primaryKeys>
<foreignKeys></foreignKeys>
@ -82,13 +99,23 @@ @@ -82,13 +99,23 @@
</views>
<themen>
<thema name="xCubes" parent="Abfragen"></thema>
</themen>
<masken>
<maske tid="21000" name="Studierendenwürfel" thema="xCubes">
<src>
<path>$XCUBE_PFAD/masken</path>
<dbsystem>POSTGRES</dbsystem>
</src>
</maske>
</masken>
</database>
<install>
<install-step>
<action error="cont">
<nativeaction sql="" scriptfile="$XCUBE_PFAD/schluesseltabellen/xcube_install.sql" database=""/>
<nativeaction sql="" scriptfile="$XCUBE_PFAD/schluesseltabellen/xcube_install_restrictions.sql" database=""/>
<nativeaction sql="" scriptfile="$XCUBE_PFAD/schluesseltabellen/xcube_dims_install.sql" database=""/>
</action>
</install-step>
</install>
@ -96,6 +123,10 @@ @@ -96,6 +123,10 @@
<upgrade>
<upgrade-step>
<action error="cont">
<nativeaction sql="" scriptfile="$XCUBE_PFAD/schluesseltabellen/xcube_install.sql" database=""/>
<nativeaction sql="" scriptfile="$XCUBE_PFAD/schluesseltabellen/xcube_install_restrictions.sql" database=""/>
<nativeaction sql="" scriptfile="$XCUBE_PFAD/schluesseltabellen/xcube_dims_install.sql" database=""/>
</action>
</upgrade-step>
</upgrade>

330
src-modules/module/xcube/masken/21000.sql

@ -0,0 +1,330 @@ @@ -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&gt;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&gt;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&gt;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;

44
src-modules/module/xcube/masken/21000_felderinfo.unl

@ -0,0 +1,44 @@ @@ -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^

1
src-modules/module/xcube/masken/21000_maske_system_bez.unl

@ -0,0 +1 @@ @@ -0,0 +1 @@
21000^7^

23
src-modules/module/xcube/masken/21000_masken_felder_bez.unl

@ -0,0 +1,23 @@ @@ -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^

369
src-modules/module/xcube/masken/21000_maskeninfo.unl

@ -0,0 +1,369 @@ @@ -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&gt;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&gt;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&gt;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&gt;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^^

1
src-modules/module/xcube/masken/21000_sachgeb_maske_bez.unl

@ -0,0 +1 @@ @@ -0,0 +1 @@
16^21000^

166
src-modules/module/xcube/masken/999990060.sql

@ -4,14 +4,16 @@ @@ -4,14 +4,16 @@
<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>
--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 F.name,F.caption,F.foreignkey_tab,F.foreignkey_col,
F.foreignkey_cap,nvl(F.foreignkey_cond,''::varchar(1)) as foreignkey_cond,
<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,
C.sortfield,C.is_sicht
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.name=<<Ansicht in Ergebnisspalten>>]]>
sortfield,is_sicht,calc_gesamt,is_virtual,vcsql
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>
@ -27,8 +29,10 @@ and ${coldef.foreignkey_col}::varchar(255) in (select distinct ${coldef.name}::v @@ -27,8 +29,10 @@ and ${coldef.foreignkey_col}::varchar(255) in (select distinct ${coldef.name}::v
${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;
@ -38,12 +42,11 @@ select 'Sichtspalten aktiv' from xdummy; @@ -38,12 +42,11 @@ select 'Sichtspalten aktiv' from xdummy;
<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,
<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,
C.sortfield
from sx_fields F,xcube_dimconfig C where F.table_name=C.table_name and F.name=C.name
and C.maskeninfo_id=${Maskennummer} and F.name=<<Ansicht in Ergebniszeilen>>]]>
sortfield,is_virtual,vcsql
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[
@ -53,8 +56,10 @@ ${rowdef.foreignkey_cap} as name,${rowdef.sortfield} as tmp_sortfield from ${row @@ -53,8 +56,10 @@ ${rowdef.foreignkey_cap} as name,${rowdef.sortfield} as tmp_sortfield from ${row
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>
@ -62,13 +67,12 @@ select 'nicht relevant' from xdummy;</#if> @@ -62,13 +67,12 @@ select 'nicht relevant' from xdummy;</#if>
</sqlvar>
<sqlvar name="zweiteRowDef" type="hash"><![CDATA[
<#if "<<2.Ansicht in Zeilen>>"!="">
select F.name,F.caption,C.is_sicht,foreignkey_tab,foreignkey_col,foreignkey_cap,
nvl(F.foreignkey_cond,''::varchar(1)) as foreignkey_cond,
<#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 sx_fields F,xcube_dimconfig C where F.table_name=C.table_name and F.name=C.name
and C.maskeninfo_id=${Maskennummer} and F.name=<<2.Ansicht in Zeilen>>
from xcube_dimconfig where maskeninfo_id=${Maskennummer} and name=<<2.Ansicht in Zeilen>>
<#else>
select 'keine zweite RowDef' from xdummy;
</#if>
@ -76,14 +80,16 @@ select 'keine zweite RowDef' from xdummy; @@ -76,14 +80,16 @@ select 'keine zweite RowDef' from xdummy;
</sqlvar>
--nur bei wenn Ergzeilen_def nicht vom Typ Sicht relevant
<sqlvar name="zweiteRow_nichtsicht_ergzeilen" type='hashsequence'><![CDATA[
<#if "<<2.Ansicht in Zeilen>>"!=""&&zweiteRowDef.is_sicht=0>
<#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>
@ -93,27 +99,52 @@ select 'nicht relevant' from xdummy;</#if> @@ -93,27 +99,52 @@ select 'nicht relevant' from xdummy;</#if>
</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>
create temp table tmp_rohdaten (
<#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_rohdaten (colattrib,rowattrib,<#if "<<2.Ansicht in Zeilen>>"!="">row2attrib, </#if> value)
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>>"!="">${zweiteRowDef.name}::varchar(255),</#if>
<#if "<<2.Ansicht in Zeilen>>"!=""&&"<<2.Ansicht in Zeilen>>"!="<<2.Ansicht in Zeilen>>">${zweiteRowDef.name}::varchar(255),</#if>
${aggrfunction}
from
${table_name}
where
<#if hasVirtualColumns()=0>
from ${table_name} where
${restriction}
<#if (aggrfunction_restriction?length>0)> and ${aggrfunction_restriction} </#if>
group by 1,2 <#if "<<2.Ansicht in Zeilen>>"!="">,${zweiteRowDef.name}</#if> ;
create index ix_tmp_roh1 on tmp_rohdaten (colattrib,rowattrib,row2attrib);
<#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>
<#if coldef.is_sicht&gt;0>
<#assign ergspalten=.vars[coldef.caption].elements/>
@ -124,7 +155,7 @@ create temp table tmp_erg ( @@ -124,7 +155,7 @@ create temp table tmp_erg (
ebene integer,
col1 varchar(255),
name varchar(255),
<#if "<<2.Ansicht in Zeilen>>"!="">col2 varchar(255),</#if>
<#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/>
@ -143,7 +174,7 @@ create index ix_tmp_erg on tmp_erg (sortnr); @@ -143,7 +174,7 @@ create index ix_tmp_erg on tmp_erg (sortnr);
</#if>
<#assign sortnr=0/>
<#foreach zeile in zeilendef>
<#if "<<2.Ansicht in Zeilen>>"!="">
<#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)
@ -168,33 +199,86 @@ create index ix_tmp_erg on tmp_erg (sortnr); @@ -168,33 +199,86 @@ create index ix_tmp_erg on tmp_erg (sortnr);
<#macro updateval i col row row2 sortnr>
update tmp_erg T set c${i}=
(select nvl(sum(value),0) from tmp_rohdaten R where 1=1
<#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>
<#if coldef.is_sicht==1>
and R.colattrib in ${col.subkeys}
<#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 R.colattrib='${col.apnr}'
and ${colattribname}::varchar(255)='${col.apnr}'
</#if>
</#if>
<#if rowdef.is_sicht==1>
and R.rowattrib in ${row.subkeys}
</#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',' R.rowattrib')} )
and ( ${row.strukturStr?replace('$1',' '+rowattribname+"::varchar(255)")} )
<#else>
<#if row.key!='gesamt'> and R.rowattrib='${row.key}' </#if>
<#if row.key!='gesamt'> and ${rowattribname}::varchar(255)='${row.key}' </#if>
</#if>
<#if row2?is_hash> and R.row2attrib='${row2.key}' </#if>
) where T.sortnr='${sortnr}'
;
</#macro>
drop table tmp_rohdaten;
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/>
@ -217,7 +301,7 @@ update tmp_erg set name=replace(name,col1||' - ',''); @@ -217,7 +301,7 @@ update tmp_erg set name=replace(name,col1||' - ','');
select
<#if rowdef.is_sicht&gt;0>ebene,col1,</#if>
name,
<#if "<<2.Ansicht in Zeilen>>"!="">col2,</#if>
<#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/>

6
src-modules/module/xcube/masken/999990060_felderinfo.unl

@ -33,12 +33,12 @@ and trim(F.table_name) || '.' || F.name in (select trim(tablename)||'.'||trim(fi @@ -33,12 +33,12 @@ and trim(F.table_name) || '.' || F.name in (select trim(tablename)||'.'||trim(fi
order by 2;^^^
999990073^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;^^^
999990074^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^
999990075^Ansicht in Ergebniszeilen^121^0^0^100^200^1^char^200^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 is_rowdim=1 and C.maskeninfo_id=${Maskennummer} 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 is_rowdefault=1 and C.maskeninfo_id=${Maskennummer} order by 1^
999990076^Ansicht in Ergebnisspalten^2001^0^0^100^150^1^char^200^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 is_coldim=1 and C.maskeninfo_id=${Maskennummer} 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 is_coldefault=1 and C.maskeninfo_id=${Maskennummer} order by 1^
999990075^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 F.name,F.caption from sx_fields F,xcube_dimconfig C where F.table_name=C.table_name and F.name=C.name and is_rowdefault=1 and C.maskeninfo_id=${Maskennummer} order by 1^
999990076^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 F.name,F.caption from sx_fields F,xcube_dimconfig C where F.table_name=C.table_name and F.name=C.name and is_coldefault=1 and C.maskeninfo_id=${Maskennummer} order by 1^
999990077^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');^^^
999990078^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');^^^
999990079^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^
999990080^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^
999990081^Abschluss^7^0^0^140^170^5^char^30^0^1^<<SQL>> select abint,dtxt from k_abint order by 2;^^^
999990082^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;^{InputCheck:matrikelnummern}^<<SQL>> select tid,name from xcube_kennzahl where maskeninfo_id=${Maskennummer} and is_default=1^
999990083^2.Ansicht in Zeilen^125^0^0^100^100^1^char^50^0^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 is_secondrowdim=1 and C.maskeninfo_id=${Maskennummer} order by 1^^1^
999990083^2.Ansicht in Zeilen^125^0^0^100^100^1^char^50^0^1^<<SQL>> select name,caption from xcube_dimconfig where maskeninfo_id=${Maskennummer} and is_secondrowdim=1 order by 1^^1^

152
src-modules/module/xcube/masken/999990060_maskeninfo.unl

@ -4,14 +4,16 @@ @@ -4,14 +4,16 @@
<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>\
--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 F.name,F.caption,F.foreignkey_tab,F.foreignkey_col,\
F.foreignkey_cap,nvl(F.foreignkey_cond,''::varchar(1)) as foreignkey_cond,\
<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,\
C.sortfield,C.is_sicht\
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.name=<<Ansicht in Ergebnisspalten>>]]>\
sortfield,is_sicht,calc_gesamt,is_virtual,vcsql\
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>\
@ -27,8 +29,10 @@ and ${coldef.foreignkey_col}::varchar(255) in (select distinct ${coldef.name}::v @@ -27,8 +29,10 @@ and ${coldef.foreignkey_col}::varchar(255) in (select distinct ${coldef.name}::v
${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;\
@ -38,12 +42,11 @@ select 'Sichtspalten aktiv' from xdummy;\ @@ -38,12 +42,11 @@ select 'Sichtspalten aktiv' from xdummy;\
\
\
\
<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,\
<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,\
C.sortfield\
from sx_fields F,xcube_dimconfig C where F.table_name=C.table_name and F.name=C.name \
and C.maskeninfo_id=${Maskennummer} and F.name=<<Ansicht in Ergebniszeilen>>]]>\
sortfield,is_virtual,vcsql\
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[\
@ -53,8 +56,10 @@ ${rowdef.foreignkey_cap} as name,${rowdef.sortfield} as tmp_sortfield from ${row @@ -53,8 +56,10 @@ ${rowdef.foreignkey_cap} as name,${rowdef.sortfield} as tmp_sortfield from ${row
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>\
@ -63,12 +68,11 @@ select 'nicht relevant' from xdummy;</#if>\ @@ -63,12 +68,11 @@ select 'nicht relevant' from xdummy;</#if>\
\
<sqlvar name="zweiteRowDef" type="hash"><![CDATA[\
<#if "<<2.Ansicht in Zeilen>>"!="">\
select F.name,F.caption,C.is_sicht,foreignkey_tab,foreignkey_col,foreignkey_cap,\
nvl(F.foreignkey_cond,''::varchar(1)) as foreignkey_cond,\
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 sx_fields F,xcube_dimconfig C where F.table_name=C.table_name and F.name=C.name \
and C.maskeninfo_id=${Maskennummer} and F.name=<<2.Ansicht in Zeilen>>\
from xcube_dimconfig where maskeninfo_id=${Maskennummer} and name=<<2.Ansicht in Zeilen>>\
<#else>\
select 'keine zweite RowDef' from xdummy;\
</#if>\
@ -82,8 +86,10 @@ ${zweiteRowDef.foreignkey_cap} as name,${zweiteRowDef.sortfield} as tmp_sortfiel @@ -82,8 +86,10 @@ ${zweiteRowDef.foreignkey_cap} as name,${zweiteRowDef.sortfield} as tmp_sortfiel
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>\
@ -93,27 +99,52 @@ select 'nicht relevant' from xdummy;</#if>\ @@ -93,27 +99,52 @@ select 'nicht relevant' from xdummy;</#if>\
\
</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>\
\
\
create temp table tmp_rohdaten (\
<#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_rohdaten (colattrib,rowattrib,<#if "<<2.Ansicht in Zeilen>>"!="">row2attrib, </#if> value)\
insert into tmp_cache (colattrib,rowattrib,<#if "<<2.Ansicht in Zeilen>>"!="">row2attrib, </#if> value)\
select ${coldef.name}::varchar(255), \
${rowdef.name}::varchar(255),\
<#if "<<2.Ansicht in Zeilen>>"!="">${zweiteRowDef.name}::varchar(255),</#if>\
${aggrfunction}\
from \
${table_name}\
where \
\
<#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>>"!="">,${zweiteRowDef.name}</#if> ;\
create index ix_tmp_roh1 on tmp_rohdaten (colattrib,rowattrib,row2attrib);\
create index ix_tmp_roh1 on tmp_cache (colattrib,rowattrib,row2attrib);\
</#if>\
\
\
<#if coldef.is_sicht&gt;0>\
<#assign ergspalten=.vars[coldef.caption].elements/>\
@ -168,33 +199,86 @@ create index ix_tmp_erg on tmp_erg (sortnr);\ @@ -168,33 +199,86 @@ create index ix_tmp_erg on tmp_erg (sortnr);\
\
<#macro updateval i col row row2 sortnr>\
update tmp_erg T set c${i}=\
(select nvl(sum(value),0) from tmp_rohdaten R where 1=1 \
<#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>\
\
\
<#if coldef.is_sicht==1>\
and R.colattrib in ${col.subkeys}\
\
<#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 R.colattrib='${col.apnr}' \
and ${colattribname}::varchar(255)='${col.apnr}' \
</#if>\
</#if>\
\
<#if rowdef.is_sicht==1>\
and R.rowattrib in ${row.subkeys}\
</#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',' R.rowattrib')} ) \
and ( ${row.strukturStr?replace('$1',' '+rowattribname+"::varchar(255)")} ) \
<#else>\
<#if row.key!='gesamt'> and R.rowattrib='${row.key}' </#if>\
<#if row.key!='gesamt'> and ${rowattribname}::varchar(255)='${row.key}' </#if>\
</#if>\
<#if row2?is_hash> and R.row2attrib='${row2.key}' </#if> \
) where T.sortnr='${sortnr}'\
;\
</#macro>\
\
drop table tmp_rohdaten;\
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/>\

8
src-modules/module/xcube/schluesseltabellen/xcube_dims_install.sql

@ -1,4 +1,10 @@ @@ -1,4 +1,10 @@
delete from xcube_dims where id in ('fssemzahl','hssemzahl');
delete from xcube_dims where id in ('fs4','fssemzahl','hssemzahl');
--Zum Testen
INSERT INTO xcube_dims (id,apnr,name,sort1,parent,strukturstr)
VALUES
('fs4','0','FS<4',1,NULL,NULL),
('fs4','1','FS>=4',2,NULL,NULL);
INSERT INTO xcube_dims (id,apnr,name,sort1,parent,strukturstr)
VALUES
('fssemzahl','1','1.FS',1,NULL,NULL),

129
src-modules/module/xcube/schluesseltabellen/xcube_install.sql

@ -1,66 +1,111 @@ @@ -1,66 +1,111 @@
--freemarker template
<#assign xcubes = [
{"name":"Studierendenwürfel", "uniquename":"xcube_sos_stg_aggr","sachgebiet":16,"table_name":"sos_stg_aggr","maskeninfo_id":999990060,
"restriction":"sem_rueck_beur_ein in (<<Semester>>)"}
] />
<#assign xcubes = [
{"name":"Studierendenwürfel",
"uniquename":"xcube_sos_stg_aggr",
"sachgebiet":16,
"table_name":"sos_stg_aggr",
"maskeninfo_id":21000
}
] />
<#assign xcube_kennzahl = [
{"xcube":"xcube_sos_stg_aggr", "maskeninfo_id":999990060,"apnr":"faelle","name":"Studierende (Fälle)","aggrfunction":"sum(summe)","restriction":"","is_default":1,"sortnr":1},
{"xcube":"xcube_sos_stg_aggr", "maskeninfo_id":999990060,"apnr":"koepfe","name":"Studierende (Köpfe)","aggrfunction":"sum(summe)","restriction":"studiengang_nr=1 and fach_nr=1"
,"is_default":0,"sortnr":2}
{ "maskeninfo_id":21000,
"apnr":"stud",
"name":"Studierende",
"aggrfunction":"sum(summe)",
"restriction":"",
"datatype":"integer",
"is_default":1,
"sortnr":1}
] />
<#assign xcube_dimconfig = [
{"xcube":"xcube_sos_stg_aggr","maskeninfo_id":999990060, "table_name":"sos_stg_aggr", "name":"fach_sem_zahl",
"is_sicht":0,"is_rowdim":1,"is_secondrowdim":0,"is_rowdefault":1,"is_coldim":1, "is_secondcoldim":0,"is_coldefault":0,"sortfield":"sort1"},
{"xcube":"xcube_sos_stg_aggr","maskeninfo_id":999990060, "table_name":"sos_stg_aggr", "name":"hssem",
"is_sicht":0,"is_rowdim":1,"is_secondrowdim":0,"is_rowdefault":0,"is_coldim":1, "is_secondcoldim":0,"is_coldefault":1,"sortfield":"sort1"},
{"xcube":"xcube_sos_stg_aggr","maskeninfo_id":999990060, "table_name":"sos_stg_aggr", "name":"geschlecht",
"is_sicht":0,"is_rowdim":1,"is_secondrowdim":1, "is_rowdefault":0,"is_coldim":1, "is_secondcoldim":0,"is_coldefault":0,"sortfield":"apnr"}
{"maskeninfo_id":21000,
"name":"fach_sem_zahl",
"caption":"Fachsemester",
"is_rowdefault":1,
"foreignkey_tab":"xcube_dims",
"foreignkey_col":"apnr",
"foreignkey_cap":"name",
"foreignkey_cond":"id='fssemzahl'",
"sortfield":"sort1"},
{"maskeninfo_id":21000,
"name":"hssem",
"caption":"Hochschulsemester",
"foreignkey_tab":"xcube_dims",
"foreignkey_col":"apnr",
"foreignkey_cap":"name",
"foreignkey_cond":"id='hssemzahl'",
"sortfield":"sort1"},
{"maskeninfo_id":21000,
"name":"geschlecht",
"caption":"Geschlecht",
"is_coldefault":1,
"foreignkey_tab":"sos_k_geschl",
"foreignkey_col":"apnr::varchar(255)",
"foreignkey_cap":"druck",
"sortfield":"apnr"},
{"maskeninfo_id":21000,
"name":"tid_stg",
"caption":"Studiengang",
"is_sicht":1,
"attrib_nachbearbeitung": "update <<tmp_table>> set <<col>>='s_'||<<col>>"},
{"maskeninfo_id":21000,
"name":"ca12_staat",
"caption":"Staatsangehörigkeit",
"is_sicht":1 },
{"maskeninfo_id":21000,
"name":"abschluss",
"caption":"Abschluss",
"is_virtual":1,
"vcsql":"update tmp_rohdaten set abschluss=(select abschluss from lehr_stg_ab where tid=tid_stg)",
"foreignkey_tab":"k_abint",
"foreignkey_col":"abint",
"foreignkey_cap":"dtxt",
"sortfield":"dtxt"}
] />
<#assign sx_fields_entries = [
{"table_name":"sos_stg_aggr","name":"hssem","caption":"HS","foreignkey_tab":"xcube_dims","foreignkey_col":"apnr","foreignkey_cap":"name","foreignkey_cond":"id='hssemzahl'"},
{"table_name":"sos_stg_aggr","name":"fach_sem_zahl","caption":"FS","foreignkey_tab":"xcube_dims","foreignkey_col":"apnr","foreignkey_cap":"name","foreignkey_cond":"id='fssemzahl'"}
] />
--freemarker magic
<#foreach cube in xcubes>
delete from xcube where maskeninfo_id=${cube.maskeninfo_id};
delete from xcube where maskeninfo_id=${cube.maskeninfo_id};
delete from xcube_dimconfig where maskeninfo_id=${cube.maskeninfo_id};
delete from xcube_kennzahl where maskeninfo_id=${cube.maskeninfo_id};
insert into xcube (name,uniquename,table_name,maskeninfo_id,sachgebiet,restriction)
values ('${cube.name}','${cube.uniquename}','${cube.table_name}',${cube.maskeninfo_id},${cube.sachgebiet},
'${cube.restriction?replace("\x0027","\x0027\x0027")}');
</#foreach>
insert into xcube (name,uniquename,table_name,maskeninfo_id,sachgebiet)
values ('${cube.name}','${cube.uniquename}','${cube.table_name}',${cube.maskeninfo_id},${cube.sachgebiet});
</#foreach>
<#foreach k in xcube_kennzahl>
insert into xcube_kennzahl (xcube,apnr,name,maskeninfo_id,aggrfunction,restriction,is_default,sortnr) values
('${k.xcube}','${k.apnr}','${k.name}',${k.maskeninfo_id},'${k.aggrfunction?replace("\x0027","\x0027\x0027")}',
<#foreach k in xcube_kennzahl>
insert into xcube_kennzahl (apnr,name,maskeninfo_id,aggrfunction,restriction,is_default,sortnr) values
('${k.apnr}','${k.name}',${k.maskeninfo_id},'${k.aggrfunction?replace("\x0027","\x0027\x0027")}',
'${k.restriction?replace("\x0027","\x0027\x0027")}',
${k.is_default},${k.sortnr});
<#if k?keys?seq_contains("datatype")> update xcube_kennzahl set datatype='${k.datatype}' where maskeninfo_id='${k.maskeninfo_id}' and apnr='${k.apnr}';</#if>
</#foreach>
<#foreach conf in xcube_dimconfig>
-- einfache durch zwei einfache Zeichen ersetzten x0027
insert into xcube_dimconfig (maskeninfo_id,name,caption)
values (${conf.maskeninfo_id},'${conf.name}','${conf.caption?replace("\x0027","\x0027\x0027")}');
insert into xcube_dimconfig (xcube,maskeninfo_id,table_name,name,is_sicht,is_rowdim,is_secondrowdim,is_rowdefault,is_coldim,is_secondcoldim, is_coldefault,sortfield)
values ('${conf.xcube}',${conf.maskeninfo_id},'${conf.table_name}','${conf.name}',${conf.is_sicht},${conf.is_rowdim},${conf.is_secondrowdim},
${conf.is_rowdefault},${conf.is_coldim},${conf.is_secondcoldim},
${conf.is_coldefault},'${conf.sortfield}');
</#foreach>
<#foreach sxf in sx_fields_entries>
insert into sx_fields (table_name,name) select '${sxf.table_name}','${sxf.name}' from xdummy where
(select count(*) from sx_fields where table_name='${sxf.table_name}' and name='${sxf.name}')=0;
update sx_fields set caption='${sxf.caption?replace("\x0027","\x0027\x0027")}',
foreignkey_tab='${sxf.foreignkey_tab}',foreignkey_col='${sxf.foreignkey_col}',foreignkey_cap='${sxf.foreignkey_cap}',
foreignkey_cond='${sxf.foreignkey_cond?replace("\x0027","\x0027\x0027")}' -- einfache durch zwei einfache Zeichen ersetzten
where table_name='${sxf.table_name}'
and name='${sxf.name}';
</#foreach>
<#if conf?keys?seq_contains("foreignkey_tab")> update xcube_dimconfig set foreignkey_tab='${conf.foreignkey_tab}' where maskeninfo_id='${conf.maskeninfo_id}' and name='${conf.name}';</#if>
<#if conf?keys?seq_contains("foreignkey_cap")> update xcube_dimconfig set foreignkey_cap='${conf.foreignkey_cap}' where maskeninfo_id='${conf.maskeninfo_id}' and name='${conf.name}';</#if>
<#if conf?keys?seq_contains("foreignkey_col")> update xcube_dimconfig set foreignkey_col='${conf.foreignkey_col}' where maskeninfo_id='${conf.maskeninfo_id}' and name='${conf.name}';</#if>
<#if conf?keys?seq_contains("sortfield")> update xcube_dimconfig set sortfield='${conf.sortfield}' where maskeninfo_id='${conf.maskeninfo_id}' and name='${conf.name}';</#if>
<#if conf?keys?seq_contains("is_sicht")> update xcube_dimconfig set is_sicht=${conf.is_sicht} where maskeninfo_id='${conf.maskeninfo_id}' and name='${conf.name}';</#if>
<#if conf?keys?seq_contains("calc_gesamt")> update xcube_dimconfig set calc_gesamt=${conf.calc_gesamt} where maskeninfo_id='${conf.maskeninfo_id}' and name='${conf.name}';</#if>
<#if conf?keys?seq_contains("is_rowdim")> update xcube_dimconfig set is_rowdim=${conf.is_rowdim} where maskeninfo_id='${conf.maskeninfo_id}' and name='${conf.name}';</#if>
<#if conf?keys?seq_contains("is_secondrowdim")> update xcube_dimconfig set is_secondrowdim=${conf.is_secondrowdim} where maskeninfo_id='${conf.maskeninfo_id}' and name='${conf.name}';</#if>
<#if conf?keys?seq_contains("is_rowdefault")> update xcube_dimconfig set is_rowdefault=${conf.is_rowdefault} where maskeninfo_id='${conf.maskeninfo_id}' and name='${conf.name}';</#if>
<#if conf?keys?seq_contains("is_coldim")> update xcube_dimconfig set is_coldim=${conf.is_coldim} where maskeninfo_id='${conf.maskeninfo_id}' and name='${conf.name}';</#if>
<#if conf?keys?seq_contains("is_secondcoldim")> update xcube_dimconfig set is_secondcoldim=${conf.is_secondcoldim} where maskeninfo_id='${conf.maskeninfo_id}' and name='${conf.name}';</#if>
<#if conf?keys?seq_contains("is_coldefault")> update xcube_dimconfig set is_coldefault=${conf.is_coldefault} where maskeninfo_id='${conf.maskeninfo_id}' and name='${conf.name}';</#if>
<#if conf?keys?seq_contains("foreignkey_cond")> update xcube_dimconfig set foreignkey_cond='${conf.foreignkey_cond?replace("\x0027","\x0027\x0027")}' where maskeninfo_id='${conf.maskeninfo_id}' and name='${conf.name}';</#if>
<#if conf?keys?seq_contains("is_virtual")> update xcube_dimconfig set is_virtual=${conf.is_virtual} where maskeninfo_id='${conf.maskeninfo_id}' and name='${conf.name}';</#if>
<#if conf?keys?seq_contains("vcsql")> update xcube_dimconfig set vcsql='${conf.vcsql?replace("\x0027","\x0027\x0027")}' where maskeninfo_id='${conf.maskeninfo_id}' and name='${conf.name}';</#if>
<#if conf?keys?seq_contains("attrib_nachbearbeitung")> update xcube_dimconfig set attrib_nachbearbeitung='${conf.attrib_nachbearbeitung?replace("\x0027","\x0027\x0027")}' where maskeninfo_id='${conf.maskeninfo_id}' and name='${conf.name}';</#if>
</#foreach>

11
src-modules/module/xcube/schluesseltabellen/xcube_install_restrictions.sql

@ -0,0 +1,11 @@ @@ -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;

3
src-modules/module/xcube/xcube_modul_entfernen.x

@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
#!/bin/bash
module_drop.x xcube $XCUBE_PFAD

4
src-modules/module/xcube/xcube_modul_erzeugen.x

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
#!/bin/bash
module_install.x xcube $XCUBE_PFAD

9
superx/WEB-INF/conf/edustore/db/bin/SQL_ENV_xcube.sam

@ -0,0 +1,9 @@ @@ -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

10
superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_felderinfo.unl

@ -1,10 +0,0 @@ @@ -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
superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_maske_system_bez.unl

@ -1 +0,0 @@ @@ -1 +0,0 @@
99990030^109^

10
superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_masken_felder_bez.unl

@ -1,10 +0,0 @@ @@ -1,10 +0,0 @@
99990030^99990031^
99990030^99990032^
99990030^99990033^
99990030^99990034^
99990030^99990035^
99990030^99990036^
99990030^99990037^
99990030^99990038^
99990030^99990039^
99990030^99990040^

188
superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_maskeninfo.unl

@ -1,188 +0,0 @@ @@ -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'^

1
superx/WEB-INF/conf/edustore/db/module/xcube/masken/99990030_sachgeb_maske_bez.unl

@ -1 +0,0 @@ @@ -1 +0,0 @@
112^99990030^
Loading…
Cancel
Save