Часть 7. Операторы и ключевые слова скрипта

Учебник QlikView (Qlik Sense). Часть 7. Операторы и ключевые слова скрипта.

Содержание

Операторы и ключевые слова скрипта. Общее.

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

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

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

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

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

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

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

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

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

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

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

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

Call

Оператор управления call вызывает подпрограмму, которую необходимо задать с помощью предыдущего оператора sub.

Call name ( [ paramlist ])
Do..loop

Оператор управления do..loop является компонентом итерации скрипта, который выполняет один или несколько операторов до выполнения логического условия.

do[ ( while | until ) condition ] [statements]
[exit do [ ( when | unless ) condition ] [statements]
loop [ ( while | until ) condition ]
Exit script

Этот оператор управления останавливает выполнение скрипта. Его можно вставить в любое место скрипта.

exit script[ (when | unless) condition ]
For each ..next

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

For Each var in list [statements] [exit for [ ( when | unless ) condition ]
[statements] next [var]
For..next

Оператор управления for..next представляет собой компонент итерации скрипта со счетчиком. Операторы внутри цикла, которые находятся между разделами for и next, будут выполняться для каждого значения переменной счетчика в пределах указанных минимального и максимального значений (включительно).

For counter = expr1 to expr2 [ step expr3 ] [statements]
[exit for [ ( when | unless ) condition ] [statements] Next [counter]
If..then

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

Поскольку оператор if..then является оператором управления и заканчивается точкой с запятой или знаком конца линии, каждое из четырех его возможных выражений (if..then, elseif..then, else и end if) не должно выходить за границу строки.

If condition then [ statements ] { elseif condition then [ statements ] } [ else [ statements ] ] end if
Sub

Оператор управления sub..end sub определяет подпрограмму, которая должна вызываться оператором call.

Sub name [ ( paramlist )] statements end sub
Switch

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

Switch expression {case valuelist [ statements ]} [default statements] end switch

Call

Оператор управления call вызывает подпрограмму, которую необходимо задать с помощью предыдущего оператора sub.

Синтаксис:
Call name ( [ paramlist ])

Аргументы:

Аргумент Описание
name Имя подпрограммы.
paramlist Список фактических параметров, отправляемых в подпрограмму и перечисленных через запятую. Элементы списка могут быть именами полей, переменными или произвольными выражениями.

Подпрограмма, вызываемая оператором call, должна быть задана оператором sub ранее при выполнении скрипта.

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

Ограничения:

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

Пример 1:
// Example 1
Sub INCR (I,J)
I = I + 1
Exit Sub when I < 10
J = J + 1
End Sub
Call INCR (X,Y)

Пример 2:
// Example 2 — List all QV related files on disk
sub DoDir (Root)
For Each Ext in 'qvw', 'qvo', 'qvs', 'qvt', 'qvd', 'qvc'
For Each File in filelist (Root&'\*.' &Ext)
LOAD
'$(File)' as Name, FileSize( '$(File)' ) as
Size, FileTime( '$(File)' ) as FileTime
autogenerate 1;
Next File
Next Ext
For Each Dir in dirlist (Root&'\*' )
Call DoDir (Dir)
Next Dir
End Sub
Call DoDir ('C:')

Do..loop

Оператор управления do..loop является компонентом итерации скрипта, который выполняет один или несколько операторов до выполнения логического условия.

Синтаксис:
Do [ ( while | until ) condition ] [statements]
[exit do [ ( when | unless ) condition ] [statements]
loop[ ( while | until ) condition ]

Поскольку оператор do..loop является оператором управления и заканчивается точкой с запятой или знаком конца строки, каждое из трех его возможных предложений (do, exit do и loop) не должно выходить за границу строки.

Аргументы:

Аргумент Описание
condition

Логическое выражение, имеющее значение True или False.

statements

Любая группа, состоящая из одного или нескольких операторов скрипта QlikView (и Qlik Sense).

while / until

Условное предложение while или until должно появиться только один раз в любом операторе do..loop, то есть после do или после loop. Каждое условие интерпретируется только при первом появлении, однако вычисляется при каждом появлении в цикле.

exit do

Если в цикле появляется предложение exit do, выполнение скрипта будет передано первому оператору после предложения loop, указывающего на конец цикла. Предложение exit do можно сделать условным с помощью дополнительного использования суффикса when или unless.

Пример:
// LOAD files file1.csv..file9.csv
Set a=1;
Do while a<10
LOAD * from file$(a).csv;
Let a=a+1;
Loop

Exit script

Этот оператор управления останавливает выполнение скрипта. Его можно вставить в любое место скрипта.

Синтаксис:
Exit Script [ (when | unless) condition ]

Поскольку оператор exit script является оператором управления и заканчивается точкой с запятой или знаком конца строки, он не должен выходить за границу строки.

Аргументы:

Аргумент Описание
condition Логическое выражение, имеющее значение True или False.
when / unless Оператор exit script можно сделать условным с помощью дополнительного использования предложения when или unless.

Примеры:
//Exit script
Exit Script;

//Exit script when a condition is fulfilled
Exit Script when a=1

For each..next

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

Синтаксис:

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

for each var in list [statements] [exit for [ ( when | unless ) condition ] [statements] next [var]

Аргументы:

Аргумент Описание
var Имя переменной скрипта, которое получает новое значение из списка для каждого выполнения цикла. Если переменная var задана после next, она должна иметь такое же имя переменной, как указано после соответствующего предложения for each.

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

Если в цикле появляется предложение exit for, выполнение скрипта будет передано первому оператору после предложения next, указывающего на конец цикла. Предложение exit for можно сделать условным с помощью дополнительного использования суффикса when или unless.

Поскольку оператор for each..next является оператором управления и заканчивается точкой с запятой или знаком конца строки, каждое из трех его возможных предложений (for each, exit for и next) не должно выходить за границу строки.

Синтаксис:
list := item { , item }
item := constant | (expression) | filelist (mask) | dirlist (mask) | fieldvaluelist (fieldname)

Аргумент Описание
constant Любое число или строка. Обратите внимание на то, что строка, непосредственно записываемая в скрипте, должна быть заключена в одинарные кавычки. Строка без одинарных кавычек будет интерпретироваться как переменная с использованием значения переменной. Числа не нужно заключать в одинарные кавычки.
expression Произвольное выражение.
mask

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

condition Логическое выражение, имеющее значение True или False.
statements Любая группа, состоящая из одного или нескольких операторов скрипта QlikView (и Qlik Sense).
filelist mask

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

dirlist mask

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

fieldvaluelist mask Этот синтаксис повторяется в значениях поля, которое уже загружено в QlikView (и Qlik Sense).

Пример 1: Загрузка списка файлов
// LOAD the files 1.csv, 3.csv, 7.csv and xyz.csv
for each a in 1,3,7,'xyz'
LOAD * from file$(a).csv;
next

Пример 2: Создание списка файлов на диске

В этом примере показана загрузка всех файлов в папке, относящихся к программе QlikView (и Qlik Sense).

sub DoDir (Root)
for each Ext in 'qvw', 'qva', 'qvo', 'qvs', 'qvc', 'qvd'

for each File in filelist (Root&'\*.' &Ext)

LOAD
'$(File)' as Name,
FileSize( '$(File)' ) as Size,
FileTime( '$(File)' ) as FileTime
autogenerate 1;

next File

next Ext
for each Dir in dirlist (Root&'\*' )

call DoDir (Dir)

next Dir

end sub

call DoDir ('C:')

Пример 3: Повторяясь в значениях поля

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

load * inline [
FIELD
one
two
three
];

FOR Each a in FieldValueList('FIELD')
LOAD '$(a)' &'-'&RecNo() as NEWFIELD AutoGenerate 2;
NEXT a

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

NEWFIELD
one-1
one-2
two-1
two-2
three-1
three-2

For..next

Оператор управления for..next представляет собой компонент итерации скрипта со счетчиком. Операторы внутри цикла, которые находятся между разделами for и next, будут выполняться для каждого значения переменной счетчика в пределах указанных минимального и максимального значений (включительно).

Синтаксис:
For counter = expr1 to expr2 [ step expr3 ] [statements]
[exit for [ ( when | unless ) condition ] [statements] Next [counter]

Выражения expr1, expr2 и expr3 рассчитываются только при первом входе в цикл. Значение переменной counter может быть изменено операторами внутри цикла, однако это делать не рекомендуется.

Если в цикле появляется предложение exit for, выполнение скрипта будет передано первому оператору после предложения next, указывающего на конец цикла. Предложение exit for можно сделать условным с помощью дополнительного использования суффикса when или unless.

Поскольку оператор for..next является оператором управления и заканчивается точкой с запятой или знаком конца строки, каждое из трех его возможных предложений (for..to..step, exit for и next) не должно выходить за границу строки.

Аргументы:

Аргумент Описание
counter Имя переменной. Если переменная counter задана после next, она должна иметь такое же имя переменной, как указано после соответствующего предложения for.
expr1 Выражение, определяющее первое значение переменной counter, для которой должен выполняться цикл.
expr2

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

expr3 Выражение, которое определяет значение приращения переменной counter при каждом выполнении цикла.
condition логическое выражение, имеющее значение True или False.
statements Любая группа, состоящая из одного или нескольких операторов скрипта QlikView (и Qlik Sense).

Пример 1: Загрузка последовательности файлов
// LOAD files file1.csv..file9.csv
for a=1 to 9
LOAD * from file$(a).csv;
next

Пример 2: Загрузка случайного числа файлов

В этом примере используются следующие файлы с данными: x1.csv, x3.csv, x5.csv, x7.csv и x9.csv. Загрузка остановлена в случайной точке с помощью условия if rand( )<0.5 then.

for counter=1 to 9 step 2
set filename=x$(counter).csv;
if rand( )<0.5 then
exit for unless counter=1
end if
LOAD a,b from $(filename);
next

If..then..elseif..else..end if

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

Синтаксис:
If condition then [ statements ] { elseif condition then [ statements ] }
[ else [ statements ] ] end if

Поскольку оператор if..then является оператором управления и заканчивается точкой с запятой или знаком конца линии, каждое из четырех его возможных выражений (if..then, elseif..then, else и end if) не должно выходить за границу строки.

Аргументы:

Аргумент Описание
condition Логическое выражение, которое может иметь значение True или False.
statements Любая группа, состоящая из одного или нескольких операторов скрипта QlikView (и Qlik Sense).

Пример 1:
if a=1 then
LOAD * from abc.csv;
SQL SELECT e, f, g from tab1;
end if

Пример 2:
if a=1 then; drop table xyz; end if;

Пример 3:
if x>0 then
LOAD * from pos.csv;
elseif x<0 then
LOAD * from neg.csv;
else
LOAD * from zero.txt;
end if

Sub..end sub

Оператор управления sub..end sub определяет подпрограмму, которая должна вызываться оператором call.

Синтаксис:
Sub name [ ( paramlist )] statements end sub

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

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

Поскольку оператор sub является оператором управления и заканчивается точкой с запятой или знаком конца линии, каждое из двух его возможных выражений (sub и end sub) не должно выходить за границу строки.

Аргументы:

Аргумент Описание
name Имя подпрограммы.
paramlist Список имен переменных, разделенных запятой, для формальных параметров подпрограммы. Они могут использоваться как любая другая переменная в подпрограмме.
statements Любая группа, состоящая из одного или нескольких операторов скрипта QlikView (и Qlik Sense).

Пример 1:
Sub INCR (I,J)
I = I + 1
Exit Sub when I < 10
J = J + 1
End Sub
Call INCR (X,Y)

Пример 2: — передача параметра
Sub ParTrans (A,B,C)
A=A+1
B=B+1
C=C+1
End Sub
A=1
X=1
C=1
Call ParTrans (A, (X+1)*2)

В результате этого локально внутри подпрограммы A будет инициализировано как 1, B как 4 и C как NULL.

При выходе из подпрограммы глобальная переменная А получает значение 2 (скопированное из подпрограммы). Второй фактический параметр (X+1)*2 не будет копироваться, поскольку не является переменной. Наконец, глобальная переменная С не будет изменена вследствие вызова подпрограммы.

Switch..case..default..end switch

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

Синтаксис:
Switch expression {case valuelist [ statements ]} [default statements] end switch

Поскольку оператор switch является оператором управления и заканчивается точкой с запятой или знаком конца линии, каждое из четырех его возможных выражений (switch, case, default и end switch) не должно выходить за границу строки.

Аргументы:

Аргумент Описание
expression Произвольное выражение.
valuelist Список значений, разделенных запятой, с которыми будет сравниваться значение expression. Выполнение скрипта продолжится с операторов в первой группе, в которой значение valuelist будет равно значению expression. Каждое значение valuelist может быть произвольным выражением. Если совпадение не найдено ни в одном из предложений case, то будут выполнены операторы в выражении default при их наличии.
statements Любая группа, состоящая из одного или нескольких операторов скрипта QlikView (и Qlik Sense).

Пример:
Switch I
Case 1
LOAD '$(I): CASE 1' as case autogenerate 1;
Case 2
LOAD '$(I): CASE 2' as case autogenerate 1;
Default
LOAD '$(I): DEFAULT' as case autogenerate 1;
End Switch

Префиксы скрипта

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

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

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

Add

Префикс add можно добавить в любой оператор LOAD, SELECT или map…using в скрипте. Он применяется только во время частичной загрузки.

Add [only] (loadstatement | selectstatement | mapstatement)
Buffer

Файлы QVD могут создаваться и обслуживаться автоматически посредством префикса buffer. Этот префикс может использоваться на большинстве операторов LOAD и SELECT в скрипте. Он указывает на то, что файлы QVD используются для кэширования/буферизации результата оператора.

Buffer[(option [ , option])] ( loadstatement | selectstatement )
option::= incremental | stale [after] amount [(days | hours)]
Bundle

Префикс Bundle используется для включения внешних файлов, таких как файлы изображений и звуковые файлы, или объектов, связанных со значением поля, для сохранения в файле qvw.

Bundle [Info] ( loadstatement | selectstatement)
Concatenate

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

concatenate [ (tablename ) ] ( loadstatement | selectstatement )
Crosstable

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

crosstable (attribute field name, data field name [ , n ] ) ( loadstatement | selectstatement )
First

Префикс First операторов LOAD или SELECT (SQL) используется для загрузки заданного максимального числа записей из таблицы источника данных.

First n( loadstatement | selectstatement )
Generic

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

Generic ( loadstatement | selectstatement )
Hierarchy

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

Hierarchy (NodeID, ParentID, NodeName, [ParentName], [PathSource], [PathName], [PathDelimiter], [Depth])(loadstatement | selectstatement)
HierarchyBelongsTo

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

HierarchyBelongsTo (NodeID, ParentID, NodeName, AncestorID, AncestorName, [DepthDiff])(loadstatement | selectstatement)
Image_Size

Это предложение используется вместе с префиксами Info или Bundle для изменения размера изображений из СУБД в соответствии с размерами полей.

Info [Image_Size(width,height)] ( loadstatement | selectstatement)
Info

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

Info( loadstatement | selectstatement )
Inner

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

Inner ( Join | Keep) [ (tablename) ](loadstatement |selectstatement )
Inputfield

Чтобы пометить поле как поле ввода, укажите его в операторе inputfield до упоминания в операторах load или select.

Inputfield fieldlist
IntervalMatch

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

IntervalMatch (matchfield)(loadstatement | selectstatement )
IntervalMatch (matchfield,keyfield1 [ , keyfield2, ... keyfield5 ] ) (loadstatement | selectstatement )
Join

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

[Inner | Outer | Left | Right ]Join[(tablename )]( loadstatement | selectstatement )
Keep

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

(Inner | Left | Right) Keep [(tablename ) ]( loadstatement | selectstatement )
Left

Перед префиксами Join и Keep может стоять префикс left.

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

Left ( Join | Keep) [(tablename) ](loadstatement | selectstatement )
Mapping

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

Mapping ( loadstatement | selectstatement )
NoConcatenate

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

NoConcatenate( loadstatement | selectstatement )
Outer

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

Outer Join [ (tablename) ](loadstatement |selectstatement )
Replace

Префикс replace используется для удаления таблицы в программе QlikView (и Qlik Sense) полностью и ее замены загруженной или выбранной таблицей.

Replace[only](loadstatement |selectstatement |map...usingstatement)
Right

Перед префиксами Join и Keep может стоять префикс right.

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

Right (Join | Keep) [(tablename)](loadstatement |selectstatement )
Sample

Префикс sample операторов LOAD или SELECT используется для загрузки произвольного образца записей из источника данных.

Sample p ( loadstatement | selectstatement )
Semantic

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

Semantic ( loadstatement | selectstatement)
Unless

Префикс и суффикс unless используется для создания условного предложения, определяющего вычисление или невычисление оператора либо условия «exit». Это короткое утверждение можно использовать вместо полного оператора if..end if.

(Unless condition statement | exitstatement Unless condition )
When

Префикс и суффикс when используется для создания условного предложения, определяющего исполнение или неисполнение оператора либо условия «exit». Это короткое утверждение можно использовать вместо полного оператора if..end if.

( When condition statement | exitstatement when condition )

Add

Префикс add можно добавить в любой оператор LOAD, SELECT или map…using в скрипте. Он применяется только во время частичной загрузки.

Синтаксис:
Add [only] (loadstatement | selectstatement | mapstatement)

Во время частичной перезагрузки таблица QlikView (и Qlik Sense), для которой создается имя с помощью оператора add LOAD/add SELECT (если такая таблица существует), дополняется результатом выполнения оператора add LOAD/add SELECT. Проверка дубликатов не выполняется. Таким образом, оператор, использующий префикс add, будет, как правило, включать в себя квалификатор distinct или защитные дубликаты выражения where. Оператор map…using запускает сопоставление данных также и во время частичного выполнения скрипта.

Аргументы:

Аргумент Описание
only Дополнительный квалификатор, указывающий на то, что оператор следует игнорировать в ходе нормальной (не частичной) перезагрузки.

Примеры и результаты:
Пример Результат
Tab1:
LOAD Name, Number FROM Persons.csv;
Add LOAD Name, Number FROM newPersons.csv;

Во время обычной перезагрузки данные загружаются из файла Persons.csv и сохраняются в таблице QlikView (и Qlik Sense) Tab1 Затем данные из файла NewPersons.csv объединяются с той же таблицей QlikView (и Qlik Sense).

Во время частичной перезагрузки данные загружаются из файла NewPersons.csv и сохраняются в таблице QlikView (и Qlik Sense) Tab1 Проверка дубликатов не выполняется.

Tab1:
SQL SELECT Name, Number FROM Persons.csv;
Add LOAD Name, Number FROM NewPersons.csv (txt) where not exists(Name);

Проверка дубликатов выполняется путем проверки наличия элемента Name в ранее загруженных табличных данных (см. функцию exists в разделе функций между записями).

Во время обычной перезагрузки данные загружаются из файла Persons.csv и сохраняются в таблице QlikView (и Qlik Sense) Tab1 Затем данные из файла NewPersons.csv объединяются с той же таблицей QlikView (и Qlik Sense).

Во время частичной перезагрузки данные загружаются из файла NewPersons.csv, который добавляется к таблице QlikView (и Qlik Sense) Tab1 Проверка дубликатов выполняется путем проверки наличия Name в ранее загруженных табличных данных.

Tab1:
LOAD Name, Number FROM Persons.csv;
Add Only LOAD Name, Number FROM NewPersons.csv (txt) where not exists(Name);

Во время обычной перезагрузки данные загружаются из файла Persons.csv и сохраняются в таблице QlikView (и Qlik Sense) Tab1 Оператор загрузки NewPersons.csv игнорируется.

Во время частичной перезагрузки данные загружаются из файла NewPersons.csv, который добавляется к таблице QlikView (и Qlik Sense) Tab1 Проверка дубликатов выполняется путем проверки наличия Name в ранее загруженных табличных данных.

Buffer

Файлы QVD могут создаваться и обслуживаться автоматически посредством префикса buffer. Этот префикс может использоваться на большинстве операторов LOAD и SELECT в скрипте. Он указывает на то, что файлы QVD используются для кэширования/буферизации результата оператора.

Синтаксис:
Buffer [(option [ , option])] ( loadstatement | selectstatement )
option::= incremental | stale [after] amount [(days | hours)]

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

Буферы QVD по умолчанию хранятся в папке C:\ProgramData\QlikTech\QlikView (и Qlik Sense)\Buffers.

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

Аргументы:

Аргумент Описание
incremental Параметр incremental дает возможность прочитать только часть базового файла. Данные о предыдущем размере файла находятся в заголовке XML файла QVD. Это особенно полезно при работе с файлами журнала. Все записи, загруженные в предыдущий раз, считываются из файла QVD, в то время как последующие новые записи считываются из оригинального источника, в результате чего создается обновленный файл QVD. Обратите внимание, что параметр incremental может использоваться только с операторами LOAD и текстовыми файлами, а инкрементальная загрузка не может использоваться там, где устаревшие данные изменены или удалены!
stale [after] amount [(days | hours)] amount — число, обозначающее период времени. Могут использоваться десятичные числа. Единицей измерения являются дни, если не указано иное.
Опция stale after обычно используется с источниками баз данных, если нет простой метки времени на первоначальных данных. Вместо этого можно указать, насколько старым может быть описание используемого снимка QVD. Предложение stale after просто указывает период времени с момента создания буфера QVD, после которого он будет считаться недействительным. До этого времени в качестве источника данных будет использоваться буфер QVD, а после этого — оригинальный источник данных. Файл буфера QVD будет автоматически обновлен, и начнется новый период.

Ограничения:

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

Пример 1:
Buffer SELECT * from MyTable;

Пример 2:
Buffer (stale after 7 days) SELECT * from MyTable;

Пример 3:
Buffer (incremental) LOAD * from MyLog.log;

Bundle

Префикс Bundle используется для включения внешних файлов, таких как файлы изображений и звуковые файлы, или объектов, связанных со значением поля, для сохранения в файле qvw.

Синтаксис:
Bundle [Info] ( loadstatement | selectstatement)

Для удобства переноса внешние файлы можно включить в файл .qvw. Для этого следует использовать префикс Bundle. Включенные в пакет файлы info сжимаются в ходе этого процесса, однако все равно занимают дополнительное место в файле и ОЗУ. Поэтому, выбирая такое решение, следует отслеживать и размер, и число пакетных файлов.

Информацию можно получать в виде ссылки из макета (в виде обычной информации), с помощью функции диаграммы info или в виде внутреннего файла, для их вызова может использоваться специальный синтаксис: qmem:// fieldname / fieldvalue или qmem:// fieldname / < index >, где index — внутренний индекс значения поля.

Аргументы:

Аргумент Описание
loadstatement | selectstatement Если часть внешних данных, например изображение или звуковой файл, необходимо связать со значением поля, то это можно сделать в таблице, загружаемой с префиксом Info.

Префиксом Info можно пренебречь при использовании префикса Bundle.

Пример:
Bundle Info LOAD * From flagoecd.csv;
Bundle SQL SELECT * from infotable;

Concatenate

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

Синтаксис:
Concatenate[ (tablename ) ] ( loadstatement | selectstatement )

Объединение, по сути, совпадает с оператором SQL UNION, но с двумя отличиями:

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

Аргументы:

Аргумент Описание
tablename Имя существующей таблицы.

Пример 1:
LOAD * From file2.csv;
Concatenate SELECT * From table3;

Пример 2:
tab1:
LOAD * From file1.csv;

tab2:
LOAD * From file2.csv;
.. .. ..
Concatenate (tab1) LOAD * From file3.csv;

Crosstable

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

Синтаксис:
crosstable (attribute field name, data field name [ , n ] ) ( loadstatement | selectstatement )

Аргументы:

Аргумент Описание
attribute field name Поле, которое содержит значения атрибутов.
data field name

Поле, которое содержит значения данных.

n

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

Crosstable — это распространенный тип таблиц, включающих матрицу значений, расположенную между двумя и более ортогональными списками данных в заголовках, один из которых используется в качестве заголовков столбцов. Типичный пример — один столбец для каждого месяца. В результате использования префикса crosstable заголовки столбцов (например, названия месяцев) будут сохранены в одном поле (поле атрибутов), а данные столбцов (номера месяцев) будут сохранены во втором поле (поле данных).

Пример:
Crosstable (Month, Sales, 2) LOAD * INLINE[
Person, Location, Jan, Feb, Mar
Bob, London, 100, 200, 300
Kate, New York, 400, 500, 600
];

Результат:

Person, Location, Month, Sales
Bob, London, Jan, 100
Bob, London, Feb, 200
Bob, London, Mar, 300
Kate, New York, Jan, 400
Kate, New York, Feb, 500
Kate, New York, Mar, 600

Мастер создания перекрестной таблицы

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

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

First

Префикс First операторов LOAD или SELECT (SQL) используется для загрузки заданного максимального числа записей из таблицы источника данных.

Синтаксис:
First n ( loadstatement | selectstatement )

Аргументы:

Аргумент Описание
n

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

Элемент n может быть заключен в скобки, например (n), но это необязательно.

Примеры:
First 10 LOAD * from abc.csv;
First (1) SQL SELECT * from Orders;

Generic

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

Синтаксис:
Generic( loadstatement | selectstatement )

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

Пример:
Table1:
Generic LOAD * INLINE;
[
Key, Attribute, Value
Bob, Jan, 100
Bob, Feb, 200
Bob, Mar, 300
Kate, Jan, 400
Kate, Feb, 500
Kate, Mar, 600
];

Результат:

В результате будут созданы 3 таблицы:

Table1.Jan:

Key, Jan
Bob, 100
Kate, 400

Table1.Feb:

Key, Feb
Bob, 200
Kate, 500

Table1.Mar:

Key, Mar
Bob, 300
Kate, 600

Hierarchy

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

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

Синтаксис:
Hierarchy (NodeID, ParentID, NodeName, [ParentName], [PathSource], [PathName], [PathDelimiter], [Depth])(loadstatement | selectstatement)

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

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

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

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

Аргументы:

Аргумент Описание
NodeID Имя поля, содержащего идентификатор узла. Это поле должно существовать во входной таблице.
ParentID Имя поля, содержащего идентификатор родительского узла. Это поле должно существовать во входной таблице.
NodeName Имя поля, содержащего имя узла. Это поле должно существовать во входной таблице.
ParentName Строка, которая используется для наименования нового поля ParentName. При его отсутствии это поле не создается.
ParentSource Имя поля, которое содержит имя узла, используемого для создания пути к узлу. Необязательный параметр. Если не указано, используется NodeName.
PathName Строка, которая используется для наименования нового поля Path, содержащего путь от корневого каталога к узлу. Необязательный параметр. При его отсутствии это поле не создается.
PathDelimiter Строка, которая используется в качестве разделителя в новом поле Path. Необязательный параметр. При его отсутствии используется ‘/’.
Depth Строка, которая используется для наименования нового поля Depth, содержащего глубину узла в иерархии. Необязательный параметр. При его отсутствии это поле не создается.

Пример:
Hierarchy(NodeID, ParentID, NodeName, ParentName, NodeName, PathName, '\', Depth) LOAD * inline [
NodeID, ParentID, NodeName
1, 4, London
2, 3, Munich
3, 5, Germany
4, 5, UK
5, , Europe
];

Результат:

NodeID NodeName ParentID ParentName NodeName1 NodeName2 NodeName3 PathName Depth
5 Europe - Europe - - Europe 1
3 Germany 5 Europe Europe Germany - Europe\Germany 2
2 Munich 3 Germany Europe Germany Munich Europe\Germany\Munich 3
4 UK 5 Europe Europe UK - Europe\UK 2
1 London 4 UK Europe UK London Europe\UK\London 3

HierarchyBelongsTo

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

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

Синтаксис:
HierarchyBelongsTo (NodeID, ParentID, NodeName, AncestorID, AncestorName, [DepthDiff])(loadstatement | selectstatement)

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

Можно создать дополнительные поля, содержащие разницу глубины узлов.

Аргументы:

Аргумент Описание
NodeID Имя поля, содержащего идентификатор узла. Это поле должно существовать во входной таблице.
ParentID Имя поля, содержащего идентификатор родительского узла. Это поле должно существовать во входной таблице.
NodeName Имя поля, содержащего имя узла. Это поле должно существовать во входной таблице.
AncestorID Строка имени нового поля идентификатора родительского узла, которое содержит идентификатор родительского узла.
AncestorName Строка имени нового поля родительского узла, которое содержит имя родительского узла.
DepthDiff Строка имени нового поля DepthDiff, содержащего глубину узла в иерархии по отношению к родительскому узлу. Необязательный параметр. При его отсутствии это поле не создается.

Пример:
HierarchyBelongsTo (NodeID, AncestorID, NodeName, AncestorID, AncestorName, DepthDiff) LOAD * inline [
NodeID, AncestorID, NodeName
1, 4, London
2, 3, Munich
3, 5, Germany
4, 5, UK
5, , Europe
];

Результат:

NodeID AncestorID NodeName AncestorName DepthDiff
1 1 London London 0
1 4 London UK 1
1 5 London Europe 2
2 2 Munich Munich 0
2 3 Munich Germany 1
2 5 Munich Europe 2
3 3 Germany Germany 0
3 5 Germany Europe 1
4 4 UK UK 0
4 5 UK Europe 1
5 5 Europe Europe 0

Image_Size

Это предложение используется вместе с префиксами Info или Bundle для изменения размера изображений из СУБД в соответствии с размерами полей.

Синтаксис:
Bundle [Image_Size(width,height)] ( loadstatement | selectstatement )

Аргументы:

Аргумент Описание
width Ширина изображения, указанная в пикселах.
height Высота изображения, указанная в пикселах.

Пример:

Для каждого изображения в папке MyPictures будет сохранен эскиз в документе QlikView (и Qlik Sense). Отношение высоты к ширине изображения остается неизменным.

for each vBundleExt in 'jpg', 'jpeg', 'jpe', 'png', 'jif', 'jfi'
for each vBundleFoundFile in filelist( GetFolderPath('MyPictures') & '\*.'& vBundleExt )
BundleFileList:
BUNDLE IMAGE_SIZE(20, 20) Info Load FileLongName, FileLongName;
Load @1:n as FileLongName Inline "$(vBundleFoundFile)" (fix, no labels);
Next vBundleFoundFile
Next vBundleExt

Info

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

Синтаксис:
Info( loadstatement | selectstatement )

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

Это касается, например, изображений, полученных из СУБД. В двоичном поле (blob) оператор info select выполняет неявную операцию bundle, т. е. двоичные данные будут немедленно выбраны и сохранены в файле qvw. Двоичные данные должны записываться во второе поле оператора SELECT.

Пример:
Info LOAD * inline[
LinkedField, ImageFileName
QlikView (и Qlik Sense), QlikView (и Qlik Sense)Logo.png
];

Результат:

В качестве имени поля будет видно только LinkedField.

Если добавить текстовый объект на лист, для представления которого задан параметр Изображение, и ввести текст =Info(LinkedField), текстовый объект отобразит имя файла изображения.

Inner

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

Синтаксис:
Inner ( Join | Keep) [ (tablename) ](loadstatement |selectstatement )

Аргументы:

Аргумент Описание
tablename Будет выполнено сравнение именованной таблицы с загруженной таблицей.
Операторы loadstatementили selectstatement Оператор LOAD или SELECT для загруженной таблицы.

Пример 1:

Table1

A

B

1

aa

2

cc

3

ee

Table2

A

C

1

xx

4

yy

QVTable:
SQL SELECT * From table1;
inner join SQL SELECT * From table2;

QVTable

A

B

C

1

aa

xx

Пример 2:
QVTab1:
SQL SELECT * From Table1;
QVTab2:
inner keep SQL SELECT * From Table2;

QVTab1

A

B

1

aa

QVTab2

A

C

1

xx

Две таблицы в примере keep, разумеется, связаны посредством поля A.

Inputfield

Чтобы пометить поле как поле ввода, укажите его в операторе inputfield до упоминания в операторах LOAD или SELECT.

Ключевые поля не могут быть помечены как поля ввода.

inputfieldfieldlist

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

Поле ввода отличается от обычного поля. Основным его отличием является способность принимать изменения значений поля (в интерактивном режиме или через программирование) без запуска скрипта. Значения поля загружаются в поле с помощью операторов LOAD или SELECT. Каждое значение поля, загружаемое в скрипт, создает заполнитель для значения, которым будет заменено значение поля. Таким образом в интерактивном режиме или путем программирования можно изменять только существующие значения поля. Заменяющее значение задается пользователем, т.е. если поле ввода используется на сервере, разные пользователи будут видеть разные наборы значений в поле ввода. В полях ввода все значения поля считаются различными, даже если некоторые из них одинаковы. Обычно ранее указанные значения сохраняются в полях ввода после загрузки.

Пример 1:
Inputfield B;
Inputfield A,B;
Inputfield B??x*;

Пример 2:
Inputfield I;Load RecNo() as I, RecNo() as K autogenerate 10;

Значения в поле K должны быть уникальными, чтобы поле I могло быть полем ввода.

IntervalMatch

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

Синтаксис:
IntervalMatch (matchfield)(loadstatement | selectstatement )
IntervalMatch (matchfield,keyfield1 [ , keyfield2, ... keyfield5 ] ) (loadstatement | selectstatement )

Префикс IntervalMatch устанавливается перед оператором LOAD или SELECT, который загружает интервалы. До оператора с префиксом IntervalMatch поле, которое содержит дискретные точки диаграммы (Time в приведенном ниже примере) и дополнительные ключи, уже должно быть загружено в QlikView (и Qlik Sense). Данный префикс не считывает это поле из таблицы базы данных сам по себе. Он преобразует загруженную таблицу интервалов и ключей в таблицу, содержащую дополнительный столбец дискретных числовых точек диаграммы. Здесь также разворачиваются различные записи, что позволяет включать в новую таблицу одну запись на возможную комбинацию дискретных точек диаграммы, интервалов и значений ключевых полей.

Интервалы могут накладываться друг на друга, а дискретные значения будут связаны со всеми соответствующими интервалами.

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

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

Аргументы:

Аргумент Описание
matchfield Поле, содержащее дискретные числовые значения, которые нужно связать с интервалами.
keyfield Поля, содержащие дополнительные атрибуты, сопоставляемые при преобразовании.
loadstatement or selectstatement Должна быть получена таблица, где первое поле содержит нижнюю границу каждого интервала, второе поле содержит верхнюю границу каждого интервала, а в случае использования сопоставления ключей третье и все последующие поля содержат ключевые поля, присутствующие в операторе IntervalMatch. Интервалы всегда закрытые, т. е. конечные точки включены в интервал. Нечисловые границы приводят к тому, что интервал игнорируется (неопределенный).

Пример 1:

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

EventLog:
LOAD * Inline [
Time, Event, Comment
00:00, 0, Start of shift 1
01:18, 1, Line stop
02:23, 2, Line restart 50%
04:15, 3, Line speed 100%
08:00, 4, Start of shift 2
11:43, 5, End of production
];

OrderLog:
LOAD * INLINE [
Start, End, Order
01:00, 03:35, A
02:30, 07:58, B
03:04, 10:27, C
07:23, 11:43, D
];

//Link the field Time to the time intervals defined by the fields Start and End.
Inner Join IntervalMatch ( Time )
LOAD Start, End
Resident OrderLog;

Результат:

Теперь таблица OrderLog содержит дополнительный столбец: Time. Число записей также увеличивается.

Time Start End Order

00:00

- - -
01:18 01:00 03:35 A
02:23 01:00 03:35 A
04:15 02:30 07:58 B
04:15 03:04 10:27 C
08:00 03:04 10:27 C
08:00 07:23 11:43 D
11:43 07:23

11:43

D

Пример 2: ( с помощью префикса keyfield)

Пример аналогичен приведенному выше, только в качестве ключевого поля добавляется ProductionLine .

EventLog:
LOAD * Inline [
Time, Event, Comment, ProductionLine
00:00, 0, Start of shift 1, P1
01:00, 0, Start of shift 1, P2
01:18, 1, Line stop, P1
02:23, 2, Line restart 50%, P1
04:15, 3, Line speed 100%, P1
08:00, 4, Start of shift 2, P1
09:00, 4, Start of shift 2, P2
11:43, 5, End of production, P1
11:43, 5, End of production, P2
];

OrderLog:
LOAD * INLINE [
Start, End, Order, ProductionLine
01:00, 03:35, A, P1
02:30, 07:58, B, P1
03:04, 10:27, C, P1
07:23, 11:43, D, P2
];

//Link the field Time to the time intervals defined by the fields Start and End and match the values
// to the key ProductionLine.
Inner Join
IntervalMatch ( Time, ProductionLine )
LOAD Start, End, ProductionLine
Resident OrderLog;

Результат:

Теперь простую таблицу можно создать следующим образом:

ProductionLine Time Event Comment Order Start End
P1

00:00

0 Start of shift 1 - - -
P2 01:00 0 Start of shift 1 - - -
P1 01:18 1 Line stop A 01:00 03:35
P1 02:23 2 Line restart 50% A 01:00 03:35
P1 04:15 3 Line speed 100% B 02:30 07:58
P1 04:15 3 Line speed 100% C 03:04 10:27
P1 08:00 4 Start of shift 2 C 03:04 10:27
P2 09:00 4 Start of shift 2 D 07:23 11:43
P1 11:43 5 End of production - - -
P2 11:43 5 End of production D 07:23 11:43

IntervalMatch (расширенный синтаксис)

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

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

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

Синтаксис:
intervalmatch (matchfield,keyfield1 [ , keyfield2, ... keyfield5 ] ) (loadstatement | selectstatement )

matchfield — это поле, содержащее дискретные числовые значения, которые нужно связать с интервалами.

keyfield(s) — это поля, содержащие дополнительные атрибуты, сопоставляемые при преобразовании.

loadstatement или selectstatement должен выдавать таблицу, в которой первые два поля содержат верхний и нижний предел каждого интервала, а третье и последующие поля содержат keyfield(s), существующие в операторе IntervalMatch. Интервалы всегда закрытые, т. е. конечные точки включены в интервал. Нечисловые границы приводят к тому, что интервал игнорируется (неопределенный).

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

Пример:
Inner Join IntervalMatch (Date,Key) LOAD FirstDate, LastDate, Key resident Key;

Join

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

Синтаксис:
[inner | outer | left | right ]Join [ (tablename ) ]( loadstatement | selectstatement )

Join — это естественное объединение, образуемое по всем общим полям. Перед оператором join можно задать один из префиксов inner, outer, left или right.

Аргументы:

Аргумент Описание
tablename Будет выполнено сравнение именованной таблицы с загруженной таблицей.
Операторы loadstatement или selectstatement Оператор LOAD или SELECT для загруженной таблицы.

Пример:
Join LOAD * from abc.csv;

Join SELECT * from table1;

tab1:
LOAD * from file1.csv;
tab2:
LOAD * from file2.csv;
.. .. ..
join (tab1) LOAD * from file3.csv;

Keep

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

Синтаксис:
(inner | left | right) keep [(tablename ) ]( loadstatement | selectstatement )

Перед префиксом keep следует задать один из префиксов inner, left или right.

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

Аргументы:

Аргумент Описание
tablename Будет выполнено сравнение именованной таблицы с загруженной таблицей.
Операторы loadstatement или selectstatement Оператор LOAD или SELECT для загруженной таблицы.

Пример:
Inner Keep LOAD * from abc.csv;
Left Keep SELECT * from table1;
tab1:
LOAD * from file1.csv;
tab2:
LOAD * from file2.csv;
.. .. ..
Left Keep (tab1) LOAD * from file3.csv;

Left

Перед префиксами join и keep может стоять префикс left.

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

Синтаксис:
left ( Join | keep) [ (tablename) ](loadstatement | selectstatement)

Аргументы:

Аргумент Описание
tablename Будет выполнено сравнение именованной таблицы с загруженной таблицей.
Операторы loadstatement или selectstatement Оператор LOAD или SELECT для загруженной таблицы.

Пример:

Table1

A

B

1

aa

2

cc

3

ee

Table2

A

C

1

xx

4

yy

QVTable:
SELECT * From table1;
Left Join Select * From table2;

QVTable

A

B

C

1

aa

xx

2

cc

3

ee

QVTab1:
SELECT * From Table1;
QVTab2:
Left Keep SELECT * From Table2;

QVTab1

A

B

1

aa

2

cc

3

ee

QVTab2

A

C

1

xx

Две таблицы в примере keep, разумеется, связаны посредством поля A.

tab1:
LOAD * From file1.csv;
tab2:
LOAD * From file2.csv;
.. .. ..
Left Keep (tab1) LOAD * From file3.csv;

Mapping

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

Синтаксис:
mapping(loadstatement | selectstatement)

Префикс mapping можно поставить перед оператором LOAD или SELECT. Он будет сохранять результат оператора загрузки в качестве таблицы сопоставления. Mapping — эффективный способ замены значений полей во время выполнения скрипта, например замены значений «СШ», «С.Ш.» или «Америка» значением «США». Таблица сопоставления состоит из двух столбцов, первый из которых содержит значения, используемые для сравнения, а второй — желаемые значения для сопоставления. Таблицы сопоставления временно хранятся в памяти и автоматически удаляются после выполнения скрипта.

К содержанию таблицы сопоставления доступ осуществляется с помощью, например, оператора Map … Using, Rename Field, функции Applymap() или Mapsubstring().

Пример:

В этом примере мы загружаем список продавцов с кодом страны, представляющим их страну проживания. Мы используем таблицу, соответствующую коду страны, для той страны, код которой будет заменен ее названием. В таблице сопоставления указаны только три страны, коды других стран указаны в параметре 'Rest of the world'.

// Load mapping table of country codes:
map1:
mapping LOAD *
Inline [
CCode, Country
Sw, Sweden
Dk, Denmark
No, Norway
] ;
// Load list of salesmen, mapping country code to country

// If the country code is not in the mapping table, put Rest of the world
Salespersons:
LOAD *,
ApplyMap('map1', CCode,'Rest of the world') As Country
Inline [
CCode, Salesperson
Sw, John
Sw, Mary

Sw, Per
Dk, Preben
Dk, Olle
No, Ole
Sf, Risttu] ;
// We don't need the CCode anymore
Drop Field 'CCode';

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

Salesperson Country
John Sweden
Mary Sweden
Per Sweden
Preben Denmark
Olle Denmark
Ole Norway
Risttu Rest of the world

NoConcatenate

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

Синтаксис:
NoConcatenate( loadstatement | selectstatement )

Пример:
LOAD A,B from file1.csv;
NoConcatenate LOAD A,B from file2.csv;

Outer

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

Ключевое слово outer является необязательным и представляет собой тип объединения по умолчанию, используемый в том случае, если не указан префикс join.

Синтаксис:
Outer Join [ (tablename) ](loadstatement |selectstatement )

Аргументы:

Аргумент Описание
tablename Будет выполнено сравнение именованной таблицы с загруженной таблицей.
Операторы loadstatement или selectstatement Оператор LOAD или SELECT для загруженной таблицы.

Пример:

Table1

A

B

1

aa

2

cc

3

ee

Table2

A

C

1

xx

4

yy

SQL SELECT * from table1;
join SQL SELECT * from table2;
ИЛИ
SQL SELECT * from table1;
outer join SQL SELECT * from table2;

Объединенная таблица

A

B

C

1

aa

xx

2

cc

-

3

ee

-

4

-

yy

Replace

Префикс replace используется для удаления таблицы в программе QlikView (и Qlik Sense) полностью и ее замены загруженной или выбранной таблицей.

Синтаксис:
Replace [only](loadstatement |selectstatement |map...usingstatement)

Префикс replace можно добавить в любой оператор LOAD, SELECT или map…using в скрипте. Оператор replace LOAD/replace SELECT отбрасывает всю таблицу QlikView (и Qlik Sense), для которой имя сгенерировано оператором replace LOAD/replace SELECT, и заменяет ее новой таблицей, содержащей результат оператора replace LOAD/replace SELECT. Аналогичный результат достигается во время частичной и полной перезагрузки. Оператор replace map…using запускает сопоставление данных также и во время частичного выполнения скрипта.

Аргументы:

Аргумент Описание
only Дополнительный квалификатор, указывающий на то, что оператор следует игнорировать в ходе нормальной (не частичной) перезагрузки.

Примеры и результаты:
Пример Результат

Tab1:

Replace LOAD * from File1.csv;

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

Tab1:

Replace only LOAD * from File1.csv;

Во время обычной перезагрузки этот оператор игнорируется.

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

Tab1:

LOAD a,b,c from File1.csv;

Replace LOAD a,b,c from File2.csv;

Во время обычной перезагрузки сначала считывается файл File1.csv в таблицу QlikView (и Qlik Sense) Tab1, однако затем она сразу отбрасывается и заменяется новыми данными, загруженными из файла File2.csv. Все данные из файла File1.csv теряются.

Во время частичной перезагрузки изначально отбрасывается вся таблица QlikView (и Qlik Sense) Tab1. После этого она заменяется новыми данными, загруженными из файла File2.csv.

Tab1:

LOAD a,b,c from File1.csv;

Replace only LOAD a,b,c from File2.csv;

Во время обычной перезагрузки данные загружаются из файла File1.csv и сохраняются в таблице QlikView (и Qlik Sense) Tab1. Файл File2.csv игнорируется.

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

Перед префиксами join и keep может стоять префикс right.

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

Синтаксис:
Right (Join | keep) [(tablename)](loadstatement |selectstatement )

Аргументы:

Аргумент Описание
tablename Будет выполнено сравнение именованной таблицы с загруженной таблицей.
Операторы loadstatement или selectstatement Оператор LOAD или SELECT для загруженной таблицы.

Примеры:

Table1

A

B

1

aa

2

cc

3

ee

Table2

A

C

1

xx

4

yy

QVTable:
SQL SELECT * from table1;
right join SQL SELECT * from table2;

QVTable

A

B

C

1

aa

xx

4

-

yy

QVTab1:
SQL SELECT * from Table1;
QVTab2:
right keep SQL SELECT * from Table2;

QVTab1

A

B

1

aa

QVTab2

A

C

1

xx

4

yy

Две таблицы в примере keep, разумеется, связаны посредством поля A.

tab1:
LOAD * from file1.csv;
tab2:
LOAD * from file2.csv;
.. .. ..
right keep (tab1) LOAD * from file3.csv;

Sample

Префикс sample операторов LOAD или SELECT используется для загрузки произвольного образца записей из источника данных.

Синтаксис:
Sample p ( loadstatement | selectstatement )

Аргументы:

Аргумент Описание
p

Произвольное выражение, которое определяет число больше 0 и меньше или равное 1. Число обозначает вероятность считывания определенной записи.

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

Пример:
Sample 0.15 SQL SELECT * from Longtable;
Sample(0.15) LOAD * from Longtab.csv;

Скобки допускаются, но необязательны.

Semantic

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

Синтаксис:
Semantic( loadstatement | selectstatement)

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

Таблицы, загруженные посредством оператора semantic, не могут быть объединены.

Пример:
Semantic LOAD * from abc.csv;
Semantic SELECT Object1, Relation, Object2, InverseRelation from table1;

Unless

Префикс и суффикс unless используется для создания условного предложения, определяющего вычисление или невычисление оператора либо условия «exit». Это короткое утверждение можно использовать вместо полного оператора if..end if.

Синтаксис:
(Unless condition statement | exitstatement unless condition )

Действия statement или exitstatement выполняются, только если элемент condition имеет значение False.

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

Аргументы:

Аргумент Описание
condition Логическое выражение, имеющее значение True или False.
statement Любой оператор скрипта QlikView (и Qlik Sense), за исключением операторов управления.
exitstatement Предложение exit for, exit do или exit sub или оператор exit script.

Примеры:
exit script unless A=1;
unless A=1 LOAD * from myfile.csv;
unless A=1 when B=2 drop table Tab1;

When

Префикс и суффикс when используется для создания условного предложения, определяющего исполнение или неисполнение оператора либо условия «exit». Это короткое утверждение можно использовать вместо полного оператора if..end if.

Синтаксис:
(When condition statement | exitstatement when condition )

Действия statement или exitstatement выполняются, только если условие имеет значение True.

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

Синтаксис:
Аргумент Описание
condition Логическое выражение, имеющее значение True или False.
statement Любой оператор скрипта QlikView (и Qlik Sense), за исключением операторов управления.
exitstatement Предложение exit for, exit do или exit sub или оператор exit script.

Примеры:
exit script when A=1;
when A=1 LOAD * from myfile.csv;
when A=1 unless B=2 drop table Tab1;

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

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

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

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

Alias

Оператор alias используется для установки псевдонима, по которому будет переименовано поле при включении в следующий скрипт.

Alias fieldname as aliasname {,fieldname as aliasname}
Binary

Оператор binary используется для загрузки данных из другого документа QlikView (и Qlik Sense), включая данные секции доступа.

Binary file file ::= [ path ] filename
Comment field

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

comment *fieldlist using mapname
comment fieldname with comment
Comment table

Позволяет отображать комментарии таблицы (метаданные) из баз данных или электронных таблиц.

comment-table tablelist using mapname
comment-table tablename with comment
Direct Query

Оператор DIRECT QUERY обеспечивает доступ к таблицам через подключение ODBC или OLE DB с помощью функции Direct Discovery.

direct-query [path]
Directory

Оператор Directory задает каталог, в котором будет выполняться поиск файлов данных в последующих операторах LOAD до создания нового оператора Directory.

Directory [path]
Disconnect

Оператор Disconnect разрывает текущее соединение ODBC/OLE DB/Custom. Этот оператор является дополнительным.

drop field

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

Допустимыми являются оба оператора drop field и drop fields, причем оба они выполняют одно и то же действие. Если таблица не задана, поле удаляется из всех таблиц, в которых оно встречается.

drop-field fieldname [ , fieldname2 ...] [from tablename1 [ , tablename2 ...]]
drop fields fieldname [ , fieldname2 ...] [from tablename1 [ , tablename2 ...]]
drop table

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

Допустимыми являются оба оператора: drop table и drop tables.

drop-table tablename [, tablename2 ...]
drop tables [ tablename [, tablename2 ...]
Execute

Оператор Execute используется для запуска других программ в ходе загрузки данных QlikView (и Qlik Sense). Например, для выполнения необходимых преобразований.

Execute commandline
Force

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

Force ( capitalization | case upper | case lower | case mixed )
LOAD

Оператор LOAD загружает поля из файла, из определенных в скрипте данных, из ранее загруженной таблицы, из веб-страницы, из результата последующего оператора SELECT или путем создания данных.

Load [ distinct ] *fieldlist
[( from file [ format-spec ] |
from_field fieldassource [format-spec]
inline data [ format-spec ] |
resident table-label |
autogenerate size )]
[ where criterion | while criterion ]
[ group_by groupbyfieldlist]
[order_by orderbyfieldlist ]
Let

Оператор let создан как дополнение к оператору set, используемому для определения переменных скрипта. Оператор let, в отличие от оператора set, вычисляет выражение, расположенное справа от знака «=» до присваивания его переменной.

Let variablename=expression
Loosen Table

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

loosen-table tablename [ , tablename2 ...]
Loosen Tables tablename [ , tablename2 ...]
Map … using

Оператор map … using используется для сопоставления определенных значений полей или выражений со значениями в определенной таблице сопоставления. Таблицу сопоставления можно создать с помощью оператора Mapping.

Map *fieldlist Using mapname
NullAsNull

Оператор NullAsNull отключает преобразование значений NULL в строчные значения, ранее заданные с помощью оператора NullAsValue.

NullAsNull *fieldlist
NullAsValue

Оператор NullAsValue указывает, для каких из полей обнаруженные значения NULL должны быть преобразованы в значения.

NullAsValue *fieldlist
Qualify

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

Qualify *fieldlist
Rem

Оператор rem служит для вставки замечаний или комментариев в скрипт или для временного отключения операторов скрипта без их удаления.

Rem string
Rename Field

Эта функция скрипта переименовывает одно или несколько существующих полей в программе QlikView (и Qlik Sense) после их загрузки.

rename-field (using mapname | oldname to newname{ , oldname to newname })
Rename Fields (using mapname | oldname to newname{ , oldname to newname })
Rename Table

Эта функция скрипта переименовывает одну или несколько существующих внутренних таблиц в программе QlikView (и Qlik Sense) после их загрузки.

rename-table (using mapname | oldname to newname{ , oldname to newname })
Rename Tables (using mapname | oldname to newname{ , oldname to newname })
Section

Оператор section позволяет определить, следует ли рассматривать последующие операторы LOAD и SELECT в качестве данных или определения прав доступа.

Section (access | application)
Select

Выбор полей из источника данных ODBC или поставщика OLE DB осуществляется с помощью стандартных операторов SQL SELECT. Однако то, принимаются операторы SELECT или нет, зависит в основном от используемого драйвера ODBC или поставщика OLE DB.

Select [all | distinct | distinctrow | top n [percent] ] *fieldlist
From tablelist
[Where criterion ]
[Group by fieldlist [having criterion ] ]
[Order by fieldlist [asc | desc] ]
[ (Inner | Left | Right | Full)Join tablename on fieldref = fieldref ]
Set

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

Set variablename=string
Sleep

Оператор sleep приостанавливает выполнение скрипта на указанное время.

Sleep n
SQL

Оператор SQL позволяет отправлять произвольную команду SQL посредством подключения ODBC или OLE DB.

SQL sql_command
SQLColumns

Оператор sqlcolumns возвращает набор полей с описанием столбцов источника данных ODBC или OLE DB, с которыми выполнена операция connect.

SQLTables

Оператор sqltables возвращает набор полей с описанием таблиц источника данных ODBC или OLE DB, с которыми выполнена операция connect.

SQLTypes

Оператор sqltypes возвращает набор полей с описанием типов источника данных ODBC или OLE DB, с которыми выполнена операция connect.

Star

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

Star is [string ]
Store

Эта функция скрипта создает файл QVD или CSV.

Store [ *fieldlist from] table into filename [ format-spec ];
Tag

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

Tag fields fieldlist using mapname Tag field fieldname with tagname
Trace

Оператор trace записывает строку в окно Ход выполнения скрипта и в файл журнала скрипта, если тот используется. Он очень полезен для отладки. Расширение $, добавляемое к переменным, вычисляемым до оператора trace, позволяет настроить сообщение.

Trace string
Unmap

Оператор Unmap деактивирует значение поля mapping, заданное предыдущим оператором Map … Using для последующих загружаемых полей.

Unmap *fieldlist
Unqualify

Оператор Unqualify используется для снятия уточнения имен полей, которое ранее было включено оператором Qualify.

Unqualify *fieldlist
Untag

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

Untag fields fieldlist using mapname
Untag field fieldname with tagname

Alias

Оператор alias используется для установки псевдонима, по которому будет переименовано поле при включении в следующий скрипт.

Синтаксис:
alias fieldname as aliasname {,fieldname as aliasname}

Аргументы:

Аргумент Описание
fieldname Имя поля в исходных данных
aliasname Имя псевдонима, которое требуется использовать взамен.

Примеры и результаты:
Пример Результат

Alias ID_N as NameID;

Alias A as Name, B as Number, C as Date;

Изменения имени, определенные данным оператором, применяются ко всем последующим операторам SELECT и LOAD. Новый псевдоним для имени поля может быть задан с помощью нового оператора alias в любой последующей точке скрипта.

Binary

Оператор binary используется для загрузки данных из другого документа QlikView (и Qlik Sense), включая данные секции доступа. Он не загружает данные макета или переменные.

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

Синтаксис:
binary [path] filename

Аргументы:

Аргумент Описание
filename Имя файла, включая расширение файла .qvw
path

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

  • абсолютный

    Пример: c:\data\

  • относительно документа, содержащего эту строку скрипта.

    Пример: data\

Примеры:

Binary customer.qvw;

В этом примере файл customer.qvw должен быть расположен в рабочем каталоге QlikView (и Qlik Sense).

Binary c:\qv\customer.qvw;

В данном примере используется абсолютный путь к файлу.

Comment field

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

Синтаксис:
comment [fields] *fieldlist using mapname
comment [field] fieldname with comment

Таблица сопоставления должна включать в себя два столбца: в первом содержатся имена полей, а во втором — комментарии.

Аргументы:

Аргумент Описание
*fieldlist Список разделенных запятыми полей, подлежащих комментированию. Символ * в качестве списка полей обозначает все поля. В именах полей разрешается использовать знаки подстановки * и ? . При использовании знаков подстановки, возможно, понадобится заключать имена полей в кавычки.
mapname Имя таблицы сопоставления, считанной ранее в операторе сопоставления LOAD или SELECT.
fieldname Имя поля, для которого необходимо добавить комментарий.
comment Комментарий, который следует добавить к полю.

Пример 1:
commentmap:
mapping LOAD * inline [
a,b
Alpha,This field contains text values
Num,This field contains numeric values
];
comment fields using commentmap;

Пример 2:
comment field Alpha with AFieldContainingCharacters;
comment field Num with '*A field containing numbers';
comment Gamma with 'Mickey Mouse field';

Comment table

Позволяет отображать комментарии таблицы (метаданные) из баз данных или электронных таблиц.

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

Синтаксис:
comment [tables] tablelist using mapname
comment [table] tablename with comment

Аргументы:

Аргумент Описание
tablelist (table{,table})
mapname Имя таблицы сопоставления, считанной ранее в операторе сопоставления LOAD или SELECT.
tablename Имя таблицы, для которой необходимо добавить комментарий.
comment Комментарий, который следует добавить в таблицу.

Пример 1:
Commentmap:
mapping LOAD * inline [
a,b
Main,This is the fact table
Currencies, Currency helper table
];
comment tables using Commentmap;

Пример 2:
comment table Main with 'Main fact table';

Direct Query

Оператор DIRECT QUERY обеспечивает доступ к таблицам через подключение ODBC или OLE DB с помощью функции Direct Discovery.

Синтаксис:
DIRECT QUERY DIMENSION fieldlist [MEASURE fieldlist] [DETAIL fieldlist] FROM tablelist [WHERE where_clause]

Ключевые слова DIMENSION, MEASURE и DETAIL можно использовать в любом порядке.

Предложения ключевых слов DIMENSION и FROM требуются во всех операторах DIRECT QUERY. Ключевое слово FROM должно стоять после ключевого слова DIMENSION.

Поля, указанные сразу после ключевого слова DIMENSION, загружаются в память и могут использоваться для создания связей между данными в памяти и данными Direct Discovery.

Оператор DIRECT QUERY не может содержать предложения DISTINCT или GROUP BY.

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

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

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

Оператор DIRECT QUERY не зависит от источника данных для источников, поддерживающих SQL. Поэтому один и тот же оператор DIRECT QUERY можно использовать для разных баз данных SQL без внесения изменений. Direct Discovery создает запросы для конкретных баз данных, если необходимо.

Синтаксис источника данных NATIVE можно использовать, если пользователь знает, какая база данных запрашивается, и хочет использовать специальные расширения для базы данных SQL. Синтаксис источника данных NATIVE поддерживается:

  • В качестве выражения поля в предложениях DIMENSION и MEASURE
  • В качестве содержимого предложения WHERE

Примеры:
DIRECT QUERY
DIMENSION Dim1, Dim2
MEASURE
NATIVE ('X % Y') AS X_MOD_Y
FROM TableName
DIRECT QUERY
DIMENSION Dim1, Dim2
MEASURE X, Y
FROM TableName
WHERE NATIVE ('EMAIL MATCHES "\*.EDU"')

Следующие термины используются в качестве ключевых слов и поэтому не могут использоваться в качестве имени столбца или поля без кавычек: and, as, detach, detail, dimension, distinct, from, in, is, like, measure, native, not, or, where

Аргументы:

Аргумент Описание
fieldlist

Список спецификаций поля, разделенных запятыми, fieldname {, fieldname}. Спецификация поля может быть именем поля. В этом случае такое же имя используется для имени столбца базы данных и имени поля QlikView (и Qlik Sense). Также спецификация поля может быть «полем alias». В этом случае выражению базы данных или имени столбца задается имя поля QlikView (и Qlik Sense).

tablelist

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

where_clause

Здесь не приведено полное описание синтаксиса предложений базы данных WHERE, но большинство «реляционных выражений» SQL разрешено использовать, включая вызовы функций, оператор LIKE для строк, IS NULL и IS NOT NULL, а оператор IN. BETWEEN не включен.

NOT — это унарный оператор, в отличие от модификатора на определенные ключевые слова.

Примеры:
WHERE x > 100 AND "Region Code" IN ('south', 'west')
WHERE Code IS NOT NULL and Code LIKE '%prospect'
WHERE NOT X in (1,2,3)
Последний пример не может быть записан как:

WHERE X NOT in (1,2,3)

Пример:

В этом примере используется таблица базы данных с именем TableName, содержащая поля Dim1, Dim2, Num1, Num2 и Num3. Поля Dim1 и Dim2 будут загружены в набор данных QlikView (и Qlik Sense).

DIRECT QUERY DIMENSTION Dim1, Dim2 MEASURE Num1, Num2, Num3 FROM TableName ;

Поля Dim1 и Dim2 будут доступны для использования в качестве измерений. Поля Num1, Num2 и Num3 будут доступны для агрегирований. Поля Dim1 и Dim2 также доступны для агрегирований. Тип агрегирований, для которого могут использоваться поля Dim1 и Dim2, зависит от их типов данных. Например, во многих случаях поля DIMENSION содержат строковые данные, такие как имена или номера счетов. Эти поля нельзя суммировать, но их можно посчитать: count(Dim1).

Операторы DIRECT QUERY записываются непосредственно в редактор скриптов. Чтобы упростить конструкцию операторов DIRECT QUERY, можно создать оператор SELECT из подключения к данным, а затем редактировать созданный скрипт, чтобы переделать его в оператор DIRECT QUERY.
Например, оператор SELECT:

SQL SELECT
SalesOrderID,
RevisionNumber,
OrderDate,
SubTotal,
TaxAmt
FROM MyDB.Sales.SalesOrderHeader;

можно изменить на следующий оператор DIRECT QUERY:

DIRECT QUERY
DIMENSION
SalesOrderID,
RevisionNumber
MEASURE
SubTotal,
TaxAmt

DETAIL
OrderDate

FROM MyDB.Sales.SalesOrderHeader;

Списки полей Direct Discovery

Список полей — это список спецификаций поля, разделенных запятыми: fieldname {, fieldname}. Спецификация поля может быть именем поля. В этом случае такое же имя используется для имени столбца базы данных и имени поля. Также спецификация поля может быть «полем alias». В этом случае выражению базы данных или имени столбца задается имя поля QlikView (и Qlik Sense).

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

Имена полей QlikView (и Qlik Sense) используются с учетом регистра. Имена полей базы данных могут учитывать или не учитывать регистр, в зависимости от базы данных. Запрос Direct Discovery сохраняет регистр всех идентификаторов полей и псевдонимов. В следующем примере псевдоним "MyState" используется для внутренних целей для сохранения данных из столбца базы данных "STATEID".

DIRECT QUERY Dimension STATEID as MyState Measure AMOUNT from SALES_TABLE;

Это отличается от результата использования оператора SQL Select с псевдонимом. Если псевдоним не заключен в кавычки, результат будет содержать регистр по умолчанию столбца, возвращенного целевой базой данных. В следующем примере оператор SQL Select для базы данных Oracle создает "MYSTATE," со всеми буквами в верхнем регистре, как и внутренний псевдоним QlikView (и Qlik Sense), даже если в псевдониме используются символы в разном регистре. Оператор SQL Select использует имя столбца, возвращенное базой данных, которое в случае Oracle состоит из всех символов в верхнем регистре.

SQL Select STATEID as MyState, STATENAME from STATE_TABLE;

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

Load STATEID as MyState, STATENAME;

SQL Select STATEID, STATEMENT from STATE_TABLE;

В данном примере столбец "STATEID" сохраняется QlikView (и Qlik Sense) для внутренних целей в качестве "MyState".

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

Примеры:
DIRECT QUERY DIMENSION SalesOrderID, RevisionNumber MEASURE SubTotal AS "Sub Total" FROM AdventureWorks.Sales.SalesOrderHeader
DIRECT QUERY DIMENSION "SalesOrderID" AS "Sales Order ID" MEASURE SubTotal,TaxAmt,(SubTotal-TaxAmt) AS "Net Total" FROM AdventureWorks.Sales.SalesOrderHeader
DIRECT QUERY DIMENSION (2*Radius*3.14159) AS Circumference, Molecules/6.02e23 AS Moles MEASURE Num1 AS numA FROM TableName
DIRECT QUERY DIMENSION concat(region, 'code') AS region_code MEASURE Num1 AS NumA FROM TableName

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

DIRECT QUERY DIMENSION stateid, SUM(amount*7) AS MultiFirst MEASURE amount FROM sales_table

SUM не следует использовать в операторе LOAD.

Direct Discovery также не поддерживает функции QlikView (и Qlik Sense) в операторах Direct Query. Например, использование следующей спецификации для поля DIMENSION приведет к возникновению ошибки, когда поле "Mth" будет использоваться в качестве измерения в диаграмме:

month(ModifiedDate) as Mth

Directory

Оператор Directory задает каталог, в котором будет выполняться поиск файлов данных в последующих операторах LOAD до создания нового оператора Directory.

Синтаксис:
Directory[path]

Если оператор Directory задается без параметра path или вообще опускается, программа QlikView (и Qlik Sense) будет искать в рабочем каталоге QlikView (и Qlik Sense).

Аргументы:

Аргумент Описание
path

Текст может интерпретироваться как путь к файлу qvw.

Path — путь к файлу:

  • абсолютный

    Пример: c:\data\

  • относительно пути документа QlikView (и Qlik Sense).

    Пример: data\

  • URL-адрес (HTTP или FTP), указывающий на местоположение в Интернете или интрасети.

    Пример: http://www.qlik.com

Пример:

Directory c:\userfiles\data;

Disconnect

Оператор Disconnect разрывает текущее соединение ODBC/OLE DB/Custom. Этот оператор является дополнительным.

Синтаксис:
Disconnect

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

Пример:

Disconnect;

Drop field

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

Допустимыми являются оба оператора drop field и drop fields, причем оба они выполняют одно и то же действие. Если таблица не задана, поле удаляется из всех таблиц, в которых оно встречается.

Синтаксис:
Drop field fieldname [ , fieldname2 ...] [from tablename1 [ , tablename2 ...]]
Drop fields fieldname [ , fieldname2 ...] [from tablename1 [ , tablename2 ...]]

Пример:
Drop field A;
Drop fields A,B;
Drop field A from X;
Drop fields A,B from X,Y;

Drop table

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

Синтаксис:
drop table tablename [, tablename2 ...]
drop tables [ tablename [, tablename2 ...]

Допустимыми являются оба оператора: drop table и drop tables.

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

  • Реальной таблицы.
  • Всех полей, которые не относятся к остальным таблицам.
  • Значений полей в остальных полях, относящихся только к отброшенным таблицам.

Примеры и результаты:
Пример Результат
drop table Orders, Salesmen, T456a; Эта строка предписывает удаление из памяти трех таблиц.
Tab1:
Load * Inline [
Customer, Items, UnitPrice
Bob, 5, 1.50
];

Tab2:
LOAD Customer, Sum( Items * UnitPrice ) as Sales
resident Tab1
group by Customer;

drop table Tab1;
Как только таблица Tab2 создана, отбрасывается таблица Tab1.

Execute

Оператор Execute используется для запуска других программ в ходе загрузки данных QlikView (и Qlik Sense). Например, для выполнения необходимых преобразований.

Операторы Execute выполняются только в том случае, если в параметрах пользователя включено переопределение безопасности.

Синтаксис:
execute commandline

Аргументы:

Аргумент Описание
commandline

Текст, который может интерпретироваться операционной системой как командная строка.

Пример:
Execute C:\Program Files\Office12\Excel.exe;
Execute winword macro.doc;
Execute cmd.exe /C C:\BatFiles\Log.bat;

Ключ /C является обязательным, поскольку он является параметром cmd.exe.

Force

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

Синтаксис:
Force ( capitalization | case upper | case lower | case mixed )

Если не указан ни один параметр, применяется force case mixed. Оператор force действует до создания следующего оператора force.

Оператор force не влияет на секцию доступа: регистр во всех загруженных значениях полей не учитывается.

Пример Результат

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

FORCE Capitalization;
Capitalization:
LOAD * Inline [
ab
Cd
eF
GH
];

Таблица Capitalization содержит следующие значения:

Ab
Cd
Ef
Gh

Все значения вводятся с первой прописной буквой.

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

FORCE Case Upper;
CaseUpper:
LOAD * Inline [
ab
Cd
eF
GH
];

Таблица CaseUpper содержит следующие значения:

AB
CD
EF
GH

Все значения вводятся в верхнем регистре.

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

FORCE Case Lower;
CaseLower:
LOAD * Inline [
ab
Cd
eF
GH
];

Таблица CaseLower содержит следующие значения:

ab
cd
ef
gh

Все значения вводятся в нижнем регистре.

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

FORCE Case Mixed;
CaseMixed:
LOAD * Inline [
ab
Cd
eF
GH
];

Таблица CaseMixed содержит следующие значения:

ab
Cd
eF
GH

Все значения вводятся в том виде, в котором они отображаются в скрипте.

Load

Оператор LOAD загружает поля из файла, из определенных в скрипте данных, из ранее загруженной таблицы, из веб-страницы, из результата последующего оператора SELECT или путем создания данных.

Синтаксис:
LOAD [ distinct ] fieldlistv [( from file [ format-spec ] |
from_field fieldassource [format-spec] inline data [ format-spec ] |
resident table-label | autogenerate size )] [ where criterion | while criterion ]
[ group_by groupbyfieldlist ] [order_by orderbyfieldlist ]

Аргументы:

Аргумент Описание
distinct distinct — это логическое условие, используемое в том случае, если должна быть загружена только первая из дублирующихся записей.
fieldlist fieldlist ::= ( * | field {, field } )

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

field ::= ( fieldref | expression ) [as aliasname ]

Определение поля должно всегда содержать литерал, ссылку на существующее поле или выражение.

fieldref ::= ( fieldname |@fieldnumber |@startpos:endpos [ I | U | R | B | T] )

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

@fieldnumber представляет номер поля в табличном файле с разделителями. Он должен быть положительным целым числом с предшествующим символом «@». Нумерация всегда начинается с 1 и идет до числа полей.

@startpos:endpos представляет начальную и конечную позиции поля в файле с записями фиксированной длины. Позиции должны быть положительными целыми числами. Двум числами должен предшествовать символ «@», и они должны быть разделены двоеточием. Нумерация всегда начинается с 1 и содержит число позиций. В последнем поле элемент n используется как конечное положение.

  • Если после @startpos:endpos указаны символы I или U, прочитанные байты будут интерпретированы как двоичное целое число со знаком (I) или без знака (U) (порядок байтов Intel). Прочитанное число позиций должно быть 1, 2 или 4.
  • Если после @startpos:endpos указан символ R, прочитанные байты будут интерпретированы как двоичное действительное число (32-разрядное IEEE или 64-разрядное с плавающей запятой). Прочитанное число позиций должно быть 4 или 8.
  • Если после @startpos:endpos указан символ B, прочитанные байты будут интерпретироваться как числа в двоичной кодировке BCD (Binary Coded Decimal) в соответствии со стандартом COMP-3. Может быть указано любое число байтов.

expression может быть числовой или строковой функцией на основе одного или нескольких других полей в этой же таблице. Дополнительные сведения см. в справке по синтаксису выражений.

as используется для назначения полю нового имени.

from

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

file ::= [ path ] filename

  • абсолютный

    Пример: c:\data\

  • относительно пути документа QlikView (и Qlik Sense).

    Пример: data\

  • URL-адрес (HTTP или FTP), указывающий на местоположение в Интернете или интрасети. URL-адрес должен быть представлен в кодировке URL, к примеру, в случае, если он содержит пробелы.

    Пример: http://www.qlik.com

    Пример: http://www.enterprise.com/project%20files (http://www.enterprise.com/project files)

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

При серверной установке QlikView (и Qlik Sense) рабочим каталогом по умолчанию является C:\ProgramData\QlikTech\Documents. Рабочий каталог по умолчанию можно изменить в QlikView (и Qlik Sense) Management Console.

Элемент filename может содержать стандартные знаки подстановки DOS ( * и ? ). В результате будут загружены все файлы в указанном каталоге, удовлетворяющие критериям.

format-spec ::= ( fspec-item { , fspec-item } )

Спецификация формата состоит из списка нескольких элементов спецификации формата, заключенных в скобки.

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

fieldassource::=(tablename, fieldname)

Поле — это имя ранее загруженных tablename и fieldname.

format-spec ::= ( fspec-item {, fspec-item } )

Спецификация формата состоит из списка нескольких элементов спецификации формата, заключенных в скобки.

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

data ::= [ text ]

Данные, введенные с использованием выражения inline, должны быть заключены в двойные или в квадратные скобки. Текст между ними интерпретируется так же, как и содержимое файла. Поэтому при вставке новой строки в текстовый файл ее также необходимо вставить в текст выражение inline, например, нажав клавишу Enter при вводе в скрипте.

format-spec ::= ( fspec-item {, fspec-item } )

Спецификация формата состоит из списка нескольких элементов спецификации формата, заключенных в скобки.

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

table label — это метка, предшествующая оператору(-ам) LOAD или SELECT, используемым для создания исходной таблицы. В конце метки должно быть указано двоеточие.

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

size ::= number

Number — это целое число, обозначающее число создаваемых записей. Список полей не должно содержать выражения, для которых требуются данные из базы данных. В выражениях допускается использовать только константы и функции без параметров (такие как rand() или recno()).

where where — предложение, которое используется для указания того, нужно ли включить запись в выборку или нет. Выборка включается, если элемент criterion имеет значение True.

criterion — это логическое выражение.

while

while — это выражение, используемое для указания необходимости повторного чтения записи. Эта же запись читается, если для элемента criterion указано значение True. Чтобы быть полезным, выражение while обычно должно содержать функцию IterNo( ).

criterion — это логическое выражение.

group_by

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

groupbyfieldlist ::= (fieldname { ,fieldname } )

order_by order by — это выражение, используемое для сортировки записей резидентной таблицы до их обработки оператором LOAD. Резидентная таблица может быть отсортирована по одному или нескольким полям в возрастающем или убывающем порядке. Сортировка осуществляется первично по числовому значению и дополнительно в порядке соответствия национальных параметров. Это выражение может использоваться, только если источником данных является резидентная таблица.

Поля заказов указывают поле для сортировки резидентной таблицы. Поле может быть указано по имени или по числу в резидентной таблице (первое поле имеет номер 1).

orderbyfieldlist ::= fieldname [ sortorder ] { , fieldname [ sortorder ] }

sortorder имеет значение asc для сортировки по возрастанию или desc для сортировки по убыванию. Если sortorder не указан, используется asc.

fieldname, path, filename и aliasname — это текстовые строки, представляющие подразумеваемые соответствующие имена. Любое поле в исходной таблице может использоваться в качестве fieldname. Однако поля, созданные с помощью выражения (aliasname), не рассматриваются и не могут использоваться внутри одного оператора LOAD.

Если источник данных не указан с помощью выражений from, inline, resident, from_field или autogenerate, данные будут загружены из результата сразу после выполнения оператора SELECT или LOAD. Последующий оператор не должен иметь префикс.

Примеры:

Загрузка различных форматов файлов

Загрузка файла данных с разделителями с параметрами по умолчанию:

LOAD * from data1.csv;

Загрузка файла с разделителями с точкой в качестве разделителя и со встроенными метками:

LOAD * from 'c:\userfiles\data1.csv' (ansi, txt, delimiter is ',', embedded labels);

Загрузка файла с разделителями с табуляцией в качестве разделителя и со встроенными метками:

LOAD * from 'c:\userfiles\data2.txt' (ansi, txt, delimiter is '\t', embedded labels);

Загрузка файла dif со встроенными заголовками:

LOAD * from file2.dif (ansi, dif, embedded labels);

Загрузка трех полей из файла с фиксированными записями без заголовков:

LOAD @1:2 as ID, @3:25 as Name, @57:80 as City from data4.fix (ansi, fix, no labels, header is 0, record is 80);

Загрузка файла QVX, указывающего абсолютный путь:

LOAD * from C:\qdssamples\xyz.qvx (qvx);

Выбор определенных полей, переименование и вычисление полей

Загрузка только трех указанных полей из файла с разделителями:

LOAD FirstName, LastName, Number from data1.csv;

Переименование первого поля на A, а второго на B при загрузке файла без меток:

LOAD @1 as A, @2 as B from data3.txt (ansi, txt, delimiter is '\t', no labels);

Загрузка Name путем объединения FirstName, символа пробела и LastName:

LOAD FirstName&' '&LastName as Name from data1.csv;

Загрузка Quantity, Price и Value (продукт Quantity и Price):

LOAD Quantity, Price, Quantity*Price as Value from data1.csv;

Выбор определенных записей

Загрузка только уникальных символов, дубликаты будут удалены:

LOAD distinct FirstName, LastName, Number from data1.csv;

Загрузка только записей, где поле Litres имеет значение больше нуля:

LOAD * from Consumption.csv where Litres>0;

Загрузка данных не из файла и автоматически генерируемых данных

Загрузка таблицы с встроенными данными, двух полей с именамиCatID и Category:

LOAD * Inline
[CatID, Category
0,Regular
1,Occasional
2,Permanent];

Загрузка таблицы со встроенными данными, трех полей с именами UserID, Password и Access:

LOAD * Inline [UserID, Password, Access
A, ABC456, User
B, VIP789, Admin];

Загрузка таблицы с 10 000 строк. Поле A будет содержать количество прочитанных записей (1,2,3,4,5…), а поле B будет содержать произвольное число в диапазоне от 0 до 1:

LOAD RecNo( ) as A, rand( ) as B autogenerate(10000);
Скобки после элемента autogenerate допускаются, но необязательны.

Загрузка данных из ранее загруженной таблицы

Сначала мы загружаем табличный файл с разделителями и присваиваем ему имя tab1:

tab1:
SELECT A,B,C,D from transtable;

Загрузка полей из уже загруженной таблицы tab1 в таблицу tab2:

tab2:
LOAD A,B,month©,A*B+D as E resident tab1;

Загрузка полей из уже загруженной таблицы tab1, но только записей, где A больше B:

tab3:
LOAD A,A+B+C resident tab1 where A>B;

Загрузка полей из уже загруженной таблицы tab1, сортированных по значению A:

LOAD A,B*C as E resident tab1 order by A;

Загрузка полей из уже загруженной таблицы tab1, сортированных по первому полю, а затем по второму полю:

LOAD A,B*C as E resident tab1 order by 1,2;

Загрузка полей из уже загруженной таблицы tab1, сортированных по значению C в порядке убывания, затем по значению B в порядке возрастания, а затем по первому полю в порядке убывания:

LOAD A,B*C as E resident tab1 order by C desc, B asc, 1 des;

Загрузка данных из ранее загруженных полей

Загрузка поля Types из ранее загруженной таблицы Characters в качестве A:

LOAD A from_field (Characters, Types);

Загрузка данных из следующей таблицы (предварительная загрузка)

Загрузка полей A, B, а также вычисляемых полей X и Y из таблицы Table1, которая загружается в следующем операторе SELECT:

LOAD A, B, if(C>0,'positive','negative') as X, weekday(D) as Y;
SELECT A,B,C,D from Table1;

Группировка данных

Загрузка полей, группированных (агрегированных) по значению ArtNo:

LOAD ArtNo, round(Sum(TransAmount),0.05) as ArtNoTotal from table.csv group by ArtNo;

Загрузка полей, группированных (агрегированных) по значениям Week и ArtNo:

LOAD Week, ArtNo, round(Avg(TransAmount),0.05) as WeekArtNoAverages from table.csv group by Week, ArtNo;

Последовательное чтение одной записи

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

Student,Grades
Mike,5234
John,3345
Pete,1234
Paul,3352

Оценки по 5-балльной шкале выставлены по предметам: Math, English, Science и History. Оценки можно выделить в отдельные значения путем многократного считывания каждой записи с помощью выражения while, использующего функцию IterNo( ) в качестве счетчика. При каждом считывании оценка извлекается функцией Mid и сохраняется в значении Grade, а предмет выбирается с помощью функции pick и сохраняется в значении Subject. Конечное выражение while содержит проверку на считывание всех оценок (четыре на студента в данном случае), что означает необходимость считывания записи о следующем студенте.

MyTab:
LOAD Student,
mid(Grades,IterNo( ),1) as Grade,
pick(IterNo( ), 'Math', 'English', 'Science', 'History') as Subject from Grades.csv
while IsNum(mid(Grades,IterNo(),1));

Результатом будет таблица, содержащая следующие данные:

Student Subject Grade
John English 3
John History 5
John Math 3
John Science 4
Mike English 2
Mike History 4
Mike Math 5
Mike Science 3
Paul English 3
Paul History 2
Paul Math 3
Paul Science 5
Pete English 2
Pete History 4
Pete Math 1
Pete Science 3

Элементы спецификации формата

Каждый элемент спецификации формата задает определенное свойство табличного файла:

fspec-item ::= [ ansi | oem | mac | UTF-8 | Unicode | txt | fix | dif | biff | ooxml | html | xml | qvd | qvx | delimiter is
char | no eof | embedded labels | explicit labels | no labels | table is [tablename] | header is n |
header is line | header is n lines | comment is string | record is n |
record is line | record is n lines | no quotes |msq ]

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

Character set

Набор символов — это спецификатор файла для оператора LOAD, который определяет набор символов, используемый в файле.

ansi | oem | mac | UTF-8 | Unicode | codepage is |

См.: Набор символов

Table format

Формат таблицы — это спецификатор файла для оператора LOAD, который определяет тип файла. Если ничего не было указано, то используется формат .txt.

txt | fix | dif | biff | ooxml | html | xml | qvd | qvx

См.: Table format

Delimiter

Для табличных файлов с разделителями можно указать произвольный разделитель с помощью описателя delimiter is. Этот описатель применяется только к файлам с разделителем формата .txt.

delimiter is char
Header is

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

header-is n Header is line Header is n lines
Comment is

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

Comment is commentprefix
labels

Labels — это спецификатор файла для оператора LOAD, который определяет нахождение имен полей в файле.

embedded labels | explicit labels| no labels
no eof

Спецификатор no eof используется для игнорирования символа конца файла при загрузке файлов с разделителями в формате .txt.

quotes

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

no quotes msq
Record is

При использовании файлов с фиксированной длиной записи укажите длину записи с помощью описателя record is.

record-is n Record is line Record is n lines
XML

Этот спецификатор скрипта используется при загрузке файлов xml. Допустимые параметры для спецификатора XML перечислены в синтаксических правилах.

xmlsax xmlsimple pattern is path

См.: XML

Набор символов

Набор символов — это спецификатор файла для оператора LOAD, который определяет набор символов, используемый в файле.

Синтаксис:
utf8 | unicode | ansi | oem | mac | codepage is

Аргументы:

Аргумент Описание
utf8 Набор символов UTF-8
unicode Набор символов Unicode
ansi Windows, кодовая страница 1252
oem DOS, OS/2, AS400 и другие
mac Кодовая страница 10000
codepage is Со спецификатором codepage можно использовать любую кодовую страницу Windows как N .

Ограничения:

Преобразование из набора символов oem не реализовано для MacOS. Если не выбран ни один набор, используется кодовая страница 1252 для Windows.

Пример:
LOAD * from a.txt (utf8, txt, delimiter is ',' , embedded labels)
LOAD * from a.txt (unicode, txt, delimiter is ',' , embedded labels)
LOAD * from a.txt (codepage is 10000, txt, delimiter is ',' , no labels)

Table format

Формат таблицы — это спецификатор файла для оператора LOAD, который определяет тип файла. Если ничего не было указано, то используется формат .txt.

txt

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

См.: Delimiter

fix

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

Обычно многие файлы с фиксированной длиной содержат записи, разделенные символом перевода строки. Но существует много других вариантов, как указать размер записи в байтах или охватить более одной линии с помощью Record is.

См.: Record is

Если данные содержат многобайтовые символы, разрывы полей могут сместиться, поскольку этот формат основан на фиксированной длине в байтах.
dif В файле .dif (Data Interchange Format — формат обмена данными) для определения таблицы используется особый формат.
biff Программа QlikView (и Qlik Sense) может также интерпретировать данные в стандартных файлах Excel средствами формата biff (Binary Interchange File Format).
ooxml Для файлов Excel 2007 и более поздних версий используется формат ooxml .xslx.
html Если таблица является частью html-страницы или файла, используйте формат html.
xml xml (расширяемый язык разметки) — это обычный язык разметки, используемый для представления структур данных в текстовом формате.
qvd Формат qvd представляет собой собственный формат файлов QVD, экспортируемых из документа QlikView (и Qlik Sense).
qvx Формат qvx представляет собой формат файла или потока для высокоэффективной передачи в программу QlikView (и Qlik Sense).

Delimiter

Для табличных файлов с разделителями можно указать произвольный разделитель с помощью описателя delimiter is. Этот описатель применяется только к файлам с разделителем формата .txt.

Синтаксис:
delimiter is char

Аргументы:

Аргумент Описание
char Указывает один символ из 127 ASCII символов.

Могут использоваться следующие значения:

'\t' представляет знак табуляции и указывается с кавычками или без них.
'\\' представляет обратную косую черту ( \ ).
'spaces' представляет все комбинации одного или нескольких пробелов. Непечатные символы ASCII с кодом менее 32, за исключением CR и LF, будут интерпретироваться как пробелы.

Если ничего не указано, используется delimiter is ','.

Пример:

LOAD * from a.txt (utf8, txt, delimiter is ',' , embedded labels);

No eof

Спецификатор no eof используется для игнорирования символа конца файла при загрузке файлов с разделителями в формате .txt.

Синтаксис:
no eof

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

Этот спецификатор применяется только к текстовым файлам с разделителями.

Пример:

LOAD * from a.txt (txt, utf8, embedded labels, delimiter is ' ', no eof);

Labels

Labels — это спецификатор файла для оператора LOAD, который определяет нахождение имен полей в файле.

Синтаксис:
embedded labels|explicit labels|no labels

Имена полей могут находиться в разных местах файла. Если первая запись содержит имена полей, следует использовать embedded labels. Если имена полей не найдены, следует использовать no labels. В файлах dif иногда используются отдельные разделы заголовка с явными именами полей. В таких случаях следует использовать explicit labels. Если не выбран ни один параметр, для файлов dif также используются embedded labels.

Пример 1:

LOAD * from a.txt (unicode, txt, delimiter is ',' , embedded labels

Пример 2:

LOAD * from a.txt (codePage is 1252, txt, delimiter is ',' , no labels)

Header is

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

Синтаксис:
header is n header is line header is n lines

Длина заголовка может быть задана в байтах (header is n) или в строках (header is line или header is n lines). n должно быть положительным целым числом, представляющим длину заголовка. Если ничего не указано, используется header is 0. Спецификатор header is применяется только к табличным файлам.

Пример:

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

*Header line
Col1,Col2
a,B
c,D

С помощью спецификатора header is 1 lines первая линия не будет загружена как данные. В примере благодаря спецификатору embedded labels программа QlikView (и Qlik Sense) интерпретирует первую неисключенную линию как содержащую метки поля.

LOAD Col1, Col2
FROM header.txt
(txt, embedded labels, delimiter is ',', msq, header is 1 lines);

В результате образуется таблица с двумя полями, Col1 и Col2.

Record is

При использовании файлов с фиксированной длиной записи укажите длину записи с помощью описателя record is.

Синтаксис:
Record is n Record is line Record is n lines

Аргументы:

Аргумент Описание
n Указывает длину записи в байтах.
line Указывает длину записи в качестве одной строки.
n lines Указывает длину записи в строках, где n — это положительное целое число, представляющее длину записи.

Ограничения:

Спецификатор record is применяется только к файлам fix.

Quotes

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

Синтаксис:
no quotes msq

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

Аргументы:

Аргумент Описание
no quotes Используется, если кавычки не должны приниматься в текстовом файле.
msq

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

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

XML

Этот спецификатор скрипта используется при загрузке файлов xml. Допустимые параметры для спецификатора XML перечислены в синтаксических правилах.

Синтаксис:
xmlsax xmlsimple pattern is path

Элементы xmlsax и xmlsimple взаимоисключающие. При использовании xml можно указать только один вариант. При использовании pattern считывание файла начинается с начала указанного тега и идет до его конца. Если path содержит пробелы, то такой путь необходимо заключить в кавычки.

Использовать xmlsax можно, только если на компьютере установлен синтаксический анализатор Microsoft xml 3.0 или выше от компании MSXML. Этот продукт можно загрузить на домашней странице Microsoft.

Let

Оператор let создан как дополнение к оператору set, используемому для определения переменных скрипта. Оператор let, в отличие от оператора set, вычисляет выражение, расположенное справа от знака «=» до присваивания его переменной.

Синтаксис:
Let variablename=expression

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

Примеры и результаты:
Пример Результат

Set x=3+4;

Let y=3+4;

z=$(y)+1;

$(x) будет вычислено как '3+4'

$(y) будет вычислено как ' 7'

$(z) будет вычислено как ' 8'

Let T=now( ); $(T) получит значение текущего времени.

Loosen Table

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

Синтаксис:
Loosen Table tablename [ , tablename2 ...] Loosen Tablestablename [ , tablename2 ...]

Можно использовать оба варианта синтаксиса: Loosen Table или Loosen Tables.

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

Пример:
Tab1:
SELECT * from Trans;
Loosen Table Tab1;

Map

Оператор map … using используется для сопоставления определенных значений полей или выражений со значениями в определенной таблице сопоставления. Таблицу сопоставления можно создать с помощью оператора Mapping.

Синтаксис:
Map *fieldlist Using mapname

Автоматическое сопоставление выполняется для полей, загруженных после выполнения оператора Map … Using вплоть до конца выполнения скрипта или появления оператора Unmap.

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

Аргументы:

Аргумент Описание
*fieldlist Разделенный запятыми список полей, которые следует сопоставить, начиная с этой точки выполнения скрипта. Символ * в качестве списка полей обозначает все поля. В именах полей разрешается использовать знаки подстановки * и ?. При использовании знаков подстановки, возможно, понадобится заключать имена полей в кавычки.
mapname Имя таблицы сопоставления, считанной ранее в операторе mapping load или mapping select.

Примеры и результаты:
Пример Результат
Map Country Using Cmap; Позволяет выполнять сопоставление поля Country с помощью карты Cmap.
Map A, B, C Using X; Позволяет выполнять сопоставление полей A, B и C с помощью карты X.
Map * Using GenMap; Позволяет сопоставлять все поля с помощью элемента GenMap.

NullAsNull

Оператор NullAsNull отключает преобразование значений NULL в строчные значения, ранее заданные с помощью оператора NullAsValue.

Синтаксис:
NullAsNull *fieldlist

Оператор NullAsValue работает как переключатель и может быть включен/выключен несколько раз в рамках скрипта с помощью оператора NullAsValue или NullAsNull.

Аргументы:

Аргумент Описание
*fieldlist Список полей, разделенных запятыми, для которых следует включить NullAsNull. Символ * в качестве списка полей обозначает все поля. В именах полей разрешается использовать знаки подстановки * и ?. При использовании знаков подстановки, возможно, понадобится заключать имена полей в кавычки.

Пример:
NullAsNull A,B;
LOAD A,B from x.csv;

NullAsValue

Оператор NullAsValue указывает, для каких из полей обнаруженные значения NULL должны быть преобразованы в значения.

Синтаксис:
NullAsValue *fieldlist

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

Оператор NullAsValue работает как переключатель и выполняется для последующих операторов загрузки. Его можно снова выключить с помощью оператора NullAsNull.

Аргументы:

Аргумент Описание
*fieldlist Список полей, разделенных запятыми, для которых следует включить NullAsValue. Символ * в качестве списка полей обозначает все поля. В именах полей разрешается использовать знаки подстановки * и ?. При использовании знаков подстановки, возможно, понадобится заключать имена полей в кавычки.

Пример:
NullAsValue A,B;
Set NullValue = 'NULL';
LOAD A,B from x.csv;

Qualify

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

Синтаксис:
Qualify *fieldlist

Автоматическое объединение полей с одинаковыми именами в разных таблицах можно отключить с помощью оператора qualify, который уточняет имя поля с помощью имени таблицы. В случае уточнения имена полей будут изменены после их нахождения в таблице. Новое имя будет иметь вид tablename.fieldname. Tablename соответствует метке текущей таблицы или, при отсутствии метки, имени после слова from в операторах LOAD и SELECT.

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

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

Оператор qualify запрещается использовать в контексте частичной перезагрузки.

Аргументы:

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

Пример 1:
Qualify B;
LOAD A,B from x.csv;
LOAD A,B from y.csv;

Две таблицы x.csv и y.csv связываются только через A. В результате в трех полях отобразятся следующие значения: A, x.B, y.B.

Пример 2:

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

qualify *;
unqualify TransID;
SQL SELECT * from tab1;
SQL SELECT * from tab2;
SQL SELECT * from tab3;

Для связей между таблицами tab1, tab2 и tab3 будет использоваться только TransID.

Rem

Оператор rem служит для вставки замечаний или комментариев в скрипт или для временного отключения операторов скрипта без их удаления.

Синтаксис:
Rem string

Весь текст между элементом rem и следующей точкой с запятой ; считается комментарием.

В скрипт можно добавить комментарии двумя другими способами:

  1. Можно создать комментарий в любом месте в скрипте, за исключением текста между двумя кавычками, для чего необходимо заключить необходимый фрагмент в символы /* и */.
  2. При вводе // в скрипте весь последующий текст справа в той же строке становится комментарием. (Обратите внимание на исключение //:, которое обычно является частью интернет-адреса).

Аргументы:

Аргумент Описание
string Произвольный текст.

Пример:
Rem ** This is a comment **;
/* This is also a comment */
// This is a comment as well

Rename field

Эта функция скрипта переименовывает одно или несколько существующих полей в программе QlikView (и Qlik Sense) после их загрузки.

Не рекомендуется использовать одинаковые имена для поля и переменной в QlikView (и Qlik Sense).

Можно использовать оба варианта синтаксиса: rename field или rename fields.

Синтаксис:
Rename Field (using mapname | oldname to newname{ , oldname to newname })
Rename Fields (using mapname | oldname to newname{ , oldname to newname })

Аргументы:

Аргумент Описание
mapname Имя ранее загруженной таблицы сопоставления, в которой содержится одна или несколько пар старых и новых имен полей.
oldname Старое имя поля.
newname Новое имя поля.

Ограничения:

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

Пример 1:
Rename Field XAZ0007 to Sales;

Пример 2:
FieldMap:
Mapping SQL SELECT oldnames, newnames from datadictionary;
Rename Fields using FieldMap;

Rename table

Эта функция скрипта переименовывает одну или несколько существующих внутренних таблиц в программе QlikView (и Qlik Sense) после их загрузки.

Можно использовать оба варианта синтаксиса: rename table или rename tables.

Синтаксис:
Rename Table (using mapname | oldname to newname{ , oldname to newname })
Rename Tables (using mapname | oldname to newname{ , oldname to newname })

Аргументы:

Аргумент Описание
mapname Имя ранее загруженной таблицы сопоставления, в которой содержится одна или несколько пар старых и новых имен таблиц.
oldname Старое имя таблицы.
newname Новое имя таблицы.

Ограничения:

Две таблицы с разными именами не могут получить одинаковые имена при переименовании. Скрипт будет выполнен без ошибок, но вторая таблица не будет переименована.

Пример 1:
Tab1:
SELECT * from Trans;
Rename Table Tab1 to Xyz;

Пример 2:
TabMap:
Mapping LOAD oldnames, newnames from tabnames.csv;
Rename Tables using TabMap;

Оператор Search используется для включения или исключения полей из функции поиска.

Синтаксис:
Search Include *fieldlist
Search Exclude *fieldlist

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

Аргументы:

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

Пример:
Search Include *; Включить все поля в поиск.
Search Exclude '*ID'; Исключить из поиска все поля, оканчивающиеся элементом ID.
Search Include ProductID; Включить все поля ProductID в поиск.

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

Section

Оператор section позволяет определить, следует ли рассматривать последующие операторы LOAD и SELECT в качестве данных или определения прав доступа.

Синтаксис:
Section (access | application)

Если ничего не указано, используется section application. Определение section действительно до тех пор, пока не будет создан новый оператор section.

Пример:
Section access;
Section application;

Select

Выбор полей из источника данных ODBC или поставщика OLE DB осуществляется с помощью стандартных операторов SQL SELECT. Однако то, принимаются операторы SELECT или нет, зависит в основном от используемого драйвера ODBC или поставщика OLE DB.

Синтаксис:
SELECT [all | distinct | distinctrow | top n [percent] ] fieldlist
From tablelist
[where criterion ]
[group by fieldlist [having criterion ] ]
[order by fieldlist [asc | desc] ]
[ (Inner | Left | Right | Full) join tablename on fieldref = fieldref ]

Более того, несколько операторов SELECT иногда могут соединяться в один посредством использования оператора union:

selectstatement Union selectstatement

Оператор SELECT интерпретируется драйвером ODBC или поставщиком OLE DB, поэтому могут возникать отклонения от общего синтаксиса SQL в зависимости от возможностей драйверов ODBC или поставщика OLE DB, например:

  • as иногда недопустим, то есть aliasname должен сразу следовать за fieldname.
  • as иногда является обязательным при использовании aliasname.
  • distinct, as,where, group by, order by или union иногда не поддерживаются.
  • Драйвер ODBC иногда допускает не все различные кавычки, перечисленные выше.

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

Аргументы:

Аргумент Описание
distinct distinct — это логическое условие, используемое в случае, если копии комбинаций значений в выбранных полях должны быть загружены только один раз.
distinctrow distinctrow — это логическое условие, используемое в случае, если копии записей в таблице источника должны быть загружены только один раз.
fieldlist

fieldlist ::= (*| field ) {, field }

Список полей, которые необходимо выбрать. Символ «*» в качестве списка полей обозначает все поля таблицы.

fieldlist ::= field {, field }

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

field ::= ( fieldref | expression ) [as aliasname ]

Выражение может, к примеру, быть числовой или строковой функцией, основанной на одном или нескольких других полях. Некоторые из обычно принимаемых операторов и функций: +, -, *, /, & (объединение строк),sum(fieldname), count(fieldname), avg(fieldname)(average), month(fieldname) и т. д. Дополнительную информацию см. в документации к драйверу ODBC.

fieldref ::= [ tablename. ] fieldname

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

Предложение as используется для назначения полю нового имени.

from

tablelist ::= table {, table }

Список таблиц, из которых выбираются поля.

table ::= tablename [ [as ] aliasname ]

Элемент tablename может быть в кавычках, а может и не быть.

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

criterion является логическим выражением, которое иногда может быть очень сложным. Некоторые из принимаемых операторов: числовые операторы и функции, =,?<> или #(не равно), >,?>=,?<,?<=,?and, or,not, exists,some, all,in, а также новые операторы SELECT. Дополнительную информацию можно получить в документации драйвера ODBC или поставщика OLE DB.

group by group by — выражение, используемое для агрегирования (группировки) нескольких записей в одну. Внутри одной группы для определенного поля все записи должны иметь одинаковое значение или поле может использоваться только изнутри выражения, например, в виде суммы или среднего значения. Выражение, основанное на одном или нескольких полях, определяется в выражении символа поля.
having having — это предложение, используемое для классификации групп подобно тому, как предложение where используется для классификации записей.
order by order by — предложение, используемое для указания порядка сортировки результирующей таблицы оператора SELECT.
join join — это префикс, который указывает, необходимо ли объединить несколько таблиц в одну. Имена полей и имена таблиц должны заключаться в кавычки, если в них содержатся пробелы или буквы из национальных наборов символов. Когда программа QlikView (и Qlik Sense) автоматически создаст скрипт, драйвер ODBC или поставщик OLE DB, указанный в определении источника данных в операторе Connect, определит используемые кавычки.

Пример 1:
SELECT * FROM `Categories`;

Пример 2:
SELECT `Category ID`, `Category Name` FROM `Categories`;

Пример 3:
SELECT `Order ID`, `Product ID`,
`Unit Price` * Quantity * (1-Discount) as NetSales
FROM `Order Details`;

Пример 4:
SELECT `Order Details`.`Order ID`,
Sum(`Order Details`.`Unit Price` * `Order Details`.Quantity) as `Result`
FROM `Order Details`, Orders
where Orders.`Order ID` = `Order Details`.`Order ID`
group by `Order Details`.`Order ID`;

Set

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

Синтаксис:
Set variablename=string

Пример 1:
Set FileToUse=Data1.csv;

Пример 2:
Set Constant="My string";

Пример 3:
Set BudgetYear=2012;

Sleep

Оператор sleep приостанавливает выполнение скрипта на указанное время.

Синтаксис:
Sleep n

Аргументы:

Аргумент Описание
n Задается в миллисекундах, где n — положительное целое число, не превышающее 3600000 (то есть 1 час). В качестве значения может выступать выражение.

Пример 1:
Sleep 10000;

Пример 2:
Sleep t*1000;

SQL

Оператор SQL позволяет отправлять произвольную команду SQL посредством подключения ODBC или OLE DB.

Синтаксис:
SQL sql_command

При отправке операторов SQL, которые обновляют базу данных, будет возвращаться ошибка, если программа QlikView (и Qlik Sense) открыла подключение ODBC в режиме «только чтение».

Синтаксис:
SQL SELECT * from tab1;

допускается и будет предпочтительным синтаксисом для SELECT с целью обеспечения согласованности. Тем не менее префикс SQL для операторов SELECT будет необязательным.

Аргументы:

Аргумент Описание
sql_command Допустимая команда SQL.

Пример 1:
SQL leave;

Пример 2:
SQL Execute <storedProc>;

SQLColumns

Оператор sqlcolumns возвращает набор полей с описанием столбцов источника данных ODBC или OLE DB, с которыми выполнена операция connect.

Синтаксис:
SQLcolumns

Эти поля можно объединить с полями, созданными командами sqltables и sqltypes, что позволит получить представление об определенной базе данных. Ниже перечислены 12 стандартных полей:

TABLE_QUALIFIER
TABLE_OWNER
TABLE_NAME
COLUMN_NAME
DATA_TYPE
TYPE_NAME
PRECISION
LENGTH
SCALE
RADIX
NULLABLE
REMARKS

Подробное описание этих полей см. в справочном руководстве по ODBC.

Пример:
Connect to 'MS Access 7.0 Database; DBQ=C:\Course3\DataSrc\QWT.mbd';
SQLcolumns;

Некоторые драйверы ODBC могут не поддерживать эту команду. Некоторые драйверы ODBC могут создавать дополнительные поля.

SQLTables

Оператор sqltables возвращает набор полей с описанием таблиц источника данных ODBC или OLE DB, с которыми выполнена операция connect.

Синтаксис:
sqltables

Эти поля можно объединить с полями, созданными командами sqlcolumns и sqltypes, что позволит получить представление об определенной базе данных. Ниже перечислены пять стандартных полей:

TABLE_QUALIFIER
TABLE_OWNER
TABLE_NAME
TABLE_TYPE
REMARKS

Подробное описание этих полей см. в справочном руководстве по ODBC.

Пример:
Connect to 'MS Access 7.0 Database; DBQ=C:\Course3\DataSrc\QWT.mbd';
SQLTables;

Некоторые драйверы ODBC могут не поддерживать эту команду. Некоторые драйверы ODBC могут создавать дополнительные поля.

SQLTypes

Оператор sqltypes возвращает набор полей с описанием типов источника данных ODBC или OLE DB, с которыми выполнена операция connect.

Синтаксис:
sqltypes

Эти поля можно объединить с полями, созданными командами sqlcolumns и sqltables, что позволит получить представление об определенной базе данных. Ниже перечислены 15 стандартных полей:

TYPE_NAME
DATA_TYPE
PRECISION
LITERAL_PREFIX
LITERAL_SUFFIX
CREATE_PARAMS
NULLABLE
CASE_SENSITIVE
SEARCHABLE
UNSIGNED_ATTRIBUTE
MONEY
AUTO_INCREMENT
LOCAL_TYPE_NAME
MINIMUM_SCALE
MAXIMUM_SCALE

Подробное описание этих полей см. в справочном руководстве по ODBC.

Пример:
Connect to 'MS Access 7.0 Database; DBQ=C:\Course3\DataSrc\QWT.mbd';
SQLTypes;

Некоторые драйверы ODBC могут не поддерживать эту команду. Некоторые драйверы ODBC могут создавать дополнительные поля.

Star

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

Синтаксис:
Star is[ string ]

Аргументы:

Аргумент Описание
string

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

Если значение не указано, то по умолчанию используется star is;; то есть символ звездочки отсутствует, если он не будет указан явным образом. Это действительно до тех пор, пока не будет создан новый оператор star.

Пример:

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

Star is *;

Section Access;
LOAD * INLINE [
ACCESS, USERID, PASSWORD, OMIT
ADMIN, ADMIN, ADMIN,
USER, USER1, U1, SALES
USER, USER2, U2, WAREHOUSE
USER, USER3, U3, EMPLOYEES
USER, USER4, U4, SALES
USER, USER4, U4, WAREHOUSE
USER, USER5, U5, *
];

Section Application;
LOAD * INLINE [
SALES, WAREHOUSE, EMPLOYEES, ORDERS
1, 2, 3, 4
];

Применяется следующее:

  • Знак Star  — *.
  • Пользователю USER1 не удается просмотреть поле SALES.
  • Пользователю USER2 не удается просмотреть поле WAREHOUSE .
  • Пользователю USER3 не удается просмотреть поле EMPLOYEES.
  • Пользователь USER4 добавлен дважды к решению OMIT к двум полям для данного пользователя, SALES и WAREHOUSE.
  • Для пользователя USER5 добавлен знак “*”, значит все поля в списке OMIT недоступны. Знак * "звезда" означает все перечисленные значения, а не все значения поля.
  • Пользователю USER5 не удается просмотреть поля SALES, WAREHOUSE и EMPLOYEES ,но пользователю доступно поле ORDERS.

Store

Эта функция скрипта создает файл QVD или CSV.

Синтаксис:
Store[ *fieldlist from] table into filename [ format-spec ];

Оператор создаст файл QVD или CSV с заданным именем. Оператор может экспортировать поля только из одной таблицы данных. Если требуется экспортировать поля из нескольких таблиц, необходимо заранее сформировать явное объединение join в скрипте для создания таблицы данных, которую следует экспортировать.

Текстовые значения экспортируются в файл CSV в формате UTF-8. Можно указать разделитель. См. LOAD. Оператор store для файла CSV не поддерживает экспорт BIFF.

Аргументы:

Аргумент Описание
*fieldlist::= ( * | field ) { , field } )

Список полей, которые необходимо выбрать. Символ «*» в качестве списка полей обозначает все поля.

field::= fieldname [asaliasname ]

fieldname — это текст, идентичный имени поля в элементе table. (Обратите внимание, что для указания имени поля необходимо заключить его в прямые двойные кавычки или квадратные скобки, если имя содержит пробелы или другие нестандартные символы.)

aliasname — альтернативное имя поля, которое предназначено для использования в результирующем файле QVD или CSV.

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

Имя целевого файла, включающее допустимый путь.

  • абсолютный

    Пример: c:\data\sales.qvd

  • относительно пути документа QlikView (и Qlik Sense).

    Пример: data\sales.qvd

    Если путь отсутствует, программа QlikView (и Qlik Sense) сохраняет файл в каталоге, указанном оператором Directory. Если оператор Directory отсутствует, программа QlikView (и Qlik Sense) сохраняет файл в рабочем каталоге.

format-spec ::=( ( txt | qvd ) ) C целью указания формата используется текст txt для обозначения текстовых файлов или текст qvd — для файлов QVD. Если формат не указан, то используется qvd.

Примеры:
Store mytable into xyz.qvd (qvd);
Store * from mytable into xyz.qvd;
Store Name, RegNo from mytable into xyz.qvd;
Store Name as a, RegNo as b from mytable into xyz.qvd;
store mytable into myfile.txt (txt);
store * from mytable into myfile.txt (txt);

Tag

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

Синтаксис:
Tag fields fieldlist using mapname
Tag field fieldname with tagname

Аргументы:

Аргумент Описание
fieldlist Разделенный запятыми список полей, которые следует разметить, начиная с этой точки выполнения скрипта.
mapname Имя таблицы сопоставления, считанной ранее в операторе mapping Load или mapping Select.
fieldname Имя поля, для которого необходимо добавить тег.
tagname Имя тега, применяемого к полю.

Пример 1:
tagmap:
mapping LOAD * inline [
a,b
Alpha,MyTag
Num,MyTag
];
tag fields using tagmap;

Пример 2:
tag field Alpha with 'MyTag2';

Trace

Оператор trace записывает строку в окно Ход выполнения скрипта и в файл журнала скрипта, если тот используется. Он очень полезен для отладки. Расширение $, добавляемое к переменным, вычисляемым до оператора trace, позволяет настроить сообщение.

Синтаксис:
Trace string

Пример 1:
Trace Main table loaded;

Пример 2:
Let MyMessage = NoOfRows('MainTable') & ' rows in Main Table';
Trace $(MyMessage);

Unmap

Оператор Unmap деактивирует значение поля mapping, заданное предыдущим оператором Map … Using для последующих загружаемых полей.

Синтаксис:
Unmap *fieldlist

Аргументы:

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

Примеры и результаты:
Пример Результат
Unmap Country; Отключает сопоставление поля Country.
Unmap A, B, C; Отключает сопоставление полей A, B и C.
Unmap * ; Отключает сопоставление всех полей.

Unqualify

Оператор Unqualify используется для снятия уточнения имен полей, которое ранее было включено оператором Qualify.

Синтаксис:
Unqualify *fieldlist

Аргументы:

Аргумент Описание
*fieldlist

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

Дополнительные сведения см. в документации по оператору Qualify.

Пример 1:
Unqualify *;

Пример 2:
Unqualify TransID;

Untag

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

Синтаксис:
Untag fields fieldlist using mapname
Untag field fieldname with tagname

Аргументы:

Аргумент Описание
fieldlist Список полей, разделенных запятыми, теги которых следует удалить.
mapname Имя таблицы сопоставления, загруженной ранее в оператор сопоставления LOAD или SELECT.
fieldname Имя поля, с которого необходимо снять тег.
tagname Имя тега, который следует снять с поля.

Пример 1:
tagmap:
mapping LOAD * inline [
a,b
Alpha,MyTag
Num,MyTag
];
Untag fields using tagmap;

Пример 2:
Untag field Alpha with MyTag2;

Переменные скрипта

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

Если первый символ в значении переменной — это знак равенства «=», то программа QlikView (и Qlik Sense) рассчитывает значение по формуле (выражение QlikView (и Qlik Sense)) и выводит или возвращает результат, а не визуальное написание формулы.

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

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

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

set variablename = string
или
let variable = expression

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

В переменных учитывается регистр.

Примеры:
set HidePrefix = $ ; //, в переменной символ «$» будет получен как значение.
let vToday = Num(Today()); // возвращает серийный номер сегодняшней даты.

Вычисление переменной

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

В этом примере загружаются некоторые встроенные данные:

LOAD * INLINE [
Dim, Sales
A, 150
A, 200
B, 240
B, 230
C, 410
C, 330
];

Давайте определим две переменные.

Let vSales = 'Sum(Sales)' ;
Let vSales2 = '=Sum(Sales)' ;

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

При использовании неизмененной переменной vSales, например, в мере, результатом будет строка Sum(Sales), то есть вычисления не будут выполнены.

В случае добавления расширения со знаком доллара и вызова элемента $(vSales) в выражении переменная будет расширена, а сумма Sales отобразится.

Наконец, если будет вызван элемент $(vSales2), вычисление переменной будет выполнено до ее расширения. Это означает, что отображаемый результат — это итоговая сумма элементов Sales. Разницу использования элементов =$(vSales) и =$(vSales2) в качестве выражений мер можно увидеть в этой диаграмме с отображением результатов:

Dim $(vSales) $(vSales2)
A 350 1560
B 470 1560
C 740 1560

Как можно увидеть, элемент $(vSales) показывает частичную сумму для значения измерения, а элемент $(vSales2) показывает итоговую сумму.

Переменные ошибок

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

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

ErrorMode

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

ErrorMode

ScriptError

Эта переменная ошибки возвращает код ошибки для последнего выполненного оператора скрипта.

ScriptError

ScriptErrorCount

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

ScriptErrorCount

ScriptErrorList

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

ScriptErrorList

ErrorMode

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

Синтаксис:
ErrorMode

Аргументы:

Аргумент Описание
ErrorMode=1 Настройка по умолчанию. Выполнение скрипта останавливается, и пользователь получает запрос на выполнение действия (в непакетном режиме).
ErrorMode =0 Программа QlikView (и Qlik Sense) просто проигнорирует ошибку и продолжит выполнение скрипта со следующего оператора скрипта.
ErrorMode =2

Программа QlikView (и Qlik Sense) отобразит сообщение об ошибке «Сбой выполнения скрипта…» при возникновении ошибки без предварительного запроса о действии пользователя.

Пример:
set ErrorMode=0;

ScriptError

Эта переменная ошибки возвращает код ошибки для последнего выполненного оператора скрипта.

Синтаксис:
ScriptError

Эта переменная сбрасывается на 0 после каждого успешно выполненного оператора скрипта. При возникновении ошибки переменной присваивается внутренний код ошибки QlikView (и Qlik Sense). Коды ошибок являются двойными значениями, включающими текстовый и числовой компонент. Существуют следующие коды ошибок:

Код ошибки Описание
0 Нет ошибки
1 Общая ошибка
2 Ошибка синтаксиса
3 Общая ошибка ODBC
4 Общая ошибка OLE DB
5 Общая ошибка настраиваемой базы данных
6 Общая ошибка XML
7 Общая ошибка HTML
8 Файл не найден
9 База данных не найдена
10 Таблица не найдена
11 Поле не найдено
12 Неверный формат файла
13 Ошибка BIFF
14 Зашифрованная ошибка BIFF
15 Ошибка BIFF неподдерживаемой версии
16 Семантическая ошибка

Пример:
set ErrorMode=0;
LOAD * from abc.qvw;
if ScriptError=8 then
exit script;
//no file;
end if

ScriptErrorCount

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

Синтаксис:
ScriptErrorCount

ScriptErrorList

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

Синтаксис:
ScriptErrorList

Переменные интерпретации числа

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

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

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

Форматирование валюты

MoneyDecimalSep

Указанный десятичный разделитель заменяет символ десятичного знака для валюты, используемый в операционной системе (региональные настройки).

MoneyDecimalSep

MoneyFormat

Указанный символ заменяет символ валюты, используемый в операционной системе (региональные настройки).

MoneyFormat

MoneyThousandSep

Указанный разделитель тысяч заменяет группирующий символ знаков для валюты, используемый в операционной системе (региональные настройки).

MoneyThousandSep

Форматирование чисел

DecimalSep

Заданный десятичный разделитель заменяет символ десятичного знака, используемый в операционной системе (региональные настройки).

DecimalSep

ThousandSep

Указанный разделитель тысяч заменяет группирующий символ знаков, используемый в операционной системе (региональные настройки).

ThousandSep

Форматирование времени

DateFormat

Указанный формат заменяет формат даты, используемый в операционной системе (региональные настройки).

DateFormat

TimeFormat

Указанный формат заменяет формат времени, используемый в операционной системе (региональные настройки).

TimeFormat

TimestampFormat

Указанный формат заменяет форматы даты и времени, используемые в операционной системе (региональные настройки).

TimestampFormat

MonthNames

Указанный формат заменяет обозначение имен месяцев, используемое в операционной системе (региональные настройки).

MonthNames

LongMonthNames

Указанный формат заменяет обозначение полных имен месяцев, используемое в операционной системе (региональные настройки).

LongMonthNames

DayNames

Указанный формат заменяет имена дней недели, используемые в операционной системе (региональные настройки).

DayNames

LongDayNames

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

LongDayNames

FirstWeekDay

Целое число определяет, какой день использовать в качестве первого дня недели.

FirstWeekDay

BrokenWeeks

этот параметр определяет, какими должны быть недели: целыми или разбитыми.

BrokenWeeks

ReferenceDay

Этот параметр определяет, какой день в январе должен быть задан в качестве дня ссылки, чтобы определить неделю 1. По умолчанию в функциях QlikView (и Qlik Sense) используется 4 как день ссылки. Это значит, что неделя 1 должна содержать значение «январь 4» , или, другими словами, в неделе 1 всегда должно быть не меньше 4 дней в январе.

Используйте следующие значения, чтобы задать день ссылки:

  • 1 (= январь 1)
  • 2 (= январь 2)
  • 3 (= январь 3)
  • 4 (= январь 4)
  • 5 (= январь 5)
  • 6 (= январь 6)
  • 7 (= январь 7)

ReferenceDay

FirstMonthOfYear

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

FirstMonthOfYear

BrokenWeeks

этот параметр определяет, какими должны быть недели: целыми или разбитыми.

Синтаксис:
BrokenWeeks

По умолчанию в функциях QlikView (и Qlik Sense) используются целые недели. Это означает следующее:

  • В одних годах 1-я неделя начинается в декабре, а в других годах 52-я или 53-я неделя заканчивается в январе.
  • В 1-ой неделе всегда не менее четырех дней в январе.

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

  • 52-я или 53-я неделя не будет продолжена в январе следующего года.
  • 1-я неделя будет начинаться 1 января и в большинстве случаев она будет неполной.

Могут использоваться следующие значения:

  • 0 (= использовать целые недели)
  • 1 (= использовать разбитые недели)

Примеры:
Set BrokenWeeks=0; //(use unbroken weeks)
Set BrokenWeeks=1; //(use broken weeks)

DateFormat

Указанный формат заменяет формат даты, используемый в операционной системе (региональные настройки).

Синтаксис:
DateFormat

Примеры:
Set DateFormat='M/D/YY'; //(US format)
Set DateFormat='DD/MM/YY'; //(UK date format)
Set DateFormat='YYYY-MM-DD'; //(ISO date format)

DayNames

Указанный формат заменяет имена дней недели, используемые в операционной системе (региональные настройки).

Синтаксис:
DayNames

Пример:
Set DayNames='Mon;Tue;Wed;Thu;Fri;Sat;Sun';

DecimalSep

Заданный десятичный разделитель заменяет символ десятичного знака, используемый в операционной системе (региональные настройки).

Синтаксис:
DecimalSep

Примеры:
Set DecimalSep='.';
Set DecimalSep=',';

FirstWeekDay

Целое число определяет, какой день использовать в качестве первого дня недели.

Синтаксис:
FirstWeekDay

В функциях QlikView (и Qlik Sense) понедельник является первым днем недели по умолчанию. Могут использоваться следующие значения:

  • 0 (= понедельник)
  • 1 (= вторник)
  • 2 (= среда)
  • 3 (= четверг)
  • 4 (= пятница)
  • 5 (= суббота)
  • 6 (= воскресенье)

Примеры:
Set FirstWeekDay=6; //(set Sunday as the first day of the week)

LongDayNames

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

Синтаксис:
LongDayNames

Пример:
Set LongDayNames='Monday;Tuesday;Wednesday;Thursday;Friday;Saturday;Sunday';

LongMonthNames

Указанный формат заменяет обозначение полных имен месяцев, используемое в операционной системе (региональные настройки).

Синтаксис:
LongMonthNames

Пример:
Set LongMonthNames='January;February;March;April;May;June — -

MoneyDecimalSep

Указанный десятичный разделитель заменяет символ десятичного знака для валюты, используемый в операционной системе (региональные настройки).

Синтаксис:
MoneyDecimalSep

Пример:
Set MoneyDecimalSep='.';

MoneyFormat

Указанный символ заменяет символ валюты, используемый в операционной системе (региональные настройки).

Синтаксис:
MoneyFormat

Пример:
Set MoneyFormat='$ #,##0.00; ($ #,##0.00)';

MoneyThousandSep

Указанный разделитель тысяч заменяет группирующий символ знаков для валюты, используемый в операционной системе (региональные настройки).

Синтаксис:
MoneyThousandSep

Пример:
Set MoneyThousandSep=',';

MonthNames

Указанный формат заменяет обозначение имен месяцев, используемое в операционной системе (региональные настройки).

Синтаксис:
MonthNames

Пример:
Set MonthNames='Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec';

ReferenceDay

Этот параметр определяет, какой день в январе должен быть задан в качестве дня ссылки, чтобы определить неделю 1. По умолчанию в функциях QlikView (и Qlik Sense) используется 4 как день ссылки. Это значит, что неделя 1 должна содержать значение «январь 4» , или, другими словами, в неделе 1 всегда должно быть не меньше 4 дней в январе.

Используйте следующие значения, чтобы задать день ссылки:

  • 1 (= январь 1)
  • 2 (= январь 2)
  • 3 (= январь 3)
  • 4 (= январь 4)
  • 5 (= январь 5)
  • 6 (= январь 6)
  • 7 (= январь 7)

Синтаксис:
ReferenceDay

По умолчанию в функциях QlikView (и Qlik Sense) используется 4 как день ссылки. Это значит, что неделя 1 должна содержать значение «январь 4» , или, другими словами, в неделе 1 всегда должно быть не меньше 4 дней в январе.

Используйте следующие значения, чтобы задать день ссылки:

  • 1 (= январь 1)
  • 2 (= январь 2)
  • 3 (= январь 3)
  • 4 (= январь 4)
  • 5 (= январь 5)
  • 6 (= январь 6)
  • 7 (= январь 7)

Примеры:
Set ReferenceDay=3; //(set January 3 as the reference day)

FirstMonthOfYear

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

Допустимые настройки: от 1 (январь) до 12 (декабрь). Параметр по умолчанию — 1.

Синтаксис:
FirstMonthOfYear

Пример:
Set FirstMonthOfYear=4; //Sets the year to start in April

ThousandSep

Указанный разделитель тысяч заменяет группирующий символ знаков, используемый в операционной системе (региональные настройки).

Синтаксис:
ThousandSep

Примеры:
Set ThousandSep=','; //(for example, seven billion must be specified as: 7,000,000,000)
Set ThousandSep=' ';

TimeFormat

Указанный формат заменяет формат времени, используемый в операционной системе (региональные настройки).

Синтаксис:
TimeFormat

Пример:
Set TimeFormat='hh:mm:ss';

TimestampFormat

Указанный формат заменяет форматы даты и времени, используемые в операционной системе (региональные настройки).

Синтаксис:
TimestampFormat

Пример:
Set TimestampFormat='M/D/YY hh:mm:ss[.fff]';

Системные переменные

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

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

Floppy

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

Floppy

CD

Возвращает буквенное обозначение первого найденного дисковода CD-ROM. Если дисковод CD-ROM не найден, возвращается c:. Эта переменная определяется системой.

CD

Include

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

$(Include=filename) $(Must_Include=filename)

HidePrefix

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

HidePrefix

HideSuffix

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

HideSuffix

QvPath

Возвращает строку обзора в выполняемый модуль QlikView (и Qlik Sense). Эта переменная определяется системой.

QvPath

QvRoot

Возвращает корневой каталог выполняемого модуля QlikView (и Qlik Sense). Эта переменная определяется системой.

QvRoot

QvWorkPath

Возвращает строку обзора в текущий документ QlikView (и Qlik Sense). Эта переменная определяется системой.

QvWorkPath

QvWorkRoot

Возвращает корневой каталог текущего документа QlikView (и Qlik Sense). Эта переменная определяется системой.

QvWorkRoot

StripComments

Если для этой переменной установлено значение 0, исключение комментариев /*..*/ и // в скрипте будет блокироваться. Если эта переменная не определена, всегда выполняется исключение комментариев.

StripComments

Verbatim

Обычно предшествующие и завершающие символы пробела (ASCII 32) автоматически исключаются из всех значений поля до их загрузки в базу данных QlikView (и Qlik Sense). Установка для этой переменной значения 1 приостанавливает исключение символов пробела. Символ табуляции (ASCII 9) и твердый пробел (ANSI 160) никогда не исключаются.

Verbatim

OpenUrlTimeout

Эта переменная определяет время ожидания в секундах, которое программа QlikView (и Qlik Sense) использует при получении данных из источников URL (например, HTML-страниц). При отсутствии данной переменной время ожидания составляет 20 минут.

OpenUrlTimeout

WinPath

Возвращает строку обзора в Windows. Эта переменная определяется системой.

WinPath

WinRoot

Возвращает корневой каталог Windows. Эта переменная определяется системой.

WinRoot

CollationLocale

Указывает, какую локаль использовать для порядка сортировки и сопоставления поиска. Значением является имя культуры локали, например, «en-US».Эта переменная определяется системой.

CollationLocale

HidePrefix

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

Синтаксис:
HidePrefix

Пример:
set HidePrefix='_' ;

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

HideSuffix

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

Синтаксис:
HideSuffix

Пример:
set HideSuffix='%';

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

Include

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

Синтаксис:
$(Include=filename) $(Must_Include=filename)

Существует две версии переменной.

  • Переменная Include не создает ошибку, если не удалось найти файл, и сообщение об ошибке не отображается.
  • Переменная Must_Include создает ошибку, если не удалось найти файл.

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

Конструкция set Include =filename не применяется.

Пример:
$(Include=abc.txt);
$(Must_Include=abc.txt);

OpenUrlTimeout

Эта переменная определяет время ожидания в секундах, которое программа QlikView (и Qlik Sense) использует при получении данных из источников URL (например, HTML-страниц). При отсутствии данной переменной время ожидания составляет 20 минут.

Синтаксис:
OpenUrlTimeout

Пример:
set OpenUrlTimeout=10;

StripComments

Если для этой переменной установлено значение 0, исключение комментариев /*..*/ и // в скрипте будет блокироваться. Если эта переменная не определена, всегда выполняется исключение комментариев.

Синтаксис:
StripComments

В определенных драйверах базы данных используются /*..*/ в качестве подсказок по оптимизации в операторах SELECT. В таком случае комментарии не должны исключаться перед отправкой оператора SELECT в драйвер базы данных.

Рекомендуется сбросить эту переменную на значение 1 сразу после оператора(-ов) там, где это необходимо.

Пример:
set StripComments=0;
SQL SELECT * /* <optimization directive> */ FROM Table ;
set StripComments=1;

Verbatim

Обычно предшествующие и завершающие символы пробела (ASCII 32) автоматически исключаются из всех значений поля до их загрузки в базу данных QlikView (и Qlik Sense). Установка для этой переменной значения 1 приостанавливает исключение символов пробела. Символ табуляции (ASCII 9) и твердый пробел (ANSI 160) никогда не исключаются.

Синтаксис:
Verbatim

Пример:
set Verbatim = 1;

Значение, Обрабатывающее Переменные

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

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

NullDisplay

Указанным символом заменяются все значения NULL из источника данных ODBC соединители на самом нижнем уровне данных. Эта переменная определяется пользователем.

NullDisplay

NullInterpret

При нахождении указанного символа в текстовом файле, файле Excel или во встроенном операторе он интерпретируется как значение NULL. Эта переменная определяется пользователем.

NullInterpret

NullValue

Если используется оператор NullAsValue, определенный символ будет заменять все значения NULL в указанных полях NullAsValue указанной строкой.

NullValue

OtherSymbol

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

OtherSymbol

NullDisplay

Указанным символом заменяются все значения NULL из источника данных ODBC соединители на самом нижнем уровне данных. Эта переменная определяется пользователем.

Синтаксис:
NullDisplay

Пример:
set NullDisplay='<NULL>';

NullInterpret

При нахождении указанного символа в текстовом файле, файле Excel или во встроенном операторе он интерпретируется как значение NULL. Эта переменная определяется пользователем.

Синтаксис:
NullInterpret

Пример:
set NullInterpret=' ';
set NullInterpret =;

не возвращает значения NULL для пустых ячеек в Excel, (в текстовом файле CSV возвращает)

set NullInterpret ='';

возвращает значения NULL для пустых ячеек в Excel.

NullValue

Если используется оператор NullAsValue, определенный символ будет заменять все значения NULL в указанных полях NullAsValue указанной строкой.

Синтаксис:
NullValue

Пример:
NullAsValue Field1, Field2;
set NullValue='<NULL>';

OtherSymbol

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

Синтаксис:
OtherSymbol

Пример:
set OtherSymbol='+';
LOAD * inline
[X, Y
a, a
b, b];
LOAD * inline
[X, Z
a, a
+, c];

Значение поля Y=’b’ теперь будет связано с Z=’c’ через другой символ.

Переменные Direct Discovery

Системные переменные Direct Discovery

DirectCacheSeconds

Можно установить предел кэширования для результатов выполнения запросов Direct Discovery для диаграмм. При достижении этого предела времени QlikView (и Qlik Sense) очищает кэш, когда создаются новые запросы Direct Discovery. QlikView (и Qlik Sense) запрашивает исходные данные для выборок и создает кэш снова для указанного временного предела. Кэширование результатов для каждой комбинации выборок выполняется независимо друг от друга. Иначе говоря, кэш обновляется для каждой выборки отдельно таким образом, что одна выборка обновляет кэш только для выбранных полей, а вторая выборка обновляет кэш для соответствующих полей. Если вторая выборка включает в себя поля, обновленные в первой выборке, они не обновляются в кэше повторно, если не достигнут предел кэширования.

Кэш Direct Discovery не применяется к диаграммам Таблица. Выборки таблицы каждый раз запрашивают источник данных.

Предельное значение должно быть указано в секундах. Предел кэша по умолчанию составляет 1800 секунд (30 минут).

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

Пример:
SET DirectCacheSeconds=1800

DirectConnectionMax

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

SET DirectConnectionMax=10

Числовой параметр указывает максимальное количество подключений к базе данных, которые можно использовать коду Direct Discovery при обновлении листа. По умолчанию параметр имеет значение 1.

Эту переменную следует использовать с осторожностью. Значение параметра больше 1 может привести к возникновению проблем при подключении к Microsoft SQL Server.

DirectUnicodeStrings

Direct Discovery поддерживает выбор расширенных данных Юникода путем использования стандартного формата SQL для строковых литералов расширенных символов (N’<расширенная строка>’), как это требуют некоторые базы данных (в частности SQL Server). Этот синтаксис можно включить для Direct Discovery с помощью переменной скрипта DirectUnicodeStrings.

Если установить для этой переменной значение «true», то перед строковыми литералами будет использоваться “N” — строковый маркер ANSI стандартной ширины. Не все базы данных поддерживают этот стандарт. По умолчанию параметр имеет значение «false».

DirectDistinctSupport

Когда значение поля DIMENSION выбрано в объекте QlikView (и Qlik Sense), для исходной базы данных создается запрос. Если для запроса требуется группировка, Direct Discovery использует ключевое слово DISTINCT для выбора только уникальных значений. Однако для некоторых баз данных необходимо ключевое слово GROUP BY. Установите для параметра DirectDistinctSupport значение 'false', чтобы создавать запросы GROUP BY вместо DISTINCT для получения уникальных значений.

SET DirectDistinctSupport='false'

Если для параметра DirectDistinctSupport установлено значение «true», будет использоваться DISTINCT. Если значение не установлено, по умолчанию используется DISTINCT.

DirectEnableSubquery

В многотабличных сценариях с большим количеством элементов можно создавать запросы, вложенные в запрос SQL, вместо создания длинного предложения IN. Для этого активируйте параметр DirectEnableSubquery, выбрав значение 'true'. По умолчанию установлено значение 'false'.

Если параметр DirectEnableSubquery включен, невозможно загружать таблицы, которые не в режиме Direct Discovery.

SET DirectEnableSubquery='true'

Переменные чередования запросов Teradata

Чередование запросов Teradata — это функция, которая позволяет корпоративным приложениям работать совместно с основной базой данных Teradata для повышения эффективности учета, определения приоритетов и управления рабочей нагрузкой. Чередование запросов позволяет переносить метаданные, такие как учетные данные пользователя, в запросе.

Доступны две переменные, которые являются строками. Они оцениваются и отправляются в базу данных.

SQLSessionPrefix

Эта строка отправляется, когда создается подключение к базе данных.

SET SQLSessionPrefix = 'SET QUERY_BAND = ' & Chr(39) & 'Who=' & OSuser() & ';' & Chr(39) & ' FOR SESSION;';

Например, если OSuser() возвращает WA\sbt, это будет оценено как SET QUERY_BAND = 'Who=WA\sbt;' FOR SESSION;, что и будет отправлено в базу данных при создании подключения.

SQLQueryPrefix

Эта строка отправляется для каждого одиночного запроса.

SET SQLSessionPrefix = 'SET QUERY_BAND = ' & Chr(39) & 'Who=' & OSuser() & ';' & Chr(39) & ' FOR TRANSACTION;';

Символьные переменные Direct Discovery

DirectFieldColumnDelimiter

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

SET DirectFieldColumnDelimiter= '|'

DirectStringQuoteChar

Можно задать символ, чтобы заключать строки в кавычки в созданном запросе. По умолчанию это одинарные кавычки. В операторе SETуказанный символ должен быть заключен в одинарные кавычки.

SET DirectStringQuoteChar= '"'

DirectIdentifierQuoteStyle

Можно указать, что в созданных запросах можно использовать кавычки не в кодировке ANSI для идентификаторов. В настоящее время доступные кавычки не в кодировке ANSI — только GoogleBQ. По умолчанию используется элемент ANSI. Можно использовать символы в верхнем регистре, в нижнем регистре и в разных регистрах (ANSI, ansi, Ansi).

SET DirectIdentifierQuoteStyle="GoogleBQ"

Например, кавычки ANSI используются в следующем операторе SELECT:

SELECT [Quarter] FROM [qvTest].[sales] GROUP BY [Quarter]

Если для параметра DirectIdentifierQuoteStyle установлено значение "GoogleBQ", оператор SELECT будет использовать следующие кавычки:

SELECT [Quarter] FROM [qvTest.sales] GROUP BY [Quarter]

DirectIdentifierQuoteChar

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

SET DirectIdentifierQuoteChar='YYYY-MM-DD'

DirectTableBoxListThreshold

Когда поля Direct Discovery используются в диаграмме Таблица, устанавливается пороговое значение, чтобы ограничить количество отображаемых строк. Пороговое значение по умолчанию равно 1000 записям. Пороговое значение по умолчанию можно изменить, настроив переменную DirectTableBoxListThreshold в скрипте загрузки. Например:

SET DirectTableBoxListThreshold=5000

Параметр порогового значения применим только к диаграммам Таблица, содержащим поля Direct Discovery. Диаграммы Таблица, содержащие только поля в памяти, не ограничены параметром DirectTableBoxListThreshold.

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

Переменные интерпретации числа Direct Discovery

DirectMoneyDecimalSep

Заданный разделитель десятичной части заменяет символ десятичного разделителя для валюты в операторе SQL, созданном для загрузки данных с помощью Direct Discovery. Этот символ должен совпадать с символом, используемом в DirectMoneyFormat.

По умолчанию используется значение '.'

Пример:
Set DirectMoneyDecimalSep='.';

DirectMoneyFormat

Заданный разделитель заменяет формат валюты в операторе SQL, созданном для загрузки данных с помощью Direct Discovery. Символ валюты для разделителя тысяч не включается.

По умолчанию используется значение '#.0000'

Пример:
Set DirectMoneyFormat='#.0000';

DirectTimeFormat

Заданный формат времени заменяет формат времени в операторе SQL, созданном для загрузки данных с помощью Direct Discovery.

Пример:
Set DirectTimeFormat='hh:mm:ss';

DirectDateFormat

Заданный формат даты заменяет формат даты в операторе SQL, созданном для загрузки данных с помощью Direct Discovery.

Пример:
Set DirectDateFormat='MM/DD/YYYY';

DirectTimeStampFormat

Заданный формат заменяет формат даты и времени в операторе SQL, созданном в операторе SQL для загрузки данных с помощью Direct Discovery.

Пример:
Set DirectTimestampFormat='M/D/YY hh:mm:ss[.fff]';

Подписка

RSS-материал