Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Здравствуйте!
Хотел с Вами посоветоваться по одному вопросу.
Есть таблица на планирование, в которую подтягиваются данные из файла заказы ВЭД и других источников.
Все показатели я рассчитал и сделал.
Вопрос возникает по колонкам 5-7. Нужно чтобы в зависимости от наличия заказов в файле Excel, динамически менялось количество колонок в Таблице на планирование Qlik, нужно чтобы каждый отдельный заказ выводился в новую колонку (период - с начала текущей недели, старые не нужны).
Я решил эту задачу следующим образом:
Ввел переменные дат:
let v_weekstart_day = Day (weekstart(today ()));
let v_weekstart_day_3 = Day (weekstart(today ())+3);
let v_weekstart_day_4 = Day (weekstart(today ())+4);
let v_weekstart_day_5 = Day (weekstart(today ())+5);
let v_weekstart_day_6 = Day (weekstart(today ())+6);
let v_weekstart_day_7 = Day (weekstart(today ())+7);
let v_weekstart_day_10 = Day (weekstart(today ())+10);
let v_weekstart_day_11 = Day (weekstart(today ())+11);
let v_weekstart_day_12 = Day (weekstart(today ())+12);
let v_weekstart_day_13 = Day (weekstart(today ())+13);
let v_weekstart_day_14 = Day (weekstart(today ())+14);
let v_weekstart_day_15 = Day (weekstart(today ())+17);
let v_weekstart_day_16 = Day (weekstart(today ())+18);
let v_weekstart_day_17 = Day (weekstart(today ())+19);
let v_weekstart_day_18 = Day (weekstart(today ())+20);
Ввел переменные с названиями контрагентов:
SET v_zakaz_1='ПК 33';
SET v_zakaz_2='линии';
SET v_zakaz_3='Молдова';
SET v_zakaz_4='ПК 34';
SET v_zakaz_5='Юни';
SET v_zakaz_6='ПК 35';
SET v_zakaz_7='';
SET v_zakaz_8='';
SET v_zakaz_9='';
SET v_zakaz_10='';
(сделал запасные, если они будут добавляться)
И для каждого из контрагентов я прописываю выражение для каждого дня начиная с v_weekstart_day и заканчивая v_weekstart_day_18.
Выражение эти следующие:
SUM({<[Год] = {$(v_current_year)},[№_недели] = {$(v_current_week)},[№_дня] = {$(v_weekstart_day)}, [Заказчик] = {'$(v_zakaz_1)'}>} [Заказы])
Метка:
Заказы $(v_zakaz_1) $(v_current_week) (тек) неделя $(v_weekstart_day) число
В Условный я пишу:
SUM({<[Год] = {$(v_current_year)},[№_недели] = {$(v_current_week)},[№_дня] = {$(v_weekstart_day)}, [Заказчик] = {'$(v_zakaz_1)'}>} [Заказы])>0
чтобы не выводил нули.
Задачу я решил, но решение это уязвимое.
Во-первых, таким образом можно выводить заказы только на определенный период вперед (неделя, две, три), а хотелось бы от этой зависимости уйти, и выводить на неопределенное количество дней вперед начиная от начала текущей недели.
Во-вторых, у нас возникает жесткая привязка с перечнем контрагентов, который может меняться. Пользователь вряд ли сможет добавить еще десяток-другой выражений в таблицу Qlik самостоятельно.
Могли бы вы посоветовать более оптимальный путь решения этой задачи? Все необходимое во вложении.
Спасибо!
Здравствуйте, Александр
Самый простой способ - использовать сводную таблицу. Пример в приложении. Отдельная таблица для общих показателей и сводная для показателей заказчиков. С помощью слоев можно совмещать таблицы со статичным и динамическим количеством столбцов.
Из недостатков: динамические показатели должны располагаться последними, экспорт в excel будет работать неправильно.
Сложный способ - макросы, которые на основании значений загруженной таблицы будет создавать и удалять столбцы в исходной таблицы. Основной недостаток - неработоспособность на разных платформах.
Максим, можно ли насчет слоев поподробнее? я не знаком с этим инструментом.
У каждого объекта на листе задан свой слой: свойства объекта, вкладка Layout - блок Layer. Там несколько переключателей. При наложении объектов Layer определяет видимость. По смыслу они аналогичны инструментам работы со слоями в MS Office:
Bottom - на задний план
Top - на передний план
Custom - можно задать порядковый номер слоя: чем больше число, тем выше объект.
В примере сводная таблица имеет настройку Bottom. Поэтому при наложении мы не видим часть, которая пересекается с обычной таблицей.
Нет, слои точно не подходят, так как нужно в Excel отправлять.