IcCube - OLAP时间维度,范围仅在开始日期链接

时间:2016-06-29 10:58:01

标签: iccube

在IcCube中有一个时间向导,可以选择按范围索引。然后,我可以将此维度链接到具有开始字段和结束字段的事实表。

但不幸的是我有一个只有开始日期的事实表,我想以这种方式链接它们,条目有效,直到我有另一个具有相同键的条目。这是可能的,还是我必须在每个条目中添加结束日期?

2 个答案:

答案 0 :(得分:2)

如果我理解正确,你就会有一个带有以下结构的事实表

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

你想绑定[2月3日,2月3日]的第一行,[2月3日,2月8日]的第三行,依此类推。

如果是这种情况,就没有简单的方法。理想情况下,您可以计算数据源中的to)部分,或者可以使用icCube的ETL层来解决它(带缓存的Javascript)。注意,对于非常大的表,最后一个不是一个好方法。

如果您可以按时间列排序,则无需缓存整个表格即可轻松实现算法。

您可以使用link所述的Javascript视图在此here中找到架构示例。

希望有所帮助

答案 1 :(得分: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;
}

完成代码:

fire( formerRow, rowNumber++ );