Статьи

Понимание предшествующих нагрузок

Некоторые функции QlikView Training не часто публикуются в блогах. Эти функции используются ежедневно, и разработчики часто не думают об этом. Если вы не знаете об этих методах, вам следует вернуться к ним, прежде чем читать эту статью Одна особенности , что мы будем говорить о сегодняшнем дне , является предыдущим.

Что такое предшествующая нагрузка?

Знание точно, что такое Предшествующая Нагрузка, будет здесь важно. Как следует из названия, предшествующая загрузка происходит до, до или перед другой загрузкой. Даже если вы не знаете об этом, вы, вероятно, уже использовали Preceding Load. Для базового примера Preceding Load, давайте представим, что есть оператор SQL  SELECT при загрузке из источника данных OLEDB или ODBC. Как вариант, мастер может добавить  LOAD раздел до  SELECT. Всегда рекомендуется использовать один из них перед загрузкой базы данных , так как это открывает полный диапазон синтаксиса, который недоступен в операторе SQL.

Распространенное недоразумение предшествующих грузов

Важно знать, что происходит в вашем сценарии загрузки до того, как вы застряли в Preceding Loads. Выполнение скрипта выполняется сверху вниз, затем слева направо параллельно с вкладками. ( Примечание . Функциональное отношение к вкладкам отсутствует; они предназначены только для очистки кода.)

Этот план выполнения будет изменен с помощью циклов и подпрограмм, но это утверждение все еще остается верным. Разница, однако, в том, что блоки LOAD могут быть сформированы вместе и выполнены снизу вверх. Смотрите простой SQL Preceding Load ниже:

DBPreceding
LOAD
          UserName,
          Password
          ;
SQL SELECT
          UserName,
          Password 
FROM MyServer.dbo.Credentials;          

Выполнение части SQL выполняется и обменивается сначала, а затем анализируется оператором LOAD выше. Когда мы попадаем в несколько покрытий или уровней предшествующих нагрузок, этот план загрузки снизу вверх остается верным.

Зачем применять предшествующую нагрузку?

Проще говоря, Предшествующая Нагрузка позволяет вам использовать значения, заимствованные в одной части нагрузки в той, которая находится над ней. Предположим, что из текстового файла загружены две даты. Чтобы узнать расстояние между этими двумя датами, мы должны изменить их с текстовых значений на числовые значения. Код без предшествующей загрузки будет выглядеть так:

NoPreceding:
LOAD
	Date(Date#(FromDate, 'YYYYMMDD'), 'DD MMM YYYY') as [From Date],
    Date(Date#(ToDate, 'YYYYMMDD'), 'DD MMM YYYY') as [To Date],
    Date#(ToDate, 'YYYYMMDD') - Date#(FromDate, 'YYYYMMDD') as Duration
FROM ..\SourceData\Durations.csv
(txt, codepage is 1252, embedded labels, delimiter is ',', msq);

Вы увидите, что код будет клонирован, так как мы меняем обе даты дважды (хотя мне недавно сообщил Генрик Кринстрем, что QlikView с его интеллектуальным кэшем не потребует вычисления значений дважды; клонирование — это неправильная вещь в отношении для сопровождения кода).

Мы можем устранить это клонирование с помощью простого Preceding Load. Это сделает код намного чище и сделает его более читабельным. Это будет выглядеть так:

SimplePreceding:
LOAD
	*
    [To Date] - [From Data] as Duration
    ;
LOAD
	Date(Date#(FromDate, 'YYYYMMDD'), 'DD MMM YYYY') as [From Date],
    Date(Date#(ToDate, 'YYYYMMDD'), 'DD MMM YYYY') as [To Date],
FROM ..\SourceData\Durations.csv
(txt, codepage is 1252, embedded labels, delimiter is ',', msq);

Вы увидите, что поля в нижней части нагрузки используются в приведенном выше. Обратите внимание  * на Preceding Load — это важно для перетаскивания полей вверх от нагрузки ниже к тому, что действительно загружено. Это создает две возможные трудности: сначала пропустить звездочку, после чего два поля даты не будут в окончательной модели данных; второе — клонирование поля с использованием имени поля в следующей загрузке, которое перетаскивается со звездочкой, которая затем снова используется в предшествующей загрузке. Эти трудности могут быть утомительными на месте. Более того, сообщение об ошибке из QlikView ( Примечание : используйте уникальные имена полей) не всегда указывает на правильную часть сценария загрузки, поэтому вам следует быть осторожным.

Обычно я бы рекомендовал не использовать  * (особенно при перетаскивании полей из базы данных), но они очень полезны в Preceding Loads. Обратите внимание , что вы также можете перетащить поля вверх, перечисляя их , если вам нужно всего лишь взять с екоторыми полями из вашей нижней части нагрузки к предыдущему.

Погружение глубже в предшествующие грузы

Вам не нужно останавливаться на достигнутом! Вы можете суммировать предшествующую нагрузку, если вам нужно рассчитать другое значение для полей, полученных из вашей предшествующей нагрузки. Взяв пример нашего интервала дат, мы могли бы затем суммировать другое поле в зависимости от того, был ли превышен порог.

Просто сложите другую нагрузку поверх предыдущей, как показано ниже:

SimplePreceding
LOAD
	*,
	[To Date] - [From Date] - as Duration
	;
LOAD    
	Date(Date#(FromDate, 'YYYYMMDD'), 'DD MMM YYYY') as [From Date],
    Date(Date#(ToDate, 'YYYYMMDD'), 'DD MMM YYYY') as [To Date],
FROM ..\SourceData\Durations.csv
(txt, codepage is 1262, embedded labels, delimiter is ',', msq);

Вы можете иметь неограниченное количество уровней нагрузки. И хотя это выглядит так, что вы, вероятно, что-то неправильно истолковали (например, BI-версию Inception ), Preceding Loads поможет вам не загромождать и упростить сценарий. Вы можете иметь выражения, которые используют поля с любого из уровней ниже для создания новых значений.

И наконец, хотя они не являются частью настоящей статьи «Возвращение к основам», я хотел бы сказать, что есть функции, которые вы можете использовать в своих предыдущих загрузках, которые вы ранее могли связывать только с первой позицией нагрузки. WHEREWHILEИ  GROUP BY  разрешаются использовать значение от предыдущей нагрузки. Вам не следует часто использовать эти функции, но вы должны  знать, как и почему они иногда используются.

Заключение

Ваш инструментарий загрузки скрипта QlikView с Preceding Loads позволяет вам создавать сложные выражения, сохраняя ваш код, просто разбивая вещи на куски размером с кусочек. Клонирование может быть устранено, и может быть улучшена ремонтопригодность, которая впечатляет для простой, небольшой техники.