Игнорирование фильтра

Автор govorun, 14 июня 2020, 01:09:53

« назад - далее »

govorun

Доброго дня.
В сводной таблице две меры.
Первая
Sum( {< DATE_1 = {"$(=max( DATE_1))"} >} SSS)   // DATE_1 - дата, SSS - суммаВторая
Sum( {< DATE_1 = {"$(=max( DATE_1, 3))"} >} SSS)Во второй мере выбирается значение за 3-ий предшествующий день.
Но вот беда - при применении фильтра (выбор только одной даты), вторая мера не рассчитывается.
Как выйти из ситуации?
Спасибо

Uunit

Попробуйте при загрузке скрипта задавать нужные переменные. В сводке используйте их, а не Функцию Max

govorun

#2
Пока решение такое:
Sum( { 1* < DATE_1 = {"$(=date(maxstring( DATE_1)-3))"} Но и здесь есть беда.
Если (maxstring( DATE_1)-3)) не существует, т.е. если список дат не сплошной.
Чего-то пока не получается заменить Дата-3 календарных на Дата-3 существующих в списке значений поля.

Про переменную можно чуть подробнее? Не совсем представляю порядок действий.

Uunit

Портфель:   // Загружаем ранее рассчитанный портфель
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] а на обозначенные выше переменные.

Если я правильно понял вашу задачу, то должно всё работать

govorun

Как-то так нацарапал:
Sum(
{< 
DATE_1 = {'$(=D2)'}
>}
SSS)
В таком виде показывает цифры за нужную дату. Но статично. Не реагирует на фильтр по датам.
Может я чего-то не понимаю...

Uunit

Вы определитесь, статичность должна быть или нет.
В первом сообщение, вы говорите, что вам нужна статичность по полю Дата, теперь говорите что её нет и для вас это проблема.

Видимо я не понял, чего именно вы хотите добиться.

govorun

#6
Может я криво написал, не буду спорить.
Но определюсь.
Две меры.
Первая рассчитывается исходя из максимальной даты.
Вторая рассчитывается как максимальная дата - 3.
При применении фильтра можно выбрать 4 даты подряд и тогда будет все здорово.
Но если выбрать одну дату, то первая мера рассчитывается правильно (как максимальная дата), а для второй меры нет данных, поскольку в фильтре только одна дата.

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

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

Sum( { 1* < DATE_1 = {"$(=date(max(      {< условие, что MAX(DATE_1, 1) = дате фильтра >}         DATE_1, 3)))"}

Uunit

Ясно, тогда то что предлагал выше, вам не пойдёт.
Добавьте проверку используя weekday.
Если weekday будет равен 5, то вычитать от макс даты надо 4, если равен 6, то вычитать 5.
Костыль, но работать будет.

govorun


Яндекс.Метрика