Сегодня расскажу о еще одной базовой функции агрегирования данных: Only(),  что эта за функция, где и когда ее можно использовать. Ну, и по традиции, в конце покажу реальный пример в приложении QlikView. 

Что такое Only()?

Обращаемся к руководству QlikView:

Функция Only() возвращает значение, если есть только один возможный результат, который может быть получен из агрегированных данных. Например, при поиске одного продукта, где стоимость единицы = 9, будет возвращено значение NULL, если стоимость единицы 9 есть у нескольких продуктов.

То есть, что это означает? Наша функция Only() возвращает значение параметра, но только если есть только одно возможное значение. Следовательно:

  • если в нашей таблице связь «один-к-одному» между таблицей размеров и параметров, функция Only() возвращает значение обратно.
  • если есть несколько значений («связь один-ко многим»), она возвращает значение NULL.

Типы связей в модели данных

Синтаксис:  

Only([{SetExpression}] [TOTAL [<fld {,fld}>]] expr)

Тип возврата данных: dual

Когда использовать функцию Only()

Когда вы вводите выражение (формулу), следует внимательно подумать, какую именно из функций агрегирования стоит использовать в данном случае. Другими примерами подобных функций являются Sum()  и Count(). Такие функции используются в случае, когда вам нужно обработать группу данных и найти одно значение, которое будет репрезентировать всю выборку.

Only() относится к разряду статистических (по другому агрегатных) функций. Это значит, что обработав массив данных, она возвращает единственное (одно) значение.  Если вам нужно использовать NULL, чтобы репрезентировать несколько значений, тогда вам подходит функция Only() и вы можете оставить формулу в первоначальном виде.

Для цифр лучше использовать Sum(), Avg() или Min(),для рядов Only() или MinString(), а для того, чтобы отладить результат (для отладки) всегда можно применить что-то вроде  “Concat(distinct <Field>, ‘,’)” и проанализировать результат. Но, в любом случае, не стоит оставлять выражение без агрегирующей функции.

Примеры использования функции Only()

Что делать разработчику QlikView, если пользователь вводит выражение, которому “не хватает” явной функции агрегирования? Например, если нужно отсортировать данные по дате, или нам нужно установить расширенный поиск по клиентам компании с применением выражения “=Product=’Shoe” (наша цель отследить покупателей, которые приобрели определенный продукт). Для этого как раз и будем использовать функцию Only(), которая будет работать как критерий поиска и сортировки по датам.

НА ЗАМЕТКУ! Функция будет работать при единственно возможном значении Даты или Продукта.  

Only(): для анализа деятельности менеджеров по продажам

А теперь, давайте разберем использование функции на конкретном примере.  В данном случае мы изучаем статистику по работе менеджеров по продажам.

1 шаг. Загружаем скрипт

загрузка скрипта QlikView

2 шаг.  После перезагрузки табличка с данными выглядит так:

Таблица данных для приложения QlikView

Наша таблица ранжирована по цене. Однако, поскольку мы анализируем работу сейлзменов, именно их колонку и следует сделать своего рода заглавной.

Таблица данных для приложения QlikView

Если мы применим функцию Only (Sales) к колонке, отображающей количество продаж, функция вернет число “10”, поскольку оно является единственным значением для этой колонки. А в том случае, когда мы хотим проанализировать доход от продаж, следует применить функцию Only(Price*Quantity).

В результате мы получим число, отображающее средний доход от продаж. Таким образом, несложно догадаться, что функция НЕ будет возвращать значения для Роберта, ведь возвращенными значениями являются 80 (2*40) и 30(1*30).

Таблица данных для приложения QlikView

Теперь давайте добавим в критерии анализа цену. В данном случае система вернет значения для Роберта, поскольку она увидит комбинацию значений “Роберт 2” и “Роберт 3” как одно целое.

Однако, это лишь один пример использования функции Only(). Функция активно применяется для анализа множеств, но подробнее об этом расскажу в одном из следующих постов.

Поделитесь, как вы используете функцию Only() в работе!

Спасибо.