# Index — функция скриптa и диаграммы

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

Синтаксис:

Index(text, substring[, count])

Возвращаемые типы данных: integer

Аргументы

| Аргумент | Описание |
| --- | --- |
| text | Оригинальная строка. |
| substring | Строка символов для поиска в text.<br><br>Примечание к информацииЕсли подстрока не существует в тексте, Index возвращает 0. |
| count | Определяет, какое вхождение символов substring искать. Например, значение 2 служит для поиска второго вхождения. Если указано отрицательное значение, поиск выполняется с конца строки. |

Пример: выражения диаграммы

| Пример | Результат |
| --- | --- |
| `Index( 'abcdefg', 'cd' )` | Возвращает `3` |
| `Index(  'abcdabcd', 'b', 2 )` | Возвращает `6` (второе вхождение `b`) |
| `Index( 'abcdabcd', 'b',-2 )` | Возвращает `2` (второе вхождение `b`, начиная с конца) |
| `Left( Date, Index( Date,'-') -1` ) where `Date = 1997-07-14` | Возвращает `1997` |
| `Mid( Date, Index( Date, '-', 2 ) -2, 2 )` where `Date` = `1997-07-14` | Возвращает `07` |
| `Index( 'abc', 'x' )` | Возвращает `0` (`x` не существует в строке `abc`) |
| `Index( 'abc', 'a', 2 )` | Возвращает `0` (нет 2-го вхождения `a`). |

## Пример. Основы использования функции Index

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Index.htm)

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

Обзор

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

Скрипт загрузки содержит следующее:

* Набор данных, который загружается в таблицу данных под именем `Example`.

* Одно поле в таблице данных под именем `InputString`.

Скрипт загрузки

```
Example:
Load * inline [
InputString
abcdefg
abcdabcd ];
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение:

* ` InputString
                                   `

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

* `=Index(InputString, 'cd')`

* `=Index(InputString, 'e')`

* `=Index(InputString, 'b', -1)`

Результирующая таблица

| InputString | Index(InputString, 'cd') | Index(InputString, 'e') | Index(InputString, 'b', -1) |
| --- | --- | --- | --- |
| abcdabcd | 3 | 0 | 6 |
| abcdefg | 3 | 5 | 2 |

Первая строка со строковым значением `abcdabcd` возвращает:

* `3` ― первое вхождение `cd`

* `0` ― так как `e` не найден в строке.

* `6` ― первое вхождение `b` с конца строки

Вторая строка со строковым значением `abcdefg` возвращает:

* `3` ― первое вхождение `cd`

* `5` ― первое вхождение `e`

* `2` ― первое вхождение `b` с конца строки

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

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Index.htm)

#### Скрипт загрузки

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

```
Example:
Load
*,
index(String, 'cd') as Index_CD,               // returns 3  in Index_CD
index(String, 'b') as Index_B,                // returns 2 in Index_B
index(String, 'b', -1) as Index_B2;           // returns 2 or 6 in Index_B2
Load * inline [
String
abcdefg
abcdabcd ];
```

Результирующая таблица

| Строка | Index\_CD | Index\_B | Index\_B2 |
| --- | --- | --- | --- |
| abcdefg | 3 | 2 | 2 |
| abcdabcd | 3 | 2 | 6 |

## Пример. Сценарий использования функции Index

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Index.htm)

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

Обзор

Центр поддержки клиентов имеет набор данных, содержащий строки тем из электронных писем клиентов. Центр поддержки хочет распределить эти письма по категориям на основе ключевых слов, которые встречаются в теме письма, например `Refund`, `Complaint` и `Technical Issue`. Строки темы хранятся в поле набора данных под названием `EmailSubject`.

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

Скрипт загрузки содержит следующее:

* Набор данных, который загружается в таблицу данных под именем `Example`.

* Одно поле в таблице данных под именем `EmailSubject`.

Скрипт загрузки

```
Example:
Load * inline [
EmailSubject
Request for a Refund - Order 12345
Technical Issue with Product XYZ
Complaint about delivery service
Follow-up on Refund Request
Technical Issue not resolved
];
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение:

* ` EmailSubject
                                   `

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

* `=If(Index(EmailSubject, 'Refund') > 0, 'Refund', 'Other')`, чтобы вычислить, какой текст темы письма относится к возврату денег.

Результаты

| EmailSubject | If(Index(EmailSubject, 'Refund') &gt; 0, 'Refund', 'Other') |
| --- | --- |
| Complaint about delivery service (Жалоба на службу доставки) | Прочие |
| Follow-up on Refund Request (Дополнение по запросу на возврат денег) | Refund (Возврат денег) |
| Request for a Refund - Order 12345 (Запрос на возврат денег ― Заказ 12345) | Refund (Возврат денег) |
| Technical Issue not resolved (Техническая проблема не решена) | Прочие |
| Technical Issue with Product XYZ (Техническая проблема с продуктом XYZ) | Прочие |

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