2016-06-29 7 views
2

IcCubeでは、範囲別にインデックス付けするオプション付きのタイムウィザードがあります。次に、このディメンションを開始フィールドと終了フィールドを持つファクト表にリンクできます。IcCube - 範囲が開始日にのみリンクされたOLAP時間ディメンション

残念ながら私は開始日だけのファクトテーブルを持っています。同じキーで別のエントリがあるまで、エントリは有効です。可能でしょうか、またはすべてのエントリに終了日を追加する必要がありますか?

答えて

2

私が正しく理解している場合、あなたはあなたが[3から[2月1日、2月3日)からの最初の行、三行目をバインドしたいと思い、次のstructrue

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

とファクトテーブルをしました2月、2月8日など)。

この場合、簡単な方法はありません。理想的には、データソースのto部分を計算するか、icCubeのETL層を使用してその部分を解決することができます(キャッシュ付きJavascript)。大規模なテーブルの場合、最後の方法は適していません。

[時間]列で注文できる場合は、テーブル全体をキャッシュする必要がなく、アルゴリズムが簡単になります。

このlinkのスキーマの例は、hereのようにJavascriptビューを使用して見つけることができます。

願っています。

+0

つまり、私がやろうとしたことです。それはうまくいきません。将来これが実施される可能性はありますか?それは確かにIcCubeにチェンジログを表示するのに役立ちます。 – UlrichWuenstel

+0

変更ログであれば、ほとんどの場合ソートされていますが、キャッシュで表示する必要はありませんでしたか? – ic3

+0

質問は1)ソートされていますか? 2)いいえの場合、テーブルはどれくらい大きいですか? – ic3

0

ありがとうございました。残念ながら、IcCubeでスキーマを開くことができませんでした。それはスキーマが間違っていると言いました。しかし、コードを見てみると多くの助けになりました。日付の問題だったと私はゆっくりと変化するディメンションの可能性を追加しましたので、私は、javascriptを少し変更:

メモリに:

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コード:

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

行処理行:

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; 
} 

完了コード:

​​
関連する問題