Всем привет, при создание скользящего плана столкнулся с проблемой. Не понимаю как исправить.
Коротко о задаче:
На входе таблица со столбцами Сценарий, Дата, Товар, Сумма. Из сценариев надо найти 2 наиболее актуальных и сформировать скользящий план.
Что я сделал сформировал 2 таблицы в которых находятся 2 наиболее актуальных плана(скрипт во вложение + вид таблиц) Из таблиц видно, что скользящий план будет с 1.03.20 по 1.05.21
акплан.PNG
средплан.PNG
Скользяк.txt
Далее я стал объединять таблицы
скользящийАктуальныйплан:
Load
[Дата] as [Дата],
[Товар2] as [Товар],
[Сумма2] as [Сумма]
RESIDENT Актуальныйплан;
Concatenate
скользящийсредплан:
Load
[Дата] as [Дата],
[Товар1] as [Товар],
[Сумма1] as [Сумма]
RESIDENT Среднийплан Where not Exists([Дата]);
И при применение сводной таблице в листе получаю, что теряется первых 3 месяца.
Если не использовать not exist то в сводной таблице получается повторения в пересекающихся датах
kW0riLHOdOw.jpg
Всем заранее спасибо за ответы, бьюсь уже 2 сутки не понимаю, как исправить.
Я правильно понимаю, что из второй таблицы Вы хотите получить (и присоединить к первой таблице) записи с Датой: март, апрель, май?
Как получается исходная таблица? Что такое "Сценарий"? Почему 3 переменных?
Цитата: govorun от 22 октября 2020, 12:39:15 Я правильно понимаю, что из второй таблицы Вы хотите получить (и присоединить к первой таблице) записи с Датой: март, апрель, май?
Как получается исходная таблица? Что такое "Сценарий"? Почему 3 переменных?
Да, вы правильно поняли.
Исходная таблица -это загруженная таблица из xls, в столбцы Сценарий загружены название планов: план1,план2 и т.д.
Переменные формируют календари отдельно для "актуального плана" и "среднего плана".
По какому принципу выбирается минимальная и максимальная даты?
По большому счету у Вас все данные находятся в одной таблице. И это хорошо.
Если понять подход отбора минимальной и максимальной даты...
Цитата: govorun от 22 октября 2020, 12:38:08 По какому принципу выбирается минимальная и максимальная даты?
По большому счету у Вас все данные находятся в одной таблице. И это хорошо.
Если понять подход отбора минимальной и максимальной даты...
По полю дата находится минимальное и максимальное значение и группируется по сценарием. В итоге получаем таблицу с начальной и конечной датой каждого плана
Цитата: Manrus от 22 октября 2020, 12:49:30 В итоге получаем таблицу с начальной и конечной датой каждого плана
Зачем группировать? Минимальной и максимальной по всей таблице не достаточно?
Цитата: govorun от 22 октября 2020, 08:54:18 Зачем группировать? Минимальной и максимальной по всей таблице не достаточно?
В данном примере есть 3 плана каждый по 12 месяцев, засчет группировки мы находим начало и конец каждого плана
Если бы брали мин и макс по всей таблице мы бы ничего нового не получили, а также имели все те же 3 плана
В принципе я смог решить очень топорным методом, не понимаю как тоже самое сделать через exists
До сих пор не понятен принцип определения Min и Max даты.
Возможно нужно просто перебрать таблицу используя IF().
Вот примерный вариант решения (для 2-х планов), если захотите - переделаете под себя.
NoConcatenate
TMP_0:
LOAD
MIN(Дата) AS d1,
MAX(Дата) AS d2
RESIDENT [Исход];
LET vMin = Date(Peek('d1', 0, 'TMP_0'));
LET vMax = Date(Peek('d2', 0, 'TMP_0'));
Drop table TMP_0;
NoConcatenate
TMP_1:
LOAD DISTINCT
Дата
RESIDENT [Исход]
WHERE Дата >= DATE('$(vMin)') AND Дата <= DATE('$(vMax)');
LEFT JOIN (TMP_1)
LOAD
Дата,
Товар as Товар_1,
Сумма as Сумма_1
Resident Исход
where Сценарий = 'AAA'
AND (Дата <= DATE('$(vMax)')) ;
LEFT JOIN (TMP_1)
LOAD
Дата,
Товар as Товар_2,
Сумма as Сумма_2
Resident Исход
where Сценарий = 'SSS'
AND (Дата >= DATE('$(vMin)'));
NoConcatenate
TMP_2:
LOAD
Дата,
IF(ISNULL(Товар_1), Товар_2, Товар_1) AS Товар,
IF(ISNULL(Сумма_1), Сумма_2, Сумма_1) AS Сумма
Resident TMP_1;
DROP TABLES TMP_1, Исход;
Теперь про "Where not Exists([Дата])". Я таким условием не пользуюсь и могу ошибаться, но похоже, что проверка осуществляется не по предыдущей загруженной таблице, а по всем ранее загруженным и не удаленным таблицам. Опасная штука...
Цитата: govorun от 22 октября 2020, 10:23:47 Теперь про "Where not Exists([Дата])". Я таким условием не пользуюсь и могу ошибаться, но похоже, что проверка осуществляется не по предыдущей загруженной таблице, а по всем ранее загруженным и не удаленным таблицам. Опасная штука...
Спасибо за ваши ответы, проблема и правда оказалась в проверки по всем существующим таблицам, решил проблему сохранением файлов в отдельные qvd файлы и затем вновь загрузил их и "Where not Exists([Дата])" сработал
Удачи...