2016-06-29 14 views
2

In IcCube gibt es einen Time Wizard mit einer Option zur Indexierung nach Bereich. Ich kann dann diese Dimension mit einer Faktentabelle mit einem Startfeld und einem Endfeld verknüpfen.IcCube - OLAP Time Dimension mit nur verknüpftem Bereich am Startdatum

Aber leider habe ich eine Faktentabelle mit nur Startdaten und ich möchte sie so verlinken, dass der Eintrag gültig ist, bis ich einen weiteren Eintrag mit den gleichen Schlüsseln habe. Wäre das möglich, oder müsste ich jedem Eintrag das Enddatum hinzufügen?

Antwort

2

Wenn ich richtig verstanden habe, haben Sie eine Faktentabelle mit den folgenden structrue

Dim1, DimTime, Amount 
1 , 1 Feb 2014, 2.4 
2 , 8 Feb 2014, 1.4  
3 , 3 Feb 2014, 3.4 

Sie möchten die erste Zeile aus dem [1. Februar binden, 3. Februar), die dritte Zeile von [3 Feb, 8 Feb) und so weiter.

Wenn dies der Fall ist, gibt es keinen einfachen Weg. Idealerweise berechnen Sie den to) -Teil in Ihrer Datenquelle oder Sie können die ETL-Ebene von icCube verwenden, um sie dort zu lösen (Javascript mit Cache). Beachten Sie, dass der letzte Ansatz für sehr große Tabellen kein guter Ansatz ist.

Wenn Sie nach der Spalte Zeit sortieren können, wären die Algorithmen viel einfacher, ohne dass die gesamte Tabelle zwischengespeichert werden muss.

Sie können ein Schema Beispiel in diesem link mit einer Javascript-Ansicht wie beschrieben here finden.

hoffen, es hilft

+0

Das ist, was ich versucht habe zu tun. Es ist schade, dass es nicht funktioniert. Gibt es eine Chance, dass dies in Zukunft umgesetzt wird? Es würde sicherlich helfen, Changelogs in IcCube anzuzeigen. – UlrichWuenstel

+0

Wenn es ein Changelog ist, ist es höchstwahrscheinlich sortiert, hast du es mit einer View versucht (musst nicht cachen)? – ic3

+0

Fragen sind 1) es ist sortiert? 2) Wenn nein, wie groß ist der Tisch? – ic3

0

Ihnen für das Schema danken. Leider konnte ich das Schema in IcCube nicht öffnen. Es sagte, dass das Schema fehlerhaft ist. Aber einen Blick auf den Code hat viel geholfen. Ich habe die Javascript ein wenig, weil das ein Problem mit den Daten war und ich hinzugefügt, um die Möglichkeit einer langsam veränderlichen Dimension:

Speicher:

Dim1, DimTime, Amount 
1,1 Feb 2014,2.4 
1,3 Feb 2014,1.4 
1,11 Feb 2014,1.4 
2,4 Feb 2014,2.4 
2,8 Feb 2014,1.4 
3,3 Feb 2014,3.4 
3,7 Feb 2014,6.4 

Init-Code:

var SCD = "Dim1"; 
var formerRow = null; 
var currentRow = null; 
var rowNumber = 0; 
var jDateType = Java.type("org.joda.time.LocalDate"); 
var jDateNow = new jDateType(); 

Row Verarbeitung Reihe:

currentRow = copy(); 
set(currentRow, "TO", jDateNow); 
if (formerRow === null) { 
    // first Line, copy the current row 
    formerRow = copy(); 
    currentRow = null; 
} else if (get(currentRow,SCD) != get(formerRow,SCD)) { 
    set(formerRow, "TO", jDateNow); 
    fire(formerRow, rowNumber++); 
    formerRow = currentRow; 
    currentRow = null; 
} else { 
    // second Line 
    set(formerRow, "TO", get(currentRow,"DimTime").plusDays(-1)); 
    fire(formerRow, rowNumber++); 
    formerRow = currentRow; 
    currentRow = null; 
} 

Completion Code:

fire(formerRow, rowNumber++);