2016-06-29 58 views
2

掛在IcCube有一個時間嚮導通過一系列的選項索引。然後,我可以將此維連接到一個事實表,其中包含開始字段和結束字段。IcCube - OLAP時間維度與範圍只在開始日期

但不幸的是我有一個事實表,只有開始的日期,我想給他們以這種方式連接,該條目是有效的,直到我有相同的按鍵另一項。這是可能的,還是我必須將結束日期添加到每個條目?

回答

2

如果我理解正確的,你一個事實表具有以下structrue

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

您想從[2月1日,2月3日),從第三行[3第一行綁定2月8日,2月8日)等。

如果是這樣的情況下,有沒有簡單的方法。理想情況下,您計算數據源中的to)部分,或者您可以使用icCube的ETL層在那裏解決它(帶緩存的Javascript)。注意最後一個對於非常大的表格來說不是一個好方法。

如果您可以通過時間列順序算法將無需緩存整個表容易得多。

您可以使用一個Javascript視圖描述here在這個link一個模式的例子。

希望它有幫助

+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 

初始化代碼:

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

完成代碼:

​​
相關問題