woensdag 30 maart 2016

trukje subquery en inputparameters + Cumulutieve maandstanden



  CREATE OR REPLACE FORCE VIEW "DWH_DM_ZRM"."VW_OKT_TO_KENGETAL_CUM" ("DATUM_CUMULATIEF", "GEBIED_CODE", "GEBIED_OMSCHRIJVING", "KENGETAL", "AANTAL_JEUGDIGEN", "EENHEID", "TYPE") AS
  SELECT 
                         '1-' || cast(K.KAL_MAAND as varchar2(2)) || '-' || CAST(K.KAL_JAAR as varchar2(4))   DATUM_CUMULATIEF            ,          
                        '' AS GEBIED_CODE,
                        '' AS GEBIED_OMSCHRIJVING,
                        'OKT_AANTAL_JEUGDIGEN_CUMULATIEF' AS KENGETAL,
                       
                        MAX((SELECT COUNT(DISTINCT FCT_CLIENTNUMMER) AANTAL FROM  DWH_DM_ZRM.ZRM_FCT_OKT_DAG  SB
                                               INNER JOIN DWH_DM_ZRM.ZRM_DIM_KALENDER SK ON SK.KAL_DATUM_KEY = SB.FCT_PEILDATUM
             WHERE SK.KAL_JAAR  = K.KAL_JAAR AND SK.KAL_MAAND BETWEEN 1 AND K.KAL_MAAND
                           )) AANTAL_JEUGDIGEN,                  
                        'AANTAL' AS "EENHEID"          ,
                        'OKT' AS "TYPE"                         
FROM  DWH_DM_ZRM.ZRM_DIM_KALENDER K
WHERE K.KAL_JAAR > = 2015
GROUP BY K.KAL_JAAR, K.KAL_MAAND
ORDER BY TO_DATE( CAST(K.KAL_JAAR as varchar2(4)) || '-' || cast(K.KAL_MAAND as varchar2(2)) || '-01', 'YYYY-MM-DD'  );


Toelichting:
Met de het zwarte stukje bouw je alle maanden op. Daarna kan je de k.kal_jaar en k.kal_maand meegeven aan de subquery. Deze voert een onafhankelijk subquery uit met deze inputparameters. Dit resultaat moet nog wel even door de max functie aangezien anders de Group by niet werkt van de hoofdquery

cumulatieve maandstanden


 Gebruikt om maandstanden cumulatief te berekenen in Derived table "D_DashboardBereikCumulatief"
is een union van sqlblokjes per soort pgb zin etc


SELECT 
        TO_DATE( CAST(K.KAL_JAAR as varchar2(4)) || '-' || cast(K.KAL_MAAND as varchar2(2)) || '-01', 'YYYY-MM-DD'  ) DATUM_CUMULATIEF,       
        MAX((SELECT COUNT(DISTINCT FCT_DIM_CLIENT_KEY) AANTAL FROM DWH_DM_ZRM.ZRM_FCT_BESCHIKKING_DAG_ARCH SB
                INNER JOIN DWH_DM_ZRM.ZRM_DIM_LEVERINGSVORM L ON L.LVM_DIM_LEVERINGSVORM_KEY = SB.FCT_DIM_LEVERINGSVORM_KEY
                  INNER JOIN DWH_DM_ZRM.ZRM_DIM_KALENDER SK ON SK.KAL_DATUM_KEY = SB.FCT_PEILDATUM
              WHERE SK.KAL_JAAR  = K.KAL_JAAR AND SK.KAL_MAAND BETWEEN 1 AND K.KAL_MAAND
                      AND L.LVM_LEVERINGSVORM_CD = 'PGB' 
                      AND SB.FCT_DATUM_ARCHIEF  = '31-12-2016'
                      )) AANTAL_JEUGDIGEN,       
        'Aantal jeugdigen PGB' Xlabel
FROM  DWH_DM_ZRM.ZRM_DIM_KALENDER K
WHERE K.KAL_JAAR > = 2015
GROUP BY K.KAL_JAAR, K.KAL_MAAND;





Business Object concepts en tips

Definities


