Неофициальный форум пользователей Qlik Sense & Qlikview

Для разработчиков => Вопросы по Qlik Sense & QlikView => Тема начата: govorun от 14 июня 2020, 01:09:53

Название: Игнорирование фильтра
Отправлено: govorun от 14 июня 2020, 01:09:53
Доброго дня.
В сводной таблице две меры.
Первая
Sum( {< DATE_1 = {"$(=max( DATE_1))"} >} SSS)   // DATE_1 - дата, SSS - суммаВторая
Sum( {< DATE_1 = {"$(=max( DATE_1, 3))"} >} SSS)Во второй мере выбирается значение за 3-ий предшествующий день.
Но вот беда - при применении фильтра (выбор только одной даты), вторая мера не рассчитывается.
Как выйти из ситуации?
Спасибо
Название: Re: Игнорирование фильтра
Отправлено: Uunit от 15 июня 2020, 08:53:48
Попробуйте при загрузке скрипта задавать нужные переменные. В сводке используйте их, а не Функцию Max
Название: Re: Игнорирование фильтра
Отправлено: govorun от 15 июня 2020, 09:22:23
Пока решение такое:
Sum( { 1* < DATE_1 = {"$(=date(maxstring( DATE_1)-3))"} Но и здесь есть беда.
Если (maxstring( DATE_1)-3)) не существует, т.е. если список дат не сплошной.
Чего-то пока не получается заменить Дата-3 календарных на Дата-3 существующих в списке значений поля.

Про переменную можно чуть подробнее? Не совсем представляю порядок действий.
Название: Re: Игнорирование фильтра
Отправлено: Uunit от 16 июня 2020, 09:09:32
Портфель:   // Загружаем ранее рассчитанный портфель
LOAD
     День
FROM
[D:\User\Desktop\Для отчёта\_ДПС\qvd\Портфель.qvd]
(qvd);

Max_date:         // Определяем Максимальную дату в предыдущем портфеле
NoConcatenate
load
Max(День) as Max_Date
Resident Портфель;
LET vDate_1=Date(FieldValue('Max_Date',1));
LET vDate_3=Date(FieldValue('Max_Date',1)-3);
DROP Table Max_date;             
DROP Table Портфель;

Поясняю.
1) Берём нужный нам файл.
2) Определяем в нём макс дату
3) Присваиваем vDate_1 и vDate_3
4) В таблице ссылаетесь не на [DATE_1] а на обозначенные выше переменные.

Если я правильно понял вашу задачу, то должно всё работать
Название: Re: Игнорирование фильтра
Отправлено: govorun от 16 июня 2020, 08:05:01
Как-то так нацарапал:
Sum(
{< 
DATE_1 = {'$(=D2)'}
>}
SSS)
В таком виде показывает цифры за нужную дату. Но статично. Не реагирует на фильтр по датам.
Может я чего-то не понимаю...
Название: Re: Игнорирование фильтра
Отправлено: Uunit от 17 июня 2020, 08:37:54
Вы определитесь, статичность должна быть или нет.
В первом сообщение, вы говорите, что вам нужна статичность по полю Дата, теперь говорите что её нет и для вас это проблема.

Видимо я не понял, чего именно вы хотите добиться.
Название: Re: Игнорирование фильтра
Отправлено: govorun от 17 июня 2020, 09:06:39
Может я криво написал, не буду спорить.
Но определюсь.
Две меры.
Первая рассчитывается исходя из максимальной даты.
Вторая рассчитывается как максимальная дата - 3.
При применении фильтра можно выбрать 4 даты подряд и тогда будет все здорово.
Но если выбрать одну дату, то первая мера рассчитывается правильно (как максимальная дата), а для второй меры нет данных, поскольку в фильтре только одна дата.

Во втором посте есть вариант решения, но он работает если список дат сплошной.
А если список не сплошной, например нет данных за выходные дни. Выбираем вторник - первая мера рассчитается нормально, а вторая мера захочет данные за субботу (вторник - 3). А их нет. Следовательно нужно взять данные за пятницу.

Вот и получается, что для первой меры нужно условие
MAX(DATE, 1)для второй меры нужно условие
MAX(DATE, 3)Т.е. опираться не на календарные даты, а на даты, существующие в таблице.

Sum( { 1* < DATE_1 = {"$(=date(max(      {< условие, что MAX(DATE_1, 1) = дате фильтра >}         DATE_1, 3)))"}
Название: Re: Игнорирование фильтра
Отправлено: Uunit от 18 июня 2020, 08:41:05
Ясно, тогда то что предлагал выше, вам не пойдёт.
Добавьте проверку используя weekday.
Если weekday будет равен 5, то вычитать от макс даты надо 4, если равен 6, то вычитать 5.
Костыль, но работать будет.
Название: Re: Игнорирование фильтра
Отправлено: govorun от 18 июня 2020, 07:44:06
спасибо, попробую