Подводные камни фильтров NPrinting – Часть 1 (даты и двойные значения)
При переходе с NPrinting 16 на NPrinting 17 (и выше) я обратил внимание на один очень интересный аспект – фильтры.
В NPrinting 16 есть довольно хорошо зарекомендовавшие себя и хорошо проработанные функции фильтров, позволяющие пользователям фильтровать значения измерений, применять закладки, применять фильтры на основе поиска значений, создавать фильтры показателей (например, «Продажи» > 250), фильтры переменных/переменных входных данных. И все это в мире NPrinting 17 перевернулось с ног на голову, и в конечном итоге изменилось.
Что изменилось:
Типы данных – NPrinting 17 распознает теги или типы данных полей, которые вы пытаетесь фильтровать. Из своих наблюдений (которые я усвоил на собственном горьком опыте) я пришел к следующим выводам:
Если поле загружается как двойное, хотя оно обычно отображается в виде текста в пользовательском интерфейсе, данные в его основе рассматриваются как числовые/целочисленные и они нужны в числовом фильтре NPrinting. Это – самая распространенная ошибка, и часто люди попадают в ловушку с такими параметрами, как «Месяц», где они выбирают фильтр: «Значение: Янв», а такое не работает, поскольку NPrinting ожидает, что они выберут «Числовое значение: 1».
На скриншоте ниже двойные значения в пользовательском интерфейсе по умолчанию показаны как текст, но вы можете изменить их формат пользовательского интерфейса на числа. Это четко указывается при предварительном просмотре тегов полей в модели данных.
Скриншот экрана QlikView показывает, как двойное значение может отображаться в виде числа и текста
Фильтры дат - здесь у нас есть 3 ловушки:
Во-первых, дата, скорее всего, двойная. Вы, вероятно, увидите даты в пользовательском интерфейсе, отформатированные на ваш вкус (ММ-ДД-ГГГГ или ДД/МММ/ГГ и т. д.). Но это не имеет значения, если дата двойная, поскольку все, что вам нужно, это числовое значение вашей даты. Даты можно сохранять как последовательные порядковые номера, чтобы их можно было использовать в расчетах. 31 декабря 1899 года – это порядковый номер 1, а 1 января 2008 года – это порядковый номер 39448, потому что это 39447 дней после 31 декабря 1899 года. Итак, чтобы отфильтровать двойные даты, вы должны указать в фильтре числовое значение. Это сильно зависит от того, как вы моделируете свои данные в приложении Qlik, и мало что можно с этим поделать, если они уже есть в NPrinting. На данном этапе это то, что есть!
Это то, что возникает, когда вы начинаете вводить значение (но не увлекайтесь – это может быть неправильное предложение)
Правильно примененный фильтр в NPrinting для даты, сохраненной как двойная, должен выглядеть следующим образом:
Двойные даты еще менее снисходительны, так как могут не отображать временную часть. Например, вы видите в поле Qlik Sense/QlikView поле date = 01/01/2008, которое хранится как отметка времени и фактически может быть 01/01/2008 12:00 PM. Это означает, что ваше числовое значение будет 39448,5, так что, как вы можете видеть, в вашем числовом представлении метки времени есть десятичная точка, что отличает значение от 39448, которое было бы просто датой. Мой обычный совет - применять функцию Floor() во время загрузки модели данных скриптом Qlik. Он удаляет десятичные дроби и гарантирует, что они будут сохранены в поле.
В этом же посте у вас может быть еще одна ловушка при работе с «Evaluate value» в фильтрах NPrinting. Если вы используете такие функции, как MonthEnd(), WeekEnd(), они вернут метку времени, а также конец периода, например, если сегодня 15.02.2019, MonthEnd (Today()) вернет 28.02.2019 11:59 : 59 вечера. Поэтому снова вам нужно обернуть формулу в функцию Floor(), чтобы возвращать только целое число/день.
образец даты возврата формулы за последний день предыдущей недели
Вышеупомянутые сценарии кратко описаны в справочном документе здесь: https://help.qlik.com/en-US/nprinting/February2019/Content/NPrinting/ReportsDevelopment/Static-dynamic-filters.htm#anchor-2
Я всегда предлагаю зайти туда для справки, так как разные версии NPrinting предоставляют новые функции и работают по-разному, поэтому, чтобы найти ответ на проблему, с которой вы сталкиваетесь с помощью вашей версии, используйте справку как первоисточник.