# wildmatch Функция скрипта и диаграммы

Функция wildmatch сравнивает первый параметр со всеми последующими и возвращает число совпадающих выражений. Она позволяет использовать символы подстановки ( \* и ?) в сравниваемых строках. \* соответствует любой последовательности символов. ? соответствует одному символу. При сравнении не учитывается регистр, а также японские системы символов хирагана и катакана.

Синтаксис:

wildmatch( str, expr1 [ , expr2,...exprN ])

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

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

Аргументы

| Аргумент | Описание |
| --- | --- |
| str | Анализируемая строка. |
| expr1 | Первое выражение для проверки допустимого числового представления. |
| expr2 | Второе выражение для проверки допустимого числового представления. |
| expr3 | Третье выражение для проверки допустимого числового представления. |

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

| Пример | Результат |
| --- | --- |
| `wildmatch( ColorCode,'black','*Blue*' )` | Это выражение возвращает `1`, если значение `ColorCode` равно `Black`; или `2`, если значение `ColorCode` равно `Blue`, `Light Blue` или `blue`. |
| ` wildmatch( Cities,'toronto','Boston','Beijing','Zurich')  ` | Это выражение возвращает индекс совпадений со значением в поле `Cities`. |

В нескольких примерах этого раздела используется встроенная загрузка. [Использование встроенных загрузок для загрузки данных](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/inline-loads-qs.htm)

## Пример. Распределение продуктов по категориям с помощью wildmatch

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ConditionalFunctions/wildmatch.htm)

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

Обзор

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

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

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

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

* Следующие поля в таблице данных:

  * `ProductID`

  * `ProductName`

  * `ProductCategory`

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

```
Example:
LOAD * INLINE [
ProductID, ProductName, ProductCategory
1, "Laptop", "Electronics"
2, "Banana", "fruit"
3, "Shampoo", "toiletries"
4, "TV", "Electronics"
5, "Apple", "Fruits and vegetables"
];
```

Результаты

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

* `ProductID`

* `ProductName`

* `ProductCategory`

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

* `=wildmatch(ProductCategory, 'Toiletries*', 'Fruit*')` возвращает индекс, если `ProductCategory` имеет значение, начинающееся с `Toiletries` или с `Fruit`.

* `=If(wildmatch(ProductCategory, 'Toiletries*', 'Fruit*'), 'Consumable', 'Other')` возвращает индекс, если `ProductCategory` имеет значение, начинающееся с `Toiletries` или с `Fruits`. Если есть хотя бы одно совпадение, возвращается `Consumable`. В противном случае возвращается `Other`.

Примечание к информацииФункция `wildmatch` возвращает ненулевое положительное значение, если найдено хотя бы одно совпадение, и ноль, если совпадение не найдено. В свою очередь, оператор `true` интерпретирует ненулевые результаты как `if`, а нулевые – как `false` Комбинируя оператор `if` с функциями `mixmatch`, `wildmatch` или `match`, можно легко расшифровать совпадения и несовпадения.

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

| ProductID | ProductName | ProductCategory | wildmatch(ProductCategory, 'Toiletries\*', 'Fruit\*') | If(wildmatch(ProductCategory, 'Toiletries\*', 'Fruit\*') |
| --- | --- | --- | --- | --- |
| 1 | Laptop | Electronics | 0 | Other |
| 2 | Banana | fruit | 2 | Consumable |
| 3 | Shampoo | toiletries | 1 | Consumable |
| 4 | TV | Electronics | 0 | Other |
| 5 | Apple | Fruits and vegetables | 2 | Consumable |

Функция `wildmatch` возвращает индекс строки поиска в первой мере. Во второй мере этот результат используется в функции `If`, с помощью которой реализуется пользовательский запрос. Обратите внимание, что функция `wildmatch` не зависит от регистра и допускает знаки подстановки (`*` и `?`).

## Пример. Оценка и классификация данных о клиенте с помощью wildmatch

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ConditionalFunctions/wildmatch.htm)

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

Обзор

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

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

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

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

* Следующие поля в таблице данных:

  * `ClientID`

  * `ClientName`

  * `Region`

  * `Industry`

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

```
Example:
LOAD * INLINE [ 
ClientID, ClientName, Region, Industry 
1, "Acme Corp", "north territory", "Vehicle Manufacturing" 
2, "Beta Ltd", "East location", "Science & Technology" 
3, "Gamma Inc", "west", "Retail Sales" 
4, "Delta LLC", "North", "Technology" 
5, "Epsilon GmbH", "South", "healthcare" 
];
```

Результаты

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

* `ClientID`

* `ClientName`

* `Region`

* `Industry`

Создайте следующую меру:

Используйте `=If(wildmatch(Region, 'North*', 'East*') AND wildmatch(Industry, '*Technology*', '*Manufacturing*'), 'Target Segment', 'Secondary Segment')`, чтобы вернуть индекс по строке поиска. Если есть совпадение, возвращается `Target Segment`. Если совпадений нет, возвращается `Secondary Segment`.

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

| ClientID | ClientName | Region | Industry | If(wildmatch(Region, 'North\*', 'East\*') AND wildmatch(Industry, '\*Technology\*', '\*Manufacturing\*'), 'Target Segment', 'Secondary Segment') |
| --- | --- | --- | --- | --- |
| 1 | Acme Corp | north territory | Vehicle Manufacturing | Target Segment |
| 2 | Beta Ltd | East location | Science & Technology | Target Segment |
| 3 | Gamma Inc | west | Retail Sales | Secondary Segment |
| 4 | Delta LLC | North | Technology | Target Segment |
| 5 | Epsilon GmbH | South | healthcare | Secondary Segment |

Функция `wildmatch` ищет текст и возвращает индекс, который затем может быть использован для дополнительного анализа и классификации данных. Например, `Acme Corp` классифицируется как `Target Segment`, потому что он отвечает условиям поиска в функции `wildmatch` в полях `Region` и `Industry`. Обратите внимание, что функция `wildmatch` не зависит от регистра и допускает знаки подстановки (`*` и `?`).

## Пример. Скрипт загрузки, использующий wildmatch

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ConditionalFunctions/wildmatch.htm)

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

Обзор

Функцию wildmatch можно использовать для загрузки подмножества данных. К примеру, можно вернуть числовое значение выражения в функции. Затем можно ограничить загруженные данные по числовому значению. При отсутствии совпадений функция Wildmatch возвращает 0. Таким образом, в данном примере все выражения, для которых не были найдены совпадения, вернут 0 и будут исключены из загрузки данных при помощи оператора `WHERE`.

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

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

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

  * `Transactions`: включает поля транзакции

  * `Transaction_Buckets`: создает два новых поля `Customer` и `Color code - Black, Blue, blue, red`. Оператор `where` загружает результаты из функции `wildmatch`.

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

```
Transactions:
Load * Inline [
transaction_id, transaction_date, transaction_amount, transaction_quantity, customer_id, size, color_code
3750, 20180830, 23.56, 2, 2038593, L, Red
3751, 20180907, 556.31, 6, 203521, m, orange
3752, 20180916, 5.75, 1, 5646471, S, blue
3753, 20180922, 125.00, 7, 3036491, l, Black
3754, 20180922, 484.21, 13, 049681, xs, Red
3756, 20180922, 59.18, 2, 2038593, M, Blue
3757, 20180923, 177.42, 21, 203521, XL, Black
];
 
/*
Create new table called Transaction_Buckets
Create new fields called Customer, and Color code - Black, Blue, blue, red
Load Transactions table.
Wildmatch returns 1 for 'Black', 'Blue', and 'blue', and 2 for 'Red'. 
Only values that returned numeric value greater than 0 
are loaded by WHERE statement into Transactions_Buckets table.
*/
 
Transaction_Buckets:
Load
   customer_id,
   customer_id as [Customer],
   color_code as [Color Code Black, Blue, blue, Red]
Resident Transactions
Where wildmatch(color_code,'Bl*','R??') > 0;
```

Результаты

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

* `[Color code - Black, Blue, blue, red]`

* `Customer`

В таблице показаны результаты использования функции wildmatchwildmatch в скрипте загрузки.

| Color code - Black, Blue, blue, red | Customer |
| --- | --- |
| Black | 203521 |
| Black | 3036491 |
| Blue | 2038593 |
| blue | 5646471 |
| Red | 049681 |
| Red | 2038593 |

## Пример: выражение диаграммы, использующее wildmatch

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ConditionalFunctions/wildmatch.htm)

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

Обзор

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

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

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

* Следующие поля в таблице данных:

  * Cities

  * Count

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

```
Example:
Load * inline [Cities, Count
Toronto, 123
Toronto, 234
Toronto, 231
Boston, 32
Boston, 23
Boston, 1341
Beijing, 234
Beijing, 45
Beijing, 235
Stockholm, 938
Stockholm, 39
Stockholm, 189
zurich, 2342
zurich, 9033
zurich, 0039];
```

Результаты

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

* Cities

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

* Используйте =wildmatch( Cities,'Tor\*','?ton','Beijing','\*urich') , чтобы вернуть индекс по строке поиска.

* Используйте =wildmatch( Cities,'Tor\*','???ton','Beijing','Stockholm','\*urich'), чтобы вернуть индекс по строке поиска.

* Выражение =Cities & ' - ' & wildmatch ( Cities, 'Tor\*','???ton','Beijing','Stockholm','\*urich') позволяет вернуть значение поля Cities и индекс по строке поиска.

Первая мера в таблице ниже возвращает 0 для значения Stockholm, так как Stockholm не входит в список, перечисленный в выражении в функции wildmatch. Он также возвращает 0 для Boston, потому что ? совпадает только с одним символом.

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

| Cities | wildmatch( Cities,'Tor\*','?ton','Beijing','\*urich') | wildmatch( Cities,'Tor\*','???ton','Beijing','Stockholm','\*urich') | Cities & ' - ' & wildmatch ( Cities, 'Tor\*','???ton','Beijing','Stockholm','\*urich') |
| --- | --- | --- | --- |
| Beijing | 3 | 3 | Beijing - 3 |
| Boston | 0 | 2 | Boston - 2 |
| Stockholm | 0 | 4 | Stockholm - 4 |
| Toronto | 1 | 1 | Toronto - 1 |
| zurich | 4 | 5 | zurich - 5 |

## Пример. Выражение для сортировки, использующее wildmatch

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ConditionalFunctions/wildmatch.htm)

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

Обзор

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

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

Результаты

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

* Cities

Результирующая таблица со стандартным порядком сортировки

| Cities |
| --- |
| Beijing |
| Boston |
| Stockholm |
| Toronto |
| zurich |

Чтобы изменить порядок сортировки, выполните следующее:

1. Откройте раздел Сортировка диаграммы на панели Свойства.

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

3. Снимите флажки Сортировать по численным значениям и Сортировать по алфавиту .

4. Выберите Сортировка по выражению и введите выражение следующего вида:

   =wildmatch( Cities, 'Tor\*','???ton','Beijing','Stockholm','\*urich')

   Порядок сортировки столбца Cities будет изменен.

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

| Cities |
| --- |
| Toronto |
| Boston |
| Beijing |
| Stockholm |
| zurich |

## Подробнее

* [match Функция скрипта и диаграммы](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ConditionalFunctions/match.htm)
* [mixmatch Функция скрипта и диаграммы](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ConditionalFunctions/mixmatch.htm)