document  = bestand dat 1 of meer rapporten bevat
rapport  = tabblad waarop 1 of meer datablokken staan
Datablok = presentatievorm van data
Query  = zoekvraag die data van databron ophaalt

Datablok is altijd gekoppeld aan een query
Als je data uit meerdere querys in 1 datablok wil toevoegen, kan dat alleen via merged dimensions


Presentatie in Datablok 

Bij dimensies worden altijd de dubbele rijen gefilterd  (distinct)


dim variabele in db

Dimvar  



A
B
C
A
A
B

bijv sleep dimensie variabele naar datablok

A
B
C

dim var en measuer var in db

A ,1
B,4
C,2
A,3
A,2
B,1



Als zowel dimvar een measure variabele er bijgesleept wordt
Wat dan presenteren in datablok

A, ?(1,3,2)
B, ?(4,1)
C,2

Dit kan alleen als er een groupsfunctie bij de measure variabele gedefinieerd is.

bijv Sum
A, 6
B, 5
C,2

Geen groepsfunctie dan MULTIVALUE error

Dus BO weet niet hoe hij de measure moet groeperen


Let dus goed op bij het aanmaken van Measure Variabelen, dat ze in principe een groepsfunctie meoten hebben (behalve als ze verwijzen naar een andere gegroepeerde measure functie






Sorteringen.


Let op dat als je wil sorteren dat je eerst andere sorteringen moet verwijderen. Of sorteringen vallen weg

Sortering kan ook met een hidden field gedaan worden. varTeam


Opleveren  JMP
Momenteel is de volgende architectuur geimplementeerd (zie blz 1-3 van OWB installation en admin guide ) :


Bovenstaande voor zowel  een ontwikkel/test omgeving (JMT) als een productieomgeving (JMP) op twee verschillende fysieke servers.
Het overzetten van programmatuur van de JMT omgeving naar JMP wordt met de Meta Data Loader (MDL) van OWB gedaan en gaat globaal als volgt:
-         Maak export met MDL van de objecten in OWB uit JMT die moeten worden overgezet
-         Zet file(s) op een plaats die door beheer kan worden ingelezen
-         Importeer de objecten met MDL in de design omgeving van OWB JMP
-         Deploy de objecten op de runtime database JMP

In detail worden de opleverstappen hier beschreven. JMT-Design is de design repository van JMT waar de metadata van alle ontwikkel/test objecten in staan. JMT-Runtime is de JMT database waar alle objecten ( tables, packages ed.) staan die we gaan uitvoeren (runnen) in de laadjobs. JMP idem dito.
Nog een opmerking vooraf: er worden een aantal zaken extra gedaan bij een oplevering, bijv.  we splitsen de mdl file, en leveren altijd een proces flow op. Strikt  genomen is dit niet nodig, maar het maakt het proces wel beter beheersbaar.

·         Maak een collection aan in JMT-Design door met de rechtermuisknop te klikken op collection. Geef een duidelijk naam en omschrijving van de collection.

·         Voeg een object die je muteert direct toe aan de collection. Rechter muisknop en “Add to Collection”. Je kunt ook meerdere objecten tegelijk toevoegen door meerdere objecten te selecteren (Ctrl) en dan rechtermuisknop te gebruiken. Verwijderen uit een collection gaat door met de rechtermuisknop op de referentie in de collectie te gaan staan en dan “Delete” te kiezen. Let wel, met een collection wordt geen kopie van het object gemaakt, maar een referentie naar het object.

·         Zet alle procesflows die betrekking hebben op de gewijzigde objecten in de collection. Dit geldt dus ook voor alle parent-procesflows.

·         Maak een MDL export file per objecttype. Zet het objecttype, datum en releasenummer in de filenaam.

·         Maak een opleverdocument aan. Hierin staan alle acties die moeten worden gedaan in JMP.  Zet hierin ook de deploy actie (CREATE, REPLACE, UPGRADE) die per object moet plaatsvinden.

·         Maak een full snapshot van het project in van JMP-Design voor de veiligheid.

·         Importeer de MDL files in JMP-Design, Houdt hierbij deze volgorde aan:
o       Tables
o       Views
o       Sequences
o       Transformations
o       Mappings
o       Proces Flows


·         Kies Import all objects bij Object Selection

·         Kies altijd Update metadata. Deze optie zorgt ervoor dat bestaande objecten worden overschreven en nieuwe worden toegevoegd. (Als je zeker weet dat het alleen nieuwe object betreft dan kan ook de Create option worden gebruikt. Als het alleen bestaande objecten betreft, dan kan ook de Replace optie worden gebruikt).  Gebruik nooit de merge metadata. Deze optie doet een replace als er verschillen zijn, maar volgens mij werkt dit niet goed en de optie is zeker niet geldig voor  mappings .
o       Sommige objecten hebben child-objects die meteen worden mee-geimporteerd. De MDL zorgt ervoor dat deze ook worden gesynchroniseerd, dwz.  hetzelfde gemaakt worden als in de exportfile. Bijvoorbeeld : JMP table X heeft kolommen a, b, c. In de mdl export file staat tabel X met kolommen a, d, e. Na de import heeft JMP table X met kolommen a, d, e. Dwz. d en e zijnd toegevoegd en b en c zijn verwijderd.

·         Kies Match By Names. Hiermee worden de objecten gematched op hun fysieke naam en worden nieuwe UOIDs aangemaakt in de JMP omgeving. Met deze UOIDs doen we verder niets, dat is voor de interne administratie binnen OWB. We doen dus ook nooit een Match By UOID. Overigens zijn er ook Business names voor elk object. Door een instelling in JMT OWB zorgen we ervoor dat de fysieke en business names altijd hetzelfde zijn.

·         Advanced is voor languages, security en user-defined objecten. Voorlopig gebruiken we die niet.


·         Controleer na elke import de logfiles goed. Ga niet verder met importeren als er warnings of fouten zijn, maar zoek eerst uit wat ze betekenen. Soms kan toch worden doorgegaan als het een warning betreft.

·         Optioneel : Met een import worden er uiteraard geen objecten verwijderd. Als er objecten verwijderd moeten worden geef dit dan aan in het opleverdocument. Op JMP dienen deze objecten dan verwijderd  te worden uit JMP-Runtime (deploy met optie DROP) en daarna verwijderd uit JMP-Design.

·         Datavault  views herstellen.  Bij het overzetten van de datavault views kan het zijn dat de owner DWHO_DV in de querytekst staat ipv DWH_DV. Pas deze querytekst aan voordat gedeployed wordt (dus vervang alle DWHO_DV door DWH_DV). Dit is een historisch gegroeide  “onhandigheid”. Oplossing is om op JMT de usernames hetzelfde te maken als op JMP. Deze actie staat nog open.

·         Het updaten  van procesflows in JMP-Runtime geeft nogal eens problemen. Daarom verwijderen we eerst de flows voordat we ze weer aanmaken : Verwijder de procesflows uit JMP-Runtime (Deploy actie DROP).  Als het droppen van de procesflows niet lukt, draai dan het script wfrmitt.sql in sqlplus (onder de worskspace owner). Dit script zorgt ervoor dat procesflows die nog gelocked zijn door owb in de repository weer worden geunlocked.  Unlock  hiermee alle procesflows.

·         Om te zien welke deployacties er nodig zijn dien je het designcentrum te herstarten en daarna naar het control center te gaan. Druk op Default Actions. Je ziet dan Create, Replace of Upgrade bij de objecten. Check  dit met het opleverdocument

·         Deploy alle objecten in JMP-Runtime behalve de procesflows. Je kunt  hierbij dezelfde volgorde aan houden als bij het importeren, maar dit is niet noodzakelijk. De database kan namelijk altijd achteraf valid gemaakt worden door het compileren van objecten. Let op : mijn ervaring bij het deployen is dat bij zeer veel objecten (> 30), het beter is om de deployactie te splitsten in meerdere batches.

·         Controleer of alle objecten valid zijn in de database.

·         Deploy de procesflows met het script pf_jmp_all.tcl in OMB Plus .