Часть 6. Синтаксис скрипта и функции диаграммы

Учебник QlikView (Qlik Sense). Часть 6. Синтаксис скрипта и функции диаграммы.

Содержание

Синтаксис скрипта и функции диаграммы

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

Скрипт состоит из ряда последовательно выполняемых операторов.

Синтаксис командной строки QlikView (и Qlik Sense) и синтаксис скриптов описываются в нотации, называемой формой Backus-Naur или кодом BNF.

Первые строки кода автоматически генерируются при создании нового файла QlikView (и Qlik Sense). Значения по умолчанию для этих переменных интерпретации чисел выводятся из региональных настроек ОС.

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

Табличный файл, в котором применяется разделитель в виде запятой, символа табуляции или точки с запятой, допускает использование оператора LOAD. По умолчанию оператор LOAD загружает все поля файла.

Для доступа к общей базе данных необходимо использовать Microsoft ODBC. Здесь используются стандартные операторы SQL. Принятый в операторе SQL синтаксис отличается в разных драйверах ODBC.

Все операторы скрипта должны заканчиваться точкой с запятой: «;».

Подробное описание синтаксиса скрипта представлено в темах этого раздела.

Что такое форма Backus-Naur?

Синтаксис командной строки QlikView (и Qlik Sense) и синтаксис скриптов описываются в нотации, называемой формой Backus-Naur, известной также как код BNF.

В следующей таблице представлен список символов, используемых в коде BNF, с описанием их интерпретации:

| Логическая операция OR: символ можно использовать с любой стороны.
( ) Скобки очередности выполнения: используются для структурирования синтаксиса BNF.
[ ] Квадратные скобки: заключенные в них элементы являются необязательными.
{ } Фигурные скобки: заключенные в них элементы могут повторяться ноль и более раз.
Символ Нетерминальная синтаксическая категория: может быть разделена на другие символы. Например на составляющие вышеуказанного, другие нетерминальные символы, текстовые строки и т. д.
::= Отметка начала блока, определяющего символ.
LOAD Терминальный символ, состоящий из текстовой строки. Записывается как есть в скрипт.

