Поиск последней цены для каждой строки таблицы фактов

0 голосов
DenisSmirnov в категории Как сделать... 1 отметил

Две таблицы

  1. Факты (дата, товар, количество)
  2. цены (дата, товар, цена)


Как обогатить данные таблицы Фактов Ценами из второй таблицы???

ЗЫ: Цены ставятся нерегулярно (их нет на каждую возможную дату, цены эпизодические)

как это реализовать на T-SQL - понятно

но как это сделать в Loginom - не понимаю вообще - куда смотреть?

Ответы: 2 шт.

0 голосов
alexey.arustamov
  1. При помощи слияния объединить таблицы - https://help.loginom.ru/userguide/processors/transformation/join/
  2. Отсортировать в правильном порядке, видимо, по дате - https://help.loginom.ru/userguide/processors/transformation/sorting.html
  3. Группировать данные, но выбрать для поля "Цена" функцию агрегации "Последний" - https://help.loginom.ru/userguide/processors/transformation/grouping.html
Будет выбрана последнее по порядку значение в таблице.
0 голосов
Ирина Комарова

Если я правильно поняла вопрос, то нужно не просто добавить к записям таблицы Факты соответствующие цены, но и заменить пропущенные значения ценой на последнюю дату. Такую задачу можно решить следующим образом:

1. С помощью узла Слияние объединить наборы ( тип операции - левое соединение, связи по полям Артикул (Товар) и Дата).

2. Отсортировать полученный набор по возрастанию по полям Артикул и Дата. Получим упорядоченный набор, в котором в пределах каждого артикула цены расположены в порядке возрастания даты. Строки с пропущенными значениями будут выведены последними по каждому артикулу. 

3. С помощью узла Калькулятор заполнить пропущенные значения ценой на последнюю дату (https://help.loginom.ru/userguide/processors/transformation/calc). 

Для этого задать два выражения:

1. Имя: OFFSET , Метка: Смещение строки

Выражение: 
IF (IsNull(PRICE), NVL(DATA("OFFSET ",RowNum() - 1),0)+1, 0)

Первое выражение  – промежуточное, определяет, на сколько строк от текущей строки с пустым значением нужно подняться, чтобы получить цену на последнюю дату. 

2. Имя: PRICE_ REPLACE,  Метка: Цена, после замены пропусков

Выражение:

IF (IsNull(PRICE) and PRIDUCT_CODE = Data("PRIDUCT_CODE ", RowNum()-OFFSET), Data("PRICE", RowNum()-OFFSET), PRICE)

Второе выражение сформирует столбец, в котором в каждой строке будет запись о цене.

4. С помощью узла Параметры полей (https://help.loginom.ru/userguide/processors/transformation/fields-parameters.html) настраиваем итоговый набор, удаляя лишние столбцы.

...