Import af rekursivt (parent-child) hierarki i Palo

Relaterede dokumenter
Introduktion til SQL queries

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

Introduktion til Oracle, Datalogi, RUC Af: Jens Lauterbach 2002

1. Basal select med (stjerne)

Opgave 1 Basal select med (stjerne)

De vigtigste SQL-sætninger. SQL kap Oprette database. DDL og DML

Database design for begyndere

En Kort Introduktion til Oracle

Opsætning af Oracle Designer 10g repositorie

SQL-opgaver 5 løsning

Opgave 1. Opret de 4 tabeller i FTSFrontend programmet. Indsæt mindst 3 forskellige tabelværdier i kunder, målerstatus, byer og regning..

Databaseadgang fra Java

SQL for MySQL-begyndere

Sidste forelæsning. Jacob Aae Mikkelsen. 28. april 2013 IMADA. Jacob Aae Mikkelsen (IMADA) Sidste forelæsning 28.

Indholdsfortegnelse Databaser og PHP... 3 Opgave... 4 Opgave... 5 Opgave... 6 Sidste opgave er en lille gæstebog... 7 Kilder og nyttige links:...

Efterår 2002 Note 10. Temaopgave

Kursusbeskrivelse. Forarbejde. Oprettelse af en Access-database

applikation----x----odbc driver manager----foobar ODBC driver----foobar database

I denne manual kan du finde en hurtig introduktion til hvordan du:

Velkommen til kursusevaluering i Blackboard

Over- og merarbejde med måneds- og år-til-dato forbrug (Rapport-ID: 71)

Parameters. Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET.

Objektorientering og databaser

Database tips. Den forudsætter lidt kendskab til SQL men er for mindre erfarne. Denne guide er oprindeligt udgivet på Eksperten.dk

Afleveringsopgave. Efterår 2001

Data lagring. 2. iteration (implement backend)

Skrevet den 18. Feb 2010 af arne_v I kategorien Programmering / Visual Basic.NET

Anvisning i aflevering af bitemporale data

Information Integration

DB undervisning 01-01

MySQL C API. Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere.

Ferieregnskab (Rapport-ID: 74)

Ratingsystem i PHP og MySQL

Værktøjer fra værktøjskassen. Søren Breddam, Stevns Kommune

Bemærk! Et PHP script har kun brug for at forbinde én gang til databaseserveren. Det kan så sagtens udføre flere kommandoer vha. denne forbindelse.

Personer med åbne fraværsperioder (Rapport-ID: 80)

Database "opbygning"

Eksamen, DSDS, efterår 2007

Tietgenskolen - Nørrehus. Data warehouse. Database for udviklere. Thor Harloff Lynggaard DM08125

MsSQL: Basal performance tuning, part 1

Fraværsstatistik på personniveau (Rapport-ID: 75)

Databasesystemer. Databaser, efterår Troels Andreasen. Efterår 2002

Prepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC.

Skriftlig opgave. Designtanker i database-nære systemer

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

Sagsnr BILAG 3

R E D C A P M A N U A L. Importér data til REDCap fra CSV-fil. Opbyg din eksisterende database i REDCap Version 1.0

Databaser Obligatorisk opgave 2 Vejledende løsning

Introduktion til SQL

Kursusbeskrivelse Microsoft Excel Grundkursus

Individuelle pædagogiske handleplaner for Daginstitution/ Dagpleje. Tabulex Læreplaner

TrivselAPV 2010 Teknisk guide til sikkerhedsgrupperne2 (supplement)

En vej gennem casestudiet: Tabelvejen v. 2.0

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Database programmerings tips

Begrænsninger i SQL. Databaser, efterår Troels Andreasen

SQL Server 2016 Data Adgang

Perioder med start-slut på lørdag/søndag (Rapport-ID: 78)

Databaser Obligatorisk opgave 1

Introduktion til SQL

Introduktion til programmering

Løsningsforslag TCS X2

REDIGERING AF REGNEARK

Søgning og Sortering. Philip Bille

Personaleforbrug i årsværk (Rapport-ID: 72)

Omsorgsregnskab (Rapport-ID: 77)

Brugervejledning. Sådan laves et opslag med avanc. søgning. December 2010

Manglende konsistens i datamodellen og upræcise SQLsætninger er årsagen til, at mange IT-systemer fejler.

Løndelslister - Kontingenter (Rapport-ID: 66)

Afgrænsning/filtrering, sortering m.v. i Klienten

PROC TRANSPOSE. SAS-tabellen - hensigtsmæssig lagring af data. Copyright 2011 SAS Institute Inc. All rights reserved.

Feriepengeforpligtigelse Manuel beregning på ferietotaler (Rapport-ID: 57)

Easy Guide i GallupPC

ODBC made easy på dansk (når bare man ved hvordan) Jesper Michelsen, Data warehouse & Analyse

Skriftlig eksamen i kurset. Informationssystemer