Все терминальные символы напечатаны полужирным шрифтом. Например, «(» следует интерпретировать как скобки, определяющие порядок выполнения, а «(» следует интерпретировать как символ скрипта.

Пример:

Описание оператора alias:

alias fieldname as aliasname { , fieldname as aliasname}

Это следует интерпретировать как текстовую строку «alias», за которой следует произвольное имя поля, а потом текстовая строка «as» и произвольное имя псевдонима. Можно задать любое число дополнительных комбинаций «fieldname as alias», используя запятую в качестве разделителя.

Например, верными являются следующие операторы:

alias a as first;
alias a as first, b as second;
alias a as first, b as second, c as third;

Следующие операторы являются неверными:

alias a as first b as second;
alias a as first { , b as second };

Функции

Функция — это тип процедуры или порядок действий, в результате которых выполняется определенная задача в отношении данных в документах. QlikView (и Qlik Sense) обеспечивает несколько сотен функций, которые можно использовать в различных целях, например: выполнение вычислений, интерпретация данных или системной информации, определение условий и т. д.

Многие функции можно использовать как в редакторе скриптов, так и в диаграммах. Некоторые функции используются только в диаграммах (функции диаграммы), другие используются в редакторе скриптов (функции скрипта).

Часто, но не всегда, функции используются в выражениях.

В следующем списке показано несколько примеров функций:

  • Max: функция агрегирования, которую можно использовать в скриптах и диаграммах.

    Например: Max(Sales) вычисляет наибольшее значение в поле Sales.

  • IF: условная функция, которую можно использовать в скриптах и диаграммах.

    Например: IF(Amount>0, 'OK','Alarm') определяет, выполнено ли условие «is the value of Amount greater than zero?». Если это условие выполнено, будет указано значение OK, если нет, то будет указано значение Alarm.

  • Date#: функция интерпретации, которую можно использовать в скриптах и диаграммах.

    Например функция Date#(A) берет вводимое значение A и оценивает его как дату.

Выражения скрипта

Выражения можно использовать как в операторе LOAD, так и SELECT. Описываемые в данном разделе синтаксис и функции применяются к оператору LOAD, а не к оператору SELECT, поскольку последний интерпретируется драйвером ODBC, а не программой QlikView (и Qlik Sense). Тем не менее большинство драйверов ODBC зачастую могут интерпретировать ряд описанных ниже функций.

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

Все выражения в скрипте QlikView (и Qlik Sense) возвращают число и/или строку, в зависимости от ситуации. Логические функции и операторы возвращают значение 0 для элемента False и -1 для элемента True. Преобразования числа в строку и наоборот являются неявными. Логические операторы и функции интерпретируют значение 0 как False, а все остальные как True.

Ниже представлен общий синтаксис выражения:

expression ::= (constant constant |
fieldref |
operator1 expression |
expression operator2 expression |
function |
( expression ) )

где

элемент constant — строка (текст, дата или время), заключенная в одиночные прямые кавычки, или число. Константы записываются без разделителя тысяч, а в качестве разделителя десятичной части используется десятичный разделитель.

fieldref — имя поля загруженной таблицы.

элемент operator1 — унарный оператор (работающий над одним выражением, справа).

элемент operator2 — бинарный оператор (работающий над двумя выражениями, по одному с каждой стороны).

function ::= functionname( parameters)

parameters ::= expression { , expression }

Число и типы параметров не являются произвольными. Они зависят от используемой функции.

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

Выражения диаграммы

Выражение — это комбинация функций, полей и математических операторов (+ * / =). Выражения используются для обработки данных в документе, чтобы выдать результат, который можно увидеть в диаграмме. Их можно использовать не только с мерами. Можно построить более динамичные и наглядные диаграммы с выражениями для заголовков, подзаголовков, сносок и даже измерений.

Это значит, например, что вместо заголовка диаграммы, который является статичным текстом, можно использовать выражение, результат которого изменяется в зависимости от выборки.

Определение объема агрегирования

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

  • Значение измерения (в случае агрегирования в выражении диаграммы)
  • Выборки

Вместе эти факторы определяют объем агрегирования. Возможны ситуации, когда необходимо проигнорировать в вычислениях выборку и/или измерение. В функциях диаграммы это можно достичь с помощью префикса TOTAL, анализа множеств или их комбинации.

Способ Описание
Префикс TOTAL

Использование префикса total в функции агрегирования игнорирует значение измерения.

Агрегирование будет выполнено в отношении всех возможных значений поля.

После префикса TOTAL может быть указан список, включающий одно или несколько имен полей в угловых скобках. Эти имена полей должны быть поднабором переменных измерений диаграммы. В этом случае при вычислении будут проигнорированы все переменные измерений диаграммы, кроме перечисленных, то есть одно значение возвращается для каждого сочетания значений полей в перечисленных полях измерений. Поля, которые в текущий момент не являются измерением в диаграмме, могут также включаться в список. Это может быть полезно для измерений группы, в которых поля измерений не фиксированы. Перечисление всех переменных в группе вызывает выполнение функции при изменении уровня детализации.

Анализ множеств Использование анализа множеств в агрегировании переопределяет выбор. Агрегирование будет выполнено в отношении всех значений по всем измерениям.
Префикс TOTAL и анализ множеств

Использование префикса TOTAL и анализа множеств в агрегировании переопределяет выбор и игнорирует измерения.

ПрефиксALL

Использование префикса ALL в агрегировании игнорирует выбор и измерения. Аналогичный результат можно достичь с помощью оператора анализа множеств {1} и префикса TOTAL :

=sum(All Sales)

=sum({1} Total Sales)

Пример: Префикс TOTAL

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

Year Quarter Sum(Amount) Sum(TOTAL Amount) Sum(Amount)/Sum(TOTAL Amount)
3000 3000 100%
2012 Q2 1700 3000 56,7%
2013 Q2 1300 3000 43,3%

Пример: Анализ множеств

В следующем примере показано, как анализ множеств может быть использован для сравнения наборов данных перед выполнением выборок. При условии, что выбран элемент Q2, при использовании анализа множеств с установленным описанием {1} рассчитывается сумма всех значений без учета выборок, которые не разделены измерениями.

Year Quarter Sum(Amount) Sum({1} Amount) Sum(Amount)/Sum({1} Amount)
3000 10800 27,8%
2012 Q1 0 1100 0%
2012 Q3 0 1400 0%
2012 Q4 0 1800 0%
2012 Q2 1700 1700 100%
2013 Q1 0 1000 0%
2013 Q3 0 1100 0%
2013 Q4 0 1400 0%
2013 Q2 1300 1300 100%

Пример: Префикс TOTAL и анализ множеств

В следующем примере показано, как анализ множеств и префикс TOTAL можно совместить для сравнения наборов данных перед выполнением выборок и по всем измерениям. При условии, что выбран элемент Q2, при использовании анализа множеств с установленным описанием {1] и префикса TOTAL рассчитывается сумма всех значений без учета выборок и измерений.

Year Quarter Sum(Amount) Sum({1} TOTAL Amount) Sum(Amount)/Sum({1} TOTAL Amount)
3000 10800 27,8%
2012 Q2 1700 10800 15,7%
2013 Q2 1300 10800 12%

Данные, используемые в примерах:
AggregationScope:
LOAD * inline [
Year Quarter Amount
2012 Q1 1100
2012 Q2 1700
2012 Q3 1400
2012 Q4 1800
2013 Q1 1000
2013 Q2 1300
2013 Q3 1100
2013 Q4 1400] (delimiter is ' ');

Специальные функции агрегирования поля ввода

Пользуйтесь информацией из раскрывающегося списка по каждой функции, чтобы увидеть краткое описание и синтаксис каждой функции. Дополнительную информацию можно получить, если щелкнуть имя функции в описании синтаксиса.

Следующие специальные функции агрегирования можно использовать с полями ввода.

inputavg

inputavg() возвращает агрегированное среднее значение inputfield, повторяемое в измерении(ях) диаграммы. inputfield должен состоять из имени поля, корректно описанного в скрипте в качестве поля ввода.

inputavg ([inputfield [, distribution_mode][set_expression])

inputsum

Функция Avg() находит среднее значение агрегированных данных в выражении в нескольких записях, как это определено предложением group by.

inputsum ([inputfield [, distribution_mode][set_expression])

inputavg

inputavg() возвращает агрегированное среднее значение inputfield, повторяемое в измерении(ях) диаграммы. inputfield должен состоять из имени поля, корректно описанного в скрипте в качестве поля ввода.

Синтаксис:
inputavg(inputfield [, distribution_mode][set_expression])

При использовании этой функции агрегирования в виде выражения в табличной диаграмме агрегированное значение можно редактировать в интерактивном режиме. При наведении курсора на ячейку выражения появится значок ввода. Нажатием на значок можно установить ячейку в режим редактирования ввода. Для перемещения по ячейкам во время нахождения в режиме редактирования ввода можно использовать клавиши со стрелками вверх/вниз. Изменение агрегированного значения распространяется на исходные значения поля с помощью выбранного distribution_mode. Каждый раз при вводе новых значений весь документ QlikView (и Qlik Sense) будет пересчитан в автоматическом режиме.

Параметр distribution_mode может иметь следующие значения:

Параметр Описание
'+' Режим по умолчанию. Изменения равными частями распространяются на все исходные значения.
'*' Изменение на исходные значения распространяется пропорционально (имеющимся значениям).
'=' Введенное значение присваивается всем исходным значениям.
'/'

Значение разделяется равными частями между исходными значениями без учета предыдущего распределения, но с сохранением предыдущего среднего значения.

Значения distribution_mode в предыдущей таблице можно изменить с помощью следующих модификаторов:

Модификатор Описание
T Например, '+T'. Вызовет компенсацию введенного изменения в других выбранных значениях в поле ввода (не затрагивая общий итог).
A Например, '+A'. Вызовет компенсацию введенного изменения во всех других значениях в поле ввода (не затрагивая общий итог).

Примеры:
inputavg (Budget )
inputavg (Budget, '+' )
inputavg (Budget, '*' )
inputavg (Budget, '=' )
inputavg (Budget, '/' )
inputavg (Budget, '+T' )
inputavg (Budget, '+A' )

inputsum

inputsum() возвращает агрегированную сумму inputfield, повторяемую в измерении(ях) диаграммы. inputfield должен состоять из имени поля, корректно описанного в скрипте в качестве поля ввода.

Синтаксис:
inputsum(inputfield [, distribution_mode][set_expression])

При использовании этой функции агрегирования в виде выражения в табличной диаграмме агрегированную сумму можно редактировать в интерактивном режиме. При наведении курсора на ячейку выражения появится значок ввода. Нажатием на значок можно установить ячейку в режим редактирования ввода. Для перемещения по ячейкам во время нахождения в режиме редактирования ввода можно использовать клавиши со стрелками вверх/вниз. Изменение агрегированной суммы распространяется на исходные значения поля с помощью выбранного distribution_mode. Каждый раз при вводе новых значений весь документ QlikView (и Qlik Sense) будет пересчитан в автоматическом режиме.

Параметр distribution_mode может иметь следующие значения:

Параметр Описание
'+' Режим по умолчанию. Изменения равными частями распространяются на все исходные значения.
'*' Изменение на исходные значения распространяется пропорционально (имеющимся значениям).
'=' Введенное значение присваивается всем исходным значениям.
'/'

Значение разделяется равными частями между исходными значениями без учета предыдущего распределения, но с сохранением предыдущей суммы.

Значения distribution_mode в предыдущей таблице можно изменить с помощью следующих модификаторов:

Модификатор Описание
T Например, '+T'. Вызовет компенсацию введенного изменения в других выбранных значениях в поле ввода (не затрагивая общий итог).
A Например, '+A'. Вызовет компенсацию введенного изменения во всех других значениях в поле ввода (не затрагивая общий итог).

Примеры:
inputsum (Budget )
inputsum (Budget, '+' )
inputsum (Budget, '*' )
inputsum (Budget, '=' )
inputsum (Budget, '/' )
inputsum (Budget, '+T' )
inputsum (Budget, '+A' )

Анализ множества и выражения множества

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

Обычно при совершении выборки функции агрегирования, такие как Sum, Max, Min, Avg и Count, выполняют агрегирование совершенных выборок: текущие выборки. Ваши выборки автоматически определяют набор данных, в отношении которых выполняется агрегирование. С помощью анализа множества можно определить группу, независимую от текущих выборок. Это может быть полезным в том случае, если необходимо узнать точное значение, например долю продукта на рынке по всем регионам, независимо от текущих выборок.

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

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

Создание выражений множества

Перед тем как рассматривать различные аспекты примера анализа множества необходимо определить различие между выражением множества и анализом множества:

Определение множества значений поля считается определением выражения множества, тогда как использование выражений множества для анализа данных считается анализом множества. Следовательно, в остальной части данного раздела говорится о выражении множества и его компонентах.

Ниже приведен пример анализа множества: sum( {$<Year={2009}>} Sales ), где {$<Year={2009}>} является выражением множества.

Существует два общих синтаксических правила для выражения множества:

  • Выражение множества должно использоваться в функции агрегирования. В этом примере функцией агрегирования является sum(Sales).
  • Выражение множества должно быть заключено в скобки {}. В этом примере выражением множества является: {$<Year={2009}>}.

Выражение множества состоит из комбинации следующих частей:

  • Identifiers. Один или несколько идентификаторов определяют отношение между выражением множества и тем, что оценивается в остальной части выражения. Простое выражение множества состоит из одиночного идентификатора, например знака доллара США {$}, что означает все записи в текущей выборке.
  • Operators. Если идентификаторов несколько, для обновления множества данных используется один или несколько операторов. Обновление выполняется путем определения способа объединения множеств данных, представленных идентификаторами, для создания подмножества или супермножества, например.
  • Modifiers. Для изменения выборки в выражение множества можно добавить один или несколько модификаторов. Модификатор можно использовать самостоятельно или для изменения идентификатора для фильтра множества данных.

Примеры:

Пример 1:

{$<Year={2009}>}

Выражение множества содержит идентификатор $ и модификатор <Year={2009>}. В этом примере оператор отсутствует. Выражение множества интерпретируется следующим образом: «Все записи в текущей выборке, которые принадлежат 2009 году».

Пример 2:

Sum({$<Year={2009}>+1<Country={"Sweden"}>} Sales)

Данное выражение множества содержит идентификатор $ и 1, оператор +, а также модификаторы <Year={2009}> и <Country={'Sweden'}>.

Данное выражение множеств разработано для суммирования продаж за 2009 год относительно текущих выборок, а также для добавления полного набора данных, связанных со страной Sweden , за все года.

Выражения множества можно использовать только в выражениях для диаграмм, но не в выражениях скрипта.

Идентификаторы, операторы и модификаторы описаны более детально в следующих подразделах.

Идентификаторы

Идентификаторы определяют отношение между выражением множества и значениями поля или оцениваемым выражением.

В нашем примере sum( {$<Year={2009}>} Sales ) идентификатором является знак доллара $, он означает, что множество записей для оценки состоит из всех записей текущей выборки. Этот набор в дальнейшем фильтруется частью модификатора выражения множества. В более сложном выражении множества два идентификатора можно объединить с помощью оператора.

В этой таблице показано несколько обычных идентификаторов.

Идентификатор Описание
1 Представляет полное множество всех записей в приложении, независимо от выборок.
$ Представляет записи текущей выборки. Выражение множества {$}, таким образом, эквивалентно неутверждению выражения множества.
$1 Представляет предыдущую выборку. $2 представляет предыдущую предпоследнюю выборку и т. д.
$_1 Представляет следующую (стоящую впереди) выборку. $_2 представляет следующую предпоследнюю выборку и т. д.
BM01 Можно использовать любой ID закладки или имя закладки.
MyAltState Можно ссылаться на выборки, выполненные в другом состоянии, по их имени состояния.

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

Пример Результат
sum ({1} Sales) Возвращает общий объем продаж для документа, игнорируя выборки, но не измерение.
sum ({$} Sales) Возвращает продажи для текущей выборки, т. е. это то же самое, что элемент sum(Sales).
sum ({$1} Sales) Возвращает продажи для предыдущей выборки.
sum ({BM01} Sales)

Возвращает продажи для закладки с именем BM01.

Операторы

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

В этой таблице показаны операторы, которые можно использовать в выражениях множества.

Оператор Описание
+ Объединение. Данная бинарная операция возвращает множество, состоящее из записей, принадлежащих любому из двух операндов множества.
- Исключение. Данная бинарная операция возвращает множество записей, принадлежащих первому из двух операндов множества. Также, при использовании в качестве унарного оператора, она возвращает дополнительное множество.
* Пересечение. Данная бинарная операция возвращает множество, состоящее из записей, принадлежащих обоим операндам множества.
/ Симметрическая разность (XOR). Данная бинарная операция возвращает множество, состоящее из записей, принадлежащих любому из операндов множества, но не обоим.

В этой таблице показано несколько примеров с операторами.

Примеры Результаты
sum( {1-$} Sales ) Возвращает продажи для всего, исключенного выборкой.
sum( {$*BM01} Sales ) Возвращает продажи для пересечения между выборкой и закладкой BM01.
sum( {-($+BM01)} Sales )

Возвращает продажи, исключенные выборкой и закладкой BM01

Sum({$<Year={2009}>+1<Country={"Sweden"}>} Sales) Возвращает продажи за 2009 год в отношении текущей выборки и добавляет полный набор данных, связанных со страной Sweden , за все года.

Модификаторы

Модификаторы используются для внесения дополнений или изменений в выборку. Подобные изменения могут быть записаны в выражении множества. Модификатор состоит из нескольких имен поля, после каждого указана одна или несколько выборок, которые можно выполнить в поле. Модификаторы начинаются и заканчиваются угловыми скобками <>.

Модификатор множества изменяет выбор предыдущего идентификатора множества. Если отсутствует ссылка на идентификатор множества, состояние текущей выборки будет implicit.

В этой таблице показано несколько примеров с модификаторами.

Пример Результат
sum({$<OrderDate = DeliveryDate>} Sales) Возвращает продажи для текущей выборки, где OrderDate = DeliveryDate.
sum({1<Region = {US}>} Sales) Возвращает продажи в регионе US, игнорируя текущую выборку.
sum({$<Region = >} Sales) Возвращает продажи для выборки, но выборка в элементе Region удаляется.
sum({<Region = >} Sales)

Возвращает то же, что и в примере выше. Если идентификатор множества для изменения отсутствует, используется унаследованое состояние.

sum({$<Year={2000}, Region={“U*”}>} Sales) Возвращает продажи для текущей выборки, но с новыми выборками в элементах Year и Region.

Синтаксис для множеств

Полный синтаксис (не включая дополнительное использование стандартных скобок для определения последовательности) описан с помощью формы Backus-Naur:

set_expression ::= { set_entity { set_operator set_entity } }
set_entity ::= set_identifier [ set_modifier ]
set_identifier ::= 1 | $ | $N | $_N | bookmark_id | bookmark_name
set_operator ::= + | — | * | /
set_modifier ::= < field_selection {, field_selection } >
field_selection ::= field_name [ = | += | –= | *= | /= ] element_set_expression
element_set_expression ::= element_set { set_operator element_set }
element_set ::= [ field_name ] | { element_list } | element_function
element_list ::= element { , element }
element_function ::= ( P | E ) ( [ set_expression ] [ field_name ] )
element ::= field_value | " search_mask "

Модификаторы множества

Множество может быть изменено дополнительной или измененной выборкой. Подобное изменение может быть записано в выражении множества.

Модификатор состоит из одного или нескольких имен полей, за каждым из которых следует выборка, которая должна быть составлена на основе поля и заключена в < и >. Например: <Year={2007,+2008},Region={US}>. Имена полей и значения полей можно заключить в кавычки как обычно, например: <[Sales Region]={’West coast’, ’South America’}>.

Модификатор множества изменяет выбор предыдущего идентификатора множества. Если отсутствует ссылка на идентификатор множества, состояние текущей выборки будет implicit.

Существует несколько способов определить выборку, как описано ниже.

На основе другого поля

Простым случаем является выборка на основе выбранных значений другого поля, например: <OrderDate = DeliveryDate>. Данный модификатор возьмет выбранные значения из элемента DeliveryDate и применит их в качестве выборки к элементу OrderDate. Если присутствует множество уникальных значений (больше пары сотен), то данная операция потребует большой загрузки ЦП, поэтому ее следует избегать.

На основе множеств элементов (список значений поля в модификаторе)

Наиболее распространенным случаем является выборка, основанная на списке значений поля, заключенном в фигурные скобки, значения разделены запятыми. Например: <Year = {2007, 2008}>. Здесь фигурные скобки определяют множество элементов, в котором элементы могут быть значениями поля или поисками значений поля. Поиск всегда определяется использованием двойных кавычек. Например, элемент <Ingredient = {"*Garlic*"}> выберет все ингредиенты, включая строку «чеснок». В поиске учитывается регистр, поиск выполняется для всех исключенных значений.

Принудительное исключение

Наконец, для полей в режиме логического «И» существует также возможность принудительного исключения. При необходимости принудительно исключить определенные значения поля потребуется использовать знак « ~ » (тильда) перед именем поля.

Примеры и результаты:
Примеры Результаты
sum( {1<Region= {USA} >} Sales ) Возвращает продажи в регионе USA, игнорируя текущую выборку
sum( {$<Region = >} Sales ) Возвращает продажи для текущей выборки, но выборка в элементе «Region» удаляется.
sum( {<Region = >} Sales )

Возвращает то же, что и в примере выше. Если множество для изменения отсутствует, используется знак $.

Синтаксис в двух предыдущих примерах интерпретируется как «выборки отсутствуют» в поле «Region», т. е. будут возможны все регионы, которым присвоены другие выборки. Не эквивалентен синтаксису <Region = {}> (или любому другому тексту с правой стороны от знака равенства, неявно возникшему в результате пустого множества элементов), интерпретируемому как «регион отсутствует».

sum( {$<Year = {2000}, Region = {US, SE, DE, UK, FR}>} Sales ) Возвращает продажи для текущей выборки, но с новыми выборками в элементах «Year» и «Region».
sum( {$<~Ingredient = {“*garlic*”}>} Sales )

Поле Ingredient находится в режиме логич. "И".

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

sum( {$<Year = {“2*”}>} Sales ) Возвращает продажи для текущей выборки, но все года начинаются на цифру «2», т. е. в поле «Year» выбран год 2000 и далее.
sum( {$<Year = {“2*”,”198*”}>} Sales ) Как и выше, но также 1980-е годы включены в выборку.
sum( {$<Year = {“>1978<2004”}>} Sales ) Возвращает продажи для текущей выборки, но с числовым поиском, который используется для охвата диапазона лет для суммирования продаж.

Модификаторы множества с операторами множества

Выборка в поле может быть определена с помощью операторов множества при работе с различными множествами элементов. Например, модификатор <Year = {"20*", 1997} — {2000}> выберет все года, начиная с «20» в дополнение к «1997», кроме«2000».

Примеры и результаты:
Примеры Результаты
sum( {$<Product = Product + {OurProduct1} – {OurProduct2} >} Sales ) Возвращает продажи для текущей выборки, но в список выбранных продуктов добавляется продукт «OurProduct1» и удаляется продукт «OurProduct2».
sum( {$<Year = Year + ({“20*”,1997} – {2000}) >} Sales )

Возвращает продажи для текущей выборки, но с дополнительными выборками в поле «Year»: 1997 и все годы, начинающиеся с «20» — за исключением 2000 года.

Обратите внимание, что в случае включения значения 2000 в текущую выборку оно останется включенным и после изменения.

sum( {$<Year = (Year + {“20*”,1997}) – {2000} >} Sales )

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

sum( {$<Year = {“*”} – {2000}, Product = {“*bearing*”} >} Sales )

Возвращает продажи для текущей выборки, но с новой выборкой в поле «Year»: все года, кроме 2000; и только для продуктов, содержащих строку «произведение».

Модификаторы множества, использующие назначения с операторами множества implicit

Эта нотация определяет новые выборки, игнорируя текущие выборки в поле. Однако, если требуется основать выборку на текущей выборке в поле и добавить значения поля, например, необходим модификатор <Year = Year + {2007, 2008}>. Простой и эквивалентный способ записать это — <Year += {2007, 2008}>, т. е. оператор назначения неявно определяет объединение. Также неявные пересечения, исключения и симметрические разности могут быть определены с помощью элементов “*=”, “–=” и “/=”.

Примеры и результаты:
Примеры Результаты
sum( {$<Product += {OurProduct1, OurProduct2} >} Sales )

Возвращает продажи для текущей выборки, но с использованием неявного объединения для добавления продуктов «OurProduct1» и «OurProduct2» в список выбранных продуктов.

sum( {$<Year += {“20*”,1997} – {2000} >} Sales )

Возвращает продажи для текущей выборки, но с использованием неявного объединения для добавления нескольких годов в выборку: 1997 и все годы, начинающиеся с «20» — за исключением 2000 года.

Обратите внимание, что в случае включения значения 2000 в текущую выборку оно останется включенным и после изменения. То же, что и <Year=Year + ({“20*”,1997}–{2000})>.

sum( {$<Product *= {OurProduct1} >} Sales )

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

Модификаторы множества с расширенным поиском

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

Примеры и результаты:
Примеры Результаты
sum( {$–1<Product = {“*Internal*”, “*Domestic*”}>} Sales )

Возвращает продажи для текущей выборки за исключением транзакций, относящихся к продуктам со строкой «Internal» или «Domestic» в имени продукта.

sum( {$<Customer = {“=Sum({1<Year = {2007}>} Sales ) > 1000000”}>} Sales )

Возвращает продажи для текущей выборки, но с новой выборкой в поле «Customer»: только клиенты, общая сумма продаж которых в 2007 г. составила больше 1 000 000.

Модификаторы множества с расширениями со знаком доллара

В выражениях множества могут использоваться переменные и другие расширения со знаком доллара.

Примеры и результаты:
Примеры Результаты
sum( {$<Year = {$(#vLastYear)}>} Sales )

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

sum( {$<Year = {$(#=Only(Year)-1)}>} Sales )

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

Модификаторы множества с определениями значений поля implicit

Далее описано, как определить множество значений поля с помощью вложенного определения множества.

В подобных случаях должны использоваться функции элементов P() и E(), представляющие множество элементов возможных значений и исключенные значения поля, соответственно. В скобках можно указать одно выражение множества и одно поле. Например: P({1} Customer). Эти функции не могут использоваться в других выражениях.

Примеры и результаты:
Примеры Результаты
sum( {$<Customer = P({1<Product={‘Shoe’}>} Customer)>} Sales )

Возвращает продажи для текущей выборки, но только для тех клиентов, которые когда-либо покупали продукт «Shoe». Здесь функция элемента P( ) возвращает список возможных клиентов, подразумеваемых выборкой «Shoe» в поле Product.

sum( {$<Customer = P({1<Product={‘Shoe’}>})>} Sales )

Так же, как выше. Если в функции элемента поле опущено, функция вернет возможные значения для поля, указанного во внешнем назначении.

sum( {$<Customer = P({1<Product={‘Shoe’}>} Supplier)>} Sales )

Возвращает продажи для текущей выборки, но только для тех клиентов, которые когда-либо поставляли продукт «Shoe». Здесь функция элемента P( ) возвращает список возможных поставщиков, подразумеваемых выборкой «Shoe» в поле Product. Список поставщиков затем используется в качестве выборки в поле Customer.

sum( {$<Customer = E({1<Product={‘Shoe’}>})>} Sales )

Возвращает продажи для текущей выборки, но только для тех клиентов, которые никогда не покупали продукт «Shoe». Здесь функция элемента E( ) возвращает список исключенных клиентов, которые исключены выборкой «Shoe» в поле Product.

Выражение диаграммы и синтаксис агрегирования

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

Общий синтаксис выражений диаграммы

expression ::= ( constant |
expressionname |
operator1 expression |
expression operator2 expression |
function |
aggregation function |
(expression ) )

где

элемент constant — строка (текст, дата или время), заключенная в одиночные прямые кавычки, или число. Константы записываются без разделителя тысяч, а в качестве разделителя десятичной части используется десятичный разделитель.

элемент expressionname — имя (метка) другого выражения в той же диаграмме.

элемент operator1 — унарный оператор (работающий над одним выражением, справа).

элемент operator2 — бинарный оператор (работающий над двумя выражениями, по одному с каждой стороны).

function ::= functionname ( parameters )

parameters ::= expression { , expression }

Число и типы параметров не являются произвольными. Они зависят от используемой функции.

aggregationfunction ::= aggregationfunctionname ( parameters2 )

parameters2 ::= aggrexpression { , aggrexpression }

Число и типы параметров не являются произвольными. Они зависят от используемой функции.

Общий синтаксис для агрегирования

aggrexpression ::= ( fieldref |
operator1 aggrexpression |
aggrexpression operator2 aggrexpression |
functioninaggr |
( aggrexpression ) )

Элемент fieldref является именем поля.

functionaggr ::= functionname ( parameters2 )

Выражения и функции, следовательно, могут свободно размещаться до тех пор, пока элемент fieldref включен в одну определенную функцию агрегирования, при условии, что QlikView (и Qlik Sense) не выдаст сообщений об ошибках, когда выражение возвращает интерпретируемое значение.

Примеры описателей агрегирования

Эти примеры выполнены с помощью функции Sum — функция диаграммы и могут применяться ко всем функциям агрегирования диаграммы, поддерживающим определения анализа множеств и префикс total.

Пример 1:

Рассмотрим следующее представление прямой таблицы, показывающей логическое состояние перед выполнением выборки:

Month Group Sum(Value) sum(total Value) sum({1} total Value)
21 21 21
1 A 1 21 21
1 B 2 21 21
2 A 3 21 21
2 B 4 21 21
3 A 5 21 21
3 B 6 21 21

Второй и третий столбец выражений имеют одинаковые числа во всех строках. Это число равно итогу вычислений в первом столбце выражений.

Теперь давайте выберем только месяцы 1 и 2. Результат будет следующим:

Month Group Sum(Value) sum(total Value) sum({1} total Value)
10 10 21
1 A 1 10 21
1 B 2 10 21
2 A 3 10 21
2 B 4 10 21

Результат третьего выражения (пятый столбец) не изменится, так как определение set игнорирует текущие выборки. Второе выражение (четвертый столбец) с описателем total показывает новый результат 10, равный сумме первого выражения (третий столбец).

Пример 2:

Посмотрите на представление следующей прямой таблицы:

Month Group Sum(Value) sum(total "Month" Value) sum(total "Group" Value)
21 21 21
1 A 1 3 9
1 B 2 3 12
2 A 3 7 9
2 B 4 7 12
3 A 5 11 9
3 B 6 11 12

В третьем столбце выражения (sum(total<Month> Val)) для каждого месяца рассчитывается одна итоговая сумма.

В четвертом столбце выражения (sum(total<Grp> Val)) для каждой группы рассчитывается одна итоговая сумма.

Примеры функций Concat

Не следует путь функцию CONCAT() с ключевым словом скрипта CONCATENATE.

В простейшей форме функция Concat() используется для объединения вместе значений, слов, выборки в одну строку. Однако ее можно использовать различным образом для решения различных проблем. Все примеры основаны на следующей таблице:

Table MyColumn Date Value
Data JKL 01/01/2012 11
Data1 VWX 01/02/2012 13
Data GHI 01/03/2012 13
Data ABC 01/04/2012 15
Data1 STU 01/05/2012 18
Data1 PQR 01/06/2012 10
Data1 MNO 01/07/2012 25
Data DEF 01/08/2012 11

Простое объединение строк

Как было отмечено ранее, функция concat позволяет объединить целый ряд значений в одну строку. Эти значения могут быть жестко прописаны или определяться в зависимости от выбранных значений или данных.

=CONCAT(MyColumn,',')

=CONCAT(DISTINCT MyColumn,',')

Данное простое выражение concat объединяет в одну строку все возможные значения из столбца MyColumn. Можно также добавить ключевое слово DISTINCT. При этом каждое значение будет отображаться в строке только один раз.

ABC,DEF,GHI,JKL,MNO,PQR,STU,VWX

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

=CONCAT(MyColumn, ',', Date)

Результат: JKL,VWX,GHI,ABC,STU,PQR,MNO,DEF

Функция Concat() внутри выражения/оператора Set

Передача нескольких динамических значений в выражение для анализа множеств

Иногда требуется передать в оператор set динамическую выборку значений.. Для этого необходимо добавить несколько одиночных кавычек в строку, чтобы функция CONCAT() возвращала что-то наподобие 'JKL','VWX'. Однако одиночные кавычки нельзя использовать, поскольку они будут обрабатываться при оценке выражения Concat, а не во время оценки оператора set. Вместо этого используйте функцию Chr():

=CONCAT(Chr(39)&MyColumn&Chr(39),',')

Затем можно передать этот оператор concat внутрь выражения:

=Sum({<MyColumn={$(=CONCAT(Chr(39)&MyColumn&Chr(39),','))}>} Value)

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

Функция Concat() в скрипте

Функцию Concat также можно использовать в скрипте для преобразования нескольких строк в одно значение состояние из одного столбца, точно так же, как любое другое объединение.

Для исходных данных, которые применялись ранее, результат стороны скрипта CONCAT будет следующим:

ConcatExample:
Load Table,
Concat(MyColumn, ',') as CombinedData
Resident Temp
Group by Table;

Далее приведен результат функции скрипта:

Table CombinedDate
Data ABC,DEF,GHI,JKL
Data1 MNO,PQR,STU,VWX

Использование функции Rank() для воздействия на функцию Concat()

Как только вы начнете использовать другие функции вместе с функцией concat(), вы начнете получать более понятные результаты. В данном примере с помощью функции Rank() выбирались три лучших работника (на основе значения) и объединялись вместе в одну строку.

=CONCAT(IF(aggr(Rank(sum(Value)),MyColumn)<=3,MyColumn),',')

Результат: ABC,MNO,STU

Примеры альтернативных состояний в выражениях диаграммы

Эти примеры предназначены для того, чтобы продемонстрировать рекомендации по использованию альтернативных состояний разработчиками QlikView (и Qlik Sense) и/или опытными пользователями QlikView (и Qlik Sense). Эти примеры доступны в файле: ‘Alternate States Functionality.qvw’

Синхронизация выборок между состояниями

Следующие выражения можно использовать в одной диаграмме:

count({$} DISTINCT [номер накладной])

count({State1} DISTINCT [номер накладной])

count({State2} DISTINCT [номер накладной])

Существует проблема этого метода; разработчику QlikView (и Qlik Sense) необходимо дублировать выборки (списки и мультисписки) для всех трех состояний, чтобы конечный пользователь мог создавать соответствующие выборки для различных состояний. Во многих случаях разработчику QlikView (и Qlik Sense) потребуется иметь набор «общих» выборок, доступных для всех состояний. Это позволит конечному пользователю определять содержание для различных диаграмм, а затем использовать определенные выборки, чтобы продемонстрировать различия состояний. Анализ Множеств может использоваться с состояниями для сохранения определенных выборок между различными состояниями.

count({State1<Year = $::Year, Month = $::Month>} DISTINCT [номер счета-фактуры])

count({State2<Year = $::Year, Month = $::Month>} DISTINCT [номер счета-фактуры])

Разработчик QlikView (и Qlik Sense) сохранит выборки Year и Month в состояниях State1 и State2, синхронизированными с выборками Year и Month в состоянии по умолчанию. Разработчик QlikView (и Qlik Sense) может добавить необходимые элементы к модификаторам набора для синхронизации еще большего числа полей между состояниями.

Операторы установки

С состояниями можно использовать операторы установки (+, *, -, /). Следующие выражения являются действительными и будут рассчитывать уникальные номера накладных в состоянии по умолчанию или состоянии State1.

Примеры:

count({$ + State1} DISTINCT [номер счета-фактуры])
будут подсчитаны уникальные номера накладных в объединении состояний <default> и State1.

count({1 — State1} DISTINCT [номер счета-фактуры])
будут подсчитаны уникальные номера накладных не в состоянии State1.

count({State1 * State2} DISTINCT [номер счета-фактуры])
будут подсчитаны уникальные номера накладных в обоих состояниях <default> и State1.

При использовании операторов установки подобным образом следует проявлять осторожность. В некоторых случаях это может привести к непредвиденным результатам. Это обусловлено тем, что выборки в определенном состоянии создают набор данных, который может не быть полностью совместимым с набором(-ами), с которым он объединяется. Это особенно верно с повышением сложности модели данных.

Явные определения значения поля

Другой способ использования операторов установки — это функции элементов P() и E(). Эти функции доступны только в выражениях набора.

Примеры:

count({$<[номер накладной] = p({State1} [номер накладной])>} DISTINCT [номер накладной])
Это выражение подсчитывает уникальные номера накладных в состоянии <default> на основе возможных номеров накладных, доступных в состоянии State1.

Это почти, но не полностью эквивалентно следующему выражению:

count({$<[номер накладной] = State::[номер накладной]>} DISTINCT [номер накладной])

Различие между выражениями заключается в том, что в первом выражении возможные номера накладных из состояния State1 передаются в состояние по умолчанию. Во втором выражении выбранные значения из состояния State1 передаются в состояние по умолчанию. Если пользователь не создал выборки номеров накладных в состоянии State1, в состояние по умолчанию не будут переданы номера накладных

Операторы установки лучше всего использовать с модификаторами набора. Следующее выражение выполняет поиск пересечения возможных номеров накладных из состояний State1 и State2 и передает эти значения в номера накладных в состоянии по умолчанию.

Примеры:

count({$<[номер накладной] = p({State1} [номер накладной]) * p({State2} [номер накладной])>} DISTINCT [номер накладной])
Выражение для поиска пересечения номеров накладных в состояниях <default> и State1:

Счетч.({$<[номер накладной] = p({$} [номер накладной]) * p({State1} [номер накладной])>} DISTINCT [номер накладной])

Это выражение может казаться запутанным, поскольку использует состояние (<default> в данном примере) в функции элемента и идентификаторе набора. Необходимо помнить, что функция элемента p($) возвращает возможные значения в состоянии по умолчанию. Идентификатор набора/состояния {$} изменяется результатов функций элемента. Все выборки накладных, существующие в состоянии по умолчанию, переопределяются значениями из пересечения функций элементов.

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

Примеры:

count({$<[номер накладной] = p({$} [номер накладной]) * p({State1<Year = $::Year, Month = $::Month>} [номер накладной])>} DISTINCT [номер накладной])

Как и раньше, разработчик QlikView (и Qlik Sense) может добавлять поля в модификатор для синхронизации выборок между различными состояниями.

Примеры Функций Классификации Диаграмм

Данные примеры относятся к функции rank(VRank), но похожим образом могут применяться и к функции HRank. Обратите внимание, что функция HRank употребляется только в сводных таблицах.

Пример 1:

Изучите прямые таблицы с двумя измерениями, расположенные ниже:

Month sum(Val) rank(sum(Val))
110 -
1 17 3
2 9 7
3 22 1
4 16 4
5 10 6
6 5 8
7 11 5
8 20 2

Month sum(Val) rank(sum(Val))
110 -
3 22 1
8 20 2
1 17 3
4 16 4
7 11 5
5 10 6
2 9 7
6 5 8

Обе таблицы одинаковы, но первая таблица отсортирована по первому столбцу, а вторая таблица отсортирована по последнему столбцу. Это служит примером базовой функции rank. Наивысшее значение имеет наивысший ряд (низшее число классификации).

Функция rank всегда возвращает NULL во всех строках Итого.

Пример 2:

Изучите сводную таблицу с двумя измерениями, расположенную ниже:

Group Month sum(Val) rank(sum(Val)) rank(total sum(Val))
A 1 17 2 3
4 16 3 4
7 11 4 5
8 20 1 2
Total 64 - -
B 2 9 3 7
3 22 1 1
5 10 2 6
6 5 4 8
Total 46 - -
Total 110 - -

Эта таблица основана на тех же данных, что и две таблицы из первого примера. Сейчас можно увидеть, как текущий сегмент столбца является внутренней группировкой в случае с несколькими измерениями. Поле Месяц в группе A классифицируется отдельно от поля Месяц в группе B. Общей классификации можно снова достичь путем введения классификатора total.

Пример 3:

В этом примере показано действие различных режимов для числового представления классификации. Изучите таблицу, расположенную ниже:

Month sum(X) rank(sum(X)) mode=0 mode=1 mode=2 mode=3 mode=4
86 - - - - - -
4 20 1 1 1 1 1 1
2 12 2–3 2 2 2.5 3 2
7 12 2–3 2 2 2.5 3 3
3 10 4–5 4.5 4 4.5 5 5
5 10 4–5 4.5 4 4.5 5 4
8 9 6 6 6 6 6 6
6 7 7 7 7 7 7 7
1 6 8 8 8 8 8 8

В третьем столбце показана классификация текстовых представлений, а в столбце 4 — 8 показано числовое представление той же классификации в различных режимах. Выражение в каждом столбце:

num( rank( sum( X ), mode ))

где mode от 0 до 4.

Режим 0 (по умолч.)В строках 2 и 3 располагается одна и та же классификация, но они явно располагаются в нижней половине всей классификации. Следовательно, их числовое представление округляется с понижением до 2. Строки 4 и 5 также находится в одной классификации, но они попадают в позицию выше середины таблицы классификации. Поэтому они получают среднее числовое представление между первой и последней строкой в столбце ((1+8)/2=4,5). Этот режим особенно полезен при использовании Визуальные Подсказки для обозначения наивысшей и наинизшей позиций классификации данных внутри группы.

Режим 1В обоих случаях используется более низкое число классификации внутри группы, т.е. 2 для строк 2 и 3, 4 для строк 4 и 5.

Режим 2В обоих случаях используется среднее число между наинизшей и наивысшей позиции классификации внутри группы, т.е. 2,5 ((2+3)/2) для строк 2 и 3, 4,5 ((4+5)/2) для строк 4 и 5.

Режим 3В обоих случаях используется более высокое число классификации внутри группы, т.е. 3 для строк 2 и 3, 5 для строк 4 и 5.

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

Пример 4:

В этом примере показано действие различных форматов для текстового представления функции классификации. Изучите таблицу, расположенную ниже:

Month sum(X) rank(sum(X),0,0) rank(sum(X),0,1) rank(sum(X),0,2)
86 - - -
4 20 1 1 1
2 12 2–3 2 2
7 12 2–3 2
3 10 4–5 4
5 10 4–5 4 4
8 9 6 6 6
6 7 7 7 7
1 6 8 8 8

Столбцы 3 – 5 показывают текстовое представление одной и той же функции представления с разными значениями параметра format.

Формат 0 (по умолч.) Строки с одинаковой классификацией показаны в виде «низкое значение — высокое значение», например, '2 — 3' и '4 — 5'.

Формат 1 Строки с одинаковой классификацией всегда получают число более низкого ряда в качестве текстового представления, например, в этом случае 2 для строк 2 и 3.

Формат 2 Одина строка в каждой группе с одной и той же классификацией получает число низкого ряда в качестве текстового представления, а остальные строки внутри группы получают пустую строку. Порядок внутри этих групп, использующих одну и ту же классификацию, определяется порядком сортировки измерений диаграммы.

Примеры Межзаписных Функций Диаграмм

Примеры функции Top

Данные примеры относятся к функции top, но похожим образом могут применяться и к функциям bottom, first и last. Обратите внимание, что функции first и last употребляются только в сводных таблицах.

Пример 1:

Изучите прямую таблицу, расположенную ниже, на которой показано использование функции top в таблице с одним измерением:

Month sum(Val) top(sum(Val)) sum(Val)/top(sum(Val))
21 3 700%
1 3 3 100%
2 7 3 233%
3 11 3 367%

При наличии одного измерения функция top всегда ссылается к первой строке данных таблицы (Без учета строки Итого).

Обратите внимание на то, что использование функции top также обязательно оценивается в строке Итого, т.к. Итого явно относится к определенному сегменту столбца, а в этом случае – ко всему столбцу.

Пример 2:

Ниже приводится прямая таблица с двумя измерениями, первично отсортированная в поле Grp.

Month Grp sum(Val) top(sum(Val)) top(total sum(Val))
21 - 1
1 A 1 1 1
2 A 3 1 1
3 A 5 1 1
1 B 2 2 1
2 B 4 2 1
3 B 6 2 1

Функция top без классификатора total теперь возвращает выражение, оцененное в верхней строке во внутренней группе сортировки (В этом случае – в измерении Grp). Одно значение возвращается для Grp = A и одно для Grp = B.

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

Выражение с использованием функции top без классификатора total будет оцениваться как NULL в строке Итого, т.к. оно не может явно ассоциироваться с определенным сегментом столбца.

Сейчас мы конвертируем прямую таблицу, описанную выше, в сводную таблицу при включении всех Итогов.

Month Grp sum(Val) top(sum(Val)) top(total sum(Val))
1 A 1 1 1
B 2 1 1
Total 3 1 -
2 A 3 3 1
B 4 3 1
Total 7 3 -
3 A 5 5 1
B 6 5 1
Total 11 5 -
Total 21 - 1

Выражение с использованием функции top без классификатора total будет оцениваться как NULL в строке Итого, т.к. оно не может явно ассоциироваться с определенным сегментом столбца. Несмотря на это, все частичные суммы будут оцениваться для каждого сегмента столбца.

В выражении с классификатором total нет значений в частичных итогах, но это выражение возвращает значение в строке Общий итог.

Пример 3:

Изучите следующую прямую таблицу, отсортированную в поле Grp:

Month Grp sum(Val) top(sum(Val)) sum(Val)/top(sum(Val))
21 - -
1 A 1 1 100%
2 A 3 1 300%
3 A 5 1 500%
1 B 2 2 100%
2 B 4 2 200%
3 B 6 2 300%

Мы можем изменить межполевой порядок сортировки так, чтобы диаграмма была первично отсортирована в поле Месяц. Таблица будет иметь следующий вид:

Month Grp sum(Val) top(sum(Val)) sum(Val)/top(sum(Val))
21 - -
1 A 1 1 100%
1 B 2 1 200%
2 A 3 3 100%
2 B 4 3 133%
3 A 5 5 100%
3 B 6 5 120%

Примеры функции Above

Данные примеры относятся к функции above, но похожим образом могут применяться и к функциям below, before и after. Обратите внимание, что функции before и after употребляются только в сводных таблицах.

Пример 4:

Изучите прямую таблицу, расположенную ниже, на которой показано использование функции above в таблице с одним измерением:

Month sum(Val) above(sum(Val)) sum(Val)/above(sum(Val))
21 - -
1 3 - -
2 7 3 233%
3 11 7 157%

В третьем столбце показано выражение sum(Val) с оценкой на одну строку выше текущей, что можно подтвердить сравнением со значениями для sum(val) во втором столбце. Функция above возвращает NULL на первую строку, т.к. выше нет строки, в которой можно оценить выражение. Функция above всегда возвращает NULL на все строки Итого.

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

Пример 5:

Изучите сводную таблицу с двумя измерениями, расположенную ниже:

Grp Month sum(Val) above(sum(Val)) above(total sum(Val))
A 1 1 - -
2 3 1 1
3 5 3 3
Total 9 - -
B 1 2 - 5
2 4 2 2
3 6 4 4
Total 12 - -
Total 21 - -

Функция above без классификатора total (третий столбец) действует только в каждой группе сортировки. Значение NULL возвращается на верхнюю строку каждого сегмента столбца.

При добавлении классификатора total (четвертый столбец) весь столбец рассматривается в качестве одного сегмента столбца. Только верхняя строка возвращает NULL. Все строки Итого игнорируются и возвращают NULL.

Примеры функций RowNo и NoOfRows

В данном случае рассматриваются примеры употребления функций RowNo и NoOfRows, но похожим образом употребляются и функции ColumnNo и NoOfColumns. Обратите внимание, что функции ColumnNo и NoOfColumns употребляются только в сводных таблицах.

Пример 6:

Изучите сводную таблицу с двумя измерениями, расположенную ниже:

Month Grp rowno() rowno(total) noofrows() noofrows(total)
1 A 1 1 2 6
B 2 2 2 6
Total 0 - 2 -
2 A 1 3 2 6
B 2 4 2 6
Total 0 - 2 -
3 A 1 5 2 6
B 2 6 2 6
Total 0 - 2 -
Total - 0 - 6

Столбец 3 Функция RowNo возвращает номер строки в каждом сегменте столбца в группе сортировки. В строках подитогов возвращается число строк 0, т.к. эти итоги явно относятся к определенному сегменту столбца. В строке Общий итог возвращается NULL.

Столбец 4 С классификатором total функция RowNo возвращает число строк в целом столбце. В строках подитогов возвращается значение NULL. В строке Общий итог возвращается 0.

Столбец 5 Функция NoOfRows возвращает номер строк данных в каждом сегменте столбца в группе сортировки. В строках подитогов возвращается то же число, что и в строках данных. В строке Общий итог возвращается NULL.

Столбец 6 С классификатором total функция NoOfRows возвращает число строк данных в целом столбце, которое является таким же, что возвращается в строке Общий итог. В строках подитогов возвращается NULL.

dimensionality ( )

В сводной таблице со столбцами с тремя измерениями слева возвращаются:

3 для всех ячеек простых данных.

2 для частичных сумм 1-го уровня и записей, не имеющих расширения в 3-м столбце.

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

0 для ячейки Общий итог.

dimensionality ( )

Country Team Salesman dimensionality()
Denmark Copenhagen Preben 3
Total 2
Total 1
Germany + 1
Sweden Gothenburg John 3
Total 2
Lund + 2
Total 1
Total 0
Country Team Salesman dimensionality()
0
Denmark Copenhagen Preben 3
Germany Berlin Helga 3
Sweden Gothenburg John 3
Sweden Lund Ann 3
Sweden Lund Peter 3

secondarydimensionality ( )
Country Denmark +Germany
Salesman Total Preben
Team Total Copenhagen
0 1 2 3 1

Вычисляемые формулы

В диалоговом окне свойств листов и объектов листов QlikView (и Qlik Sense) задан ряд свойств, разрешающих использование фиксированных текстовых меток и чисел. Они, как правило, используются в качестве меток, заголовков окон, заголовков диаграмм и, в некоторых случаях, в качестве фиксированных числовых пределов.

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

Ввод вычисляемой формулы

Вычисляемые формулы вводятся с использованием следующего синтаксиса:

= expression

Синтаксис допустимых выражений описан в разделе, приведенном ниже.

Знак равенства перед записью указывает на то, что следующая за ним часть должна интерпретироваться как выражение. QlikView (и Qlik Sense) попытается проанализировать выражение. Если это не возможно, например из-за использования неверного синтаксиса, то будет отображаться вся метка, включая знак равенства.

Вычисляемые формулы также можно создавать в диалоговом окне Редактировать выражение, которое открывается при нажатии кнопки … возле поля ввода.

Сообщ. Ошибки

Если вычисляемая формула не может быть верно рассчитана в QlikView (и Qlik Sense), будет выполнен возврат формулы, после которой будет указано две косые черты и сообщение об ошибке.

Пример:

= mode(x) //out of object memory

Для любой вычисляемой формулы требуется определенная свободная память. Для экономии памяти в программу введен лимит на допустимое выделение памяти для каждой вычисляемой метки. Если введено слишком сложное выражение, QlikView (и Qlik Sense) вернет это выражение, после которого будет указано сообщение об ошибке «// out of object memory».

Синтаксис выражений для вычисляемых формул

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

  • Поскольку отсутствуют измерения, по которым выполняются итерации, функции агрегирования диаграммы действуют так же, как и в выражениях диаграммы, где префикс total ставится перед всеми именами полей. Описатель total, таким образом, является необязательным и не имеет особого значения в вычисляемых формулах. Определения set действуют так же, как и в выражениях диаграммы, т. е. они управляют агрегированием выборки, не являющейся текущей.

  • В рассчитываемых формулах имена полей могут использоваться без функции агрегирования. В этом случае only будет использоваться в качестве функции агрегирования.

Пример:

= Currency

is equal to

= only(Currency)

Операторы

В этом разделе описаны операторы, которые можно использовать в программе QlikView (и Qlik Sense). Существует два типа операторов:

  • унарные операторы (принимают только один операнд);
  • бинарные операторы (принимают два операнда).

Большинство операторов являются бинарными.

Побитовые операторы

Все побитовые операторы преобразуют (усекают) операнды в целые (32-разрядные) числа со знаком и возвращают результат тем же способом. Все операции выполняются поразрядно (бит за битом). Если операнд не может быть интерпретирован как число, операция возвратит значение NULL.

bitnot Побитовое отрицание.

Унарный оператор. Операция применяет логическое отрицание к каждому биту операнда.

Пример:

Элемент bitnot 17 возвращает -18

bitand Побитовое И.

Операция применяет логическое И к каждому биту операндов.

Пример:

Элемент 17 bitand 7 возвращает 1

bitor Побитовое ИЛИ.

Операция применяет логическое ИЛИ к каждому биту операндов.

Пример:

Элемент 17 bitor 7 возвращает 23

bitxor Побитовое исключающее ИЛИ.

Операция применяет логическое исключающее ИЛИ к каждому биту операндов.

Пример:

Элемент 17 bitxor 7 возвращает 22

>> Битовый сдвиг вправо.

Операция возвращает первый операнд, сдвинутый вправо. Количество шагов определяется во втором операнде.

Пример:

Элемент 8 >> 2 возвращает 2

<< Битовый сдвиг влево.

Операция возвращает первый операнд, сдвинутый влево. Количество шагов определяется во втором операнде.

Пример:

Элемент 8 << 2 возвращает 32

Логические операторы

Все логические операторы интерпретируют операнды в соответствии с определенной логикой и выдают результат True (-1) или False (0).

not Логическое отрицание. Один из нескольких унарных операторов. Операция возвращает логическое отрицание операнда.
and Логическое И. Операция применяет логическое И к операндам.
or Логическое ИЛИ. Операция возвращает логическое ИЛИ операндов.
Xor Логическое исключающее ИЛИ. Операция возвращает результат операции логического исключающее ИЛИ операндов. Т. е. операция подобна логическому ИЛИ за исключением того, что, если оба операнда имеют значение True, результат имеет значение False.

Числовые операторы

Все числовые операторы используют числовые значения операндов и возвращают числовое значение в качестве результата.

+ Знак положительного числа (унарный оператор) или арифметического сложения. Бинарная операция возвращает сумму двух операндов.
- Знак отрицательного числа (унарный оператор) или арифметического вычитания. Унарная операция возвращает операнд, умноженный на -1, а бинарная операция — разницу двух операндов.
* Арифметическое умножение. Операция возвращает произведение двух операндов.
/ Арифметическое деление. Операция возвращает частное двух операндов.

Реляционные операторы

Все реляционные операторы сравнивают значения операндов и возвращают в качестве результата значения True (-1) или False (0). Все реляционные операторы являются бинарными.

< Меньше Числовое сравнение выполняется, если оба операнда можно интерпретировать в числовом виде. Операция возвращает логическое значение оценки результата сравнения.
<= Меньше или равно Числовое сравнение выполняется, если оба операнда можно интерпретировать в числовом виде. Операция возвращает логическое значение оценки результата сравнения.
> Больше Числовое сравнение выполняется, если оба операнда можно интерпретировать в числовом виде. Операция возвращает логическое значение оценки результата сравнения.
>= Больше или равно Числовое сравнение выполняется, если оба операнда можно интерпретировать в числовом виде. Операция возвращает логическое значение оценки результата сравнения.
= Равно Числовое сравнение выполняется, если оба операнда можно интерпретировать в числовом виде. Операция возвращает логическое значение оценки результата сравнения.
<> Не равно Числовое сравнение выполняется, если оба операнда можно интерпретировать в числовом виде. Операция возвращает логическое значение оценки результата сравнения.
precedes

В отличие от оператора <, перед сравнением не предпринимается попытка выполнить числовую интерпретацию значений аргументов. Операция возвращает значение true, если значение слева от оператора имеет текстовое представление, которое предшествует текстовому представлению значения справа в сравнении строк.

Пример:

Элемент '1 ' precedes ' 2' возвращаетFALSE

во время

Элемент ' 1' precedes ' 2' возвращаетTRUE

так как значение ASCII пробела (" ") меньше значения ASCII числа.

Сравните с:

'1 ' < ' 2' возвращаетTRUE

и

Элемент ' 1' < ' 2' возвращаетTRUE

follows В отличие от оператора >, перед сравнением не предпринимается попытка выполнить числовую интерпретацию значений аргументов. Операция возвращает значение true, если значение слева от оператора имеет текстовое представление, которое находится после текстового представления значения справа в сравнении строк.
Пример:

' 2' follows '1 ' возвращаетFALSE

во время

Элемент ' 2' follows ' 1' возвращаетTRUE

так как значение ASCII пробела (" ") меньше значения ASCII числа.

Сравните с:

Элемент ' 2' > ' 1' возвращаетTRUE

и

Элемент ' 2' > '1 ' возвращаетTRUE

Строковые операторы

Существует два строковых оператора. Один из них использует строковые значения операндов и возвращает строку в качестве результата. Другой сравнивает операнды и возвращает булево значение, указывающее на совпадение.

& Сцепление строк. В результате операции возвращается текстовая строка, состоящая из двух последовательно идущих строк операндов.
Пример:
Элемент 'abc' & 'xyz' возвращает abcxyz

like Сравнение строки со знаками подстановки. В результате операции возвращается булево значение True (-1), если строка перед оператором совпадает со строкой после оператора. Во второй строке могут использоваться знаки подстановки * (любое количество произвольных символов) или ? (один произвольный символ).
Пример:
Элемент 'abc' like 'a*' возвращает True (-1)

Элемент 'abcd' like 'a?c*' возвращает True (-1)

Элемент 'abc' like 'a??bc' возвращает False (0)

Подписка

RSS-материал