IcCube — измерение времени OLAP с диапазоном, связанным только с датой начала

В IcCube есть Time Wizard с возможностью индексации по диапазону. Затем я могу связать это измерение с таблицей фактов с начальным и конечным полем.

Но, к сожалению, у меня есть таблица фактов только с датами начала, и я хотел бы связать их таким образом, чтобы запись была действительной, пока у меня не будет другой записи с теми же ключами. Возможно ли это, или мне нужно будет добавлять дату окончания к каждой записи?


person UlrichWuenstel    schedule 29.06.2016    source источник


Ответы (2)


Если я правильно понял, у вас есть таблица фактов со следующей структурой

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

Вы хотите связать первую строку из [1 февраля, 3 февраля), третью строку из [3 февраля, 8 февраля) и так далее.

Если это так, то простого пути нет. В идеале вы вычисляете часть to) в своем источнике данных или можете использовать слой ETL icCube, чтобы решить его там (Javascript с кешем). Обратите внимание, что последний вариант не подходит для очень больших таблиц.

Если вы можете упорядочить по столбцу Time, алгоритмы будут намного проще без необходимости кэшировать всю таблицу.

Вы можете найти пример схемы по этой ссылке, используя представление Javascript, как описано здесь.

Надеюсь, поможет

person ic3    schedule 29.06.2016
comment
То есть то, что я пытался сделать. Жаль, что не работает. Есть ли шанс, что это будет реализовано в будущем? Это, безусловно, помогло бы с отображением журналов изменений в IcCube. - person UlrichWuenstel; 30.06.2016
comment
Если это журнал изменений, он, скорее всего, отсортирован, вы пробовали с представлением (не нужно кэшировать)? - person ic3; 30.06.2016
comment
Вопросы 1) это отсортировано? 2) если нет, то насколько большой стол? - person ic3; 30.06.2016
comment
1) Он отсортирован 2) таблица большая... Не подскажете, как решить это с представлением? С Javascript? - person UlrichWuenstel; 30.06.2016
comment
пример прилагается (вам нужно активировать javascript в icCube) - person ic3; 01.07.2016

Спасибо за схему. К сожалению, я не смог открыть схему в 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++ );
person UlrichWuenstel    schedule 04.07.2016