DATABASE - MIN MUSIKSAMLING

Sammenknytning af listedata fra MUD til tabel i MapInfo (SVM-eksempel)

Hjemmesiden er opdelt i et sidehoved, en sidefod og mellem disse 3 kolonner: venstre, midterste og højre. Højre kolonne vises dog kun på forsiden.

Views etc. Databaser

Eksempel på en database: studenter, kurser, eksamener

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Huskesedler. Design og automatisering af regneark. Microsoft Excel 2013

Dokumentering af umbraco artikeleksport:

Rette bunkefejl i Legacy

Indhold Forelæsning Dat-D1: Regneark Matematik og databehandling 2012

Q-Variant i kasseterminalen

Nyansatte og fratrådte i valgfrit år (Rapport-ID: 47)

Frihedsregnskab (Rapport-ID: 76)

PowerPoint Intro 2010 Segment - en del af dit netværk

Hvorfor skal vi bruge objekt orienteret databaser?

Brugermenuer og brugerdefinerede formularer

Forslag til løsning af Opgaver til afsnittet om de naturlige tal (side 80)

Oktober Dokumentpakker

Begrynder til at lave log ind system

Manual til WordPress CMS

Databasesystemer. IT Universitetet i København 8. juni 2006

Kogebog. Quickmanual til brug af GeoGIS2005 ved Regionerne

Tagwall med Php & MySQL

(fig.1. Eksempel på en almindelig entity)

Transkript:

Import af rekursivt (parent-child) hierarki i Palo Dette dokument beskriver hvordan et simpelt rekursivt (parent-child) hierarki kan importeres ind i Palo på forskellige måder via SQL og samtidig bibeholde muligheden for at henføre data direkte til overliggende niveauer i hierarkiet. De følgende eksempler kan tilpasses ens eget datasæt. Først skal vi lave et lille datasæt bestående af en enkelt tabel med et rekursivt (parent-child) hierarki. Tabellen hedder formaal og indeholder produkter, produktgrupper samt det øverste niveau. SQL'en til at danne tabelstruktur og indsætte data ser således ud: DROP TABLE formaal; CREATE TABLE formaal (id NUMBER(4), navn VARCHAR2(30), parent_id NUMBER (4)); (1, '', null); (2, '', 1); (3, '', 1); (4, '', 2); (5, '', 2); (6, '', 2); (7, '', 3); (8, '', 3); COMMIT; Efter at have dannet tabellen og indsat data vil vi foretage en simpel forespørgsel for at se indholdet af denne: SELECT * FROM formaal; ID NAVN _ID 1 2 1 3 1 4 2 5 2 6 2 7 3 8 3 1

Vi vil nu prøve at importere dette datasæt ind i en dimension i Palo på 3 forskellige måder. Kun de 2 sidste giver mulighed for at der kan henføres data direkte til overliggende niveauer i hierarkiet. Her nedenunder ses de 3 slutresultater, som de vil tage sig ud i Palo. Da jeg ikke udfører nogen eksplicit sortering af data i forespørgslerne er det tilfældigt, at produktgrupper og de enkelte produkter er sorteret i faldende alfabetisk rækkefølge. Man kunne tilføje order by kolonnenavn til sidst i hver enkelt forespørgsel for at lave en almindelig stigende alfabetisk sortering. Første udgave er en simpel repræsentation af hierarkiet med over produktgrupper som igen er over de enkelte produkter. Da alle elementer som har børn i Palo er konsolideret af data henført til de nederste elementer i hierarkiet er det ikke muligt at henføre data direkte til Produktgrupper og i denne situation. Den anden udgave tilføjer 3 nye elementer til hierarkiet for netop at tage hensyn til, at vi gerne vil kunne henføre data direkte til de overliggende niveauer og samtidig have mulighed for at se hvor meget der samlet set henføres til et element både direkte og indirekte fra underliggende konsoliderede elementer. Konkret optræder hvert oprindelig konsolideret element nu 2 gange den ene gang ikke-konsolideret (med det originale navn og med henblik på de direkte data) på niveau med de elementer der normalt er børn til elementet, og den anden gang konsolideret (med tilføjelsen samlet ) men nu både med de normale børn samt den direkte version af sig selv. Denne anden udgave er strukturmæssigt ikke helt elegant, fordi f.eks. (til direkte henførte data),, og optræder på niveau med hinanden, selvom de reelt ikke det, og det er endvidere lidt mere komplekst, hvis man kun vil vise de indirekte data for et konsolideret element. Derfor vil vi også danne en tredje udgave af hierarkiet, som er den mest komplekse, men tilgengæld også mere korrekt adskiller elementer på forskellige niveauer, og som nemt giver mulighed for kun at se indirekte data til et konsolideret element. I denne tredje udgave optræder alle de oprindelig konsoliderede elementer nu 3 gange i hierarkiet 1) ikke-konsolideret med det originale navn til direkte henførte data, 2) med tilføjelsen indirekte til opsummering af alle underliggende konsoliderede elementer, 3) med tilføjelsen samlet til opsummering af de to første. På de efterfølgende sider vises hvordan SQL-forespørgslerne til dannelsen af hver udgave af hierarkiet skal opbygges på baggrund af det samme originale datasæt. Jeg tilføjer ikke teksten direkte til de elementer, hvor data direkte henføres til, da jeg så også vil skulle tage hensyn til dette, når fakta-data hentes ind i kuberne. 2

1. Simpelt hierarki i Palo Til dannelsen af det simple hierarki i Palo anvendes en relativ simpel SQL-forespørgsel, der joiner formaalstabellen med sig selv for at kunne vise navn på både barn og forældre for hver række. SELECT f1.navn child, f2.navn parent ; Ovenstående datasæt importeres ind i Palo vha. følgende PALO.EADD formel, hvor kubens navn er lig omkostning, mens dimensionens navn er formål. Denne formel er den samme for alle udgaver af hierarkiet, da alle SQL-forespørgsler returnere 2 kolonner med henholdsvis barn og forældre. =PALO.EADD("localhost/omkostning";"formål";"n";A1;"B1";1;FALSE) Dette datasæt fører til det simple hierarki i Palo, hvor der ikke kan henføres data direkte til elementer på overliggende niveauer. Alternativ SQL til at danne ovenstående datasæt Oracle har en speciel SQL-egenskab (der mig bekendt ikke findes i andre databaser, da det ikke er en standard) til specielt at hente data fra et rekursivt hierarki, som gør at det samme datasæt kan dannes uden at joine tabellen med sig selv, hvilket gør følgende forespørgsel mere effektiv ved store datasæt. I de følgende forespørgsler vil jeg dog fortsætte med den mere almindelige SQL. SELECT navn child, PRIOR navn parent FROM formaal CONNECT BY PRIOR id = parent_id START WITH parent_id IS NULL; 3

2. Halv-avanceret hierarki i Palo Den anden udgave af hierarkiet kræver flere forespørgsler på kildetabellen for at danne alle data. De enkelte forespørgsler samles til et datasæt vha.. Hvis man i stedet for bare skrev UNION vil databasen frasortere duplikater dette kræver dog en intern sortering af data og er derfor mere krævende. Derfor bør man altid anvende, så længe man ved, at der ikke er duplikater i rækkerne. Jeg har farvekodet forespørgslen for at vise hvilke rækker, hver enkelt select-sætning returnerer. Første select finder alle elementer til direkte data, som ikke er på laveste niveau (via betingelsen), og sætter forældren lig samme element men med tilføjelsen samlet. Den anden select finder alle elementer, som hverken er på laveste eller højeste niveau og finder deres naturlige forældre i hierarkiet. Både barn og forældre tilføjes samlet i navnet. Endelig finder den tredje og sidste select alle elementer på laveste niveau (via sidste del af betingelsen) og deres tilhørende normale forældre. Kun forældrens navn får her tilføjelsen samlet. SELECT f1.navn child, f1.navn ' samlet' parent SELECT f1.navn ' samlet' child, f2.navn ' samlet' parent AND f1.id IN (SELECT parent_id FROM formaal) SELECT f1.navn child, f2.navn ' samlet' parent AND f1.id NOT IN (SELECT parent_id FROM formaal WHERE parent_id IS NOT NULL) ; 4

3. Avanceret hierarki i Palo Det tredje og mest komplekse hierarki dannes på samme måde som det forrige, der er nu bare hele 4 select-dele i den samlede forespørgsel. Den grønne select-sætning er den nye tilføjelse, men der sker dog også lidt ændringer i de andre select-dele. Første select finder alle elementer til direkte data, som ikke er på laveste niveau (via betingelsen), og sætter forældren lig samme element men med tilføjelsen samlet. Den anden select er en kopi af den første med den ene forskel at indirekte tilføjes børne-elementets navn. Tredje select finder alle elementer, som hverken er på laveste eller højeste niveau og finder deres naturlige forældre i hierarkiet. Teksten samlet tilføjes til barnets navn, mens indirekte tilføjes til forældren. Endelig finder den fjerde og sidste select alle elementer på laveste niveau (via sidste del af betingelsen) og deres tilhørende normale forældre. Barnets navn forbliver det samme, mens forældren igen får tilføjet indirekte. SELECT f1.navn child, f1.navn ' samlet' parent SELECT f1.navn ' indirekte' child, f1.navn ' samlet' parent SELECT f1.navn ' samlet' child, f2.navn ' indirekte' parent AND f1.id in (SELECT parent_id FROM formaal) SELECT f1.navn child, f2.navn ' indirekte' parent AND f1.id NOT IN (SELECT parent_id FROM formaal WHERE parent_id IS NOT NULL) ; indirekte indirekte indirekte indirekte indirekte indirekte indirekte indirekte indirekte indirekte 5