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

SubStringCount() возвращает количество вхождений указанной подстроки в тексте входной строки. Если совпадения отсутствуют, возвращается 0.

Синтаксис:

SubStringCount(text, sub\_string)

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

Аргументы

| Аргумент | Описание |
| --- | --- |
| text | Оригинальная строка. |
| sub\_string | Строка, встречающаяся один или несколько раз во входной строке text. |

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

| Пример | Результат |
| --- | --- |
| `SubStringCount( 'abcdefgcdxyz', 'cd' )` | Возвращает `2` |
| `SubStringCount( 'abcdefgcdxyz', 'dc' )` | Возвращает `0` |

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

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

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

Обзор

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

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

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

* Одно поле в таблице данных называется `FruitSentence`.

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

```
Example:
Load * inline [
FruitSentence
"I love eating an apple every day.Apple juice is great too!"
"Apple pie is my favorite dessert. I also enjoy apple jam."
"There is an apple and a banana on the table."
"I don't like apples as much as oranges."
"An apple a day keeps the doctor away, but two apples are even better!"
];
```

Результаты

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

* ` FruitSentence
                                   `

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

* `=SubStringCount(FruitSentence, 'apple')`, чтобы рассчитать, сколько раз слово `apple` встречается в `FruitSentence`.

Results table

| FruitSentence | SubStringCount(FruitSentence, 'apple') |
| --- | --- |
| An apple a day keeps the doctor away, but two apples are even better! | 2 |
| Apple pie is my favorite dessert. I also enjoy apple jam. | 1 |
| I don't like apples as much as oranges. | 1 |
| I love eating an apple every day. Apple juice is great too! | 1 |
| There is an apple and a banana on the table. | 1 |

Таблица сортируется по измерению `FruitSentence` в порядке возрастания. Функция `SubStringCount` возвращает число вхождений слова `apple` в каждом предложении. Например, в первом предложении возвращается `2`, так как это слово встречается в предложении дважды. Во втором и четвертом предложениях функция игнорирует слово `Apple`, так как оно не соответствует регистру поискового запроса `apple`.

Примечание к подсказкеЧтобы выполнить поиск без учета регистра, можно сначала преобразовать строку ввода в верхний или нижний регистр символов, а затем использовать функцию `SubStringCount` для результата. Например, для поиска всех вхождений слова apple, независимо от регистра, используйте следующее выражение меры: `=SubStringCount(Upper(FruitSentence),'APPLE')`. Это выражение использует функцию `SubStringCount` с функцией `Upper` для преобразования всей строки в заглавные символы, а затем ищет слово `APPLE`.

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

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

Следующий код показывает, как использовать эту функцию в скрипте загрузки. Этот пример включает предшествующую загрузку, которая использует функцию `SubStringCount` вместе с функцией `Upper` для преобразования всей строки в заглавные символы, а затем ищет слово `APPLE`.

```
Example:
Load *,
SubStringCount(Upper(FruitSentence),'APPLE') as SubStringCount_APPLE;
Load * inline [
FruitSentence
"I love eating an apple every day. Apple juice is great too!"
"Apple pie is my favorite dessert. I also enjoy apple jam."
"There is an apple and a banana on the table."
"I don't like apples as much as oranges."
"An apple a day keeps the doctor away, but two apples are even better!"
];
```

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

| Фруктовое предложение | КоличествоПодстрок\_ЯБЛОКО |
| --- | --- |
| I love eating an apple every day. Apple juice is great too! | 2 |
| Apple pie is my favorite dessert. I also enjoy apple jam. | 2 |
| There is an apple and a banana on the table. | 1 |
| I don't like apples as much as oranges. | 1 |
| An apple a day keeps the doctor away, but two apples are even better! | 2 |

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

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

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

Обзор

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

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

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

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

* Одно поле в таблице данных называется `ProductDescription`.

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

```
Example:
Load * inline [
ProductDescription
"Fresh apple and banana smoothie."
"Organic apple, banana, and orange juice. Great for breakfast."
"A refreshing orange soda made with real orange juice."
"Banana chips with apple and cinnamon flavor."
"Delicious apple pie with a hint of cinnamon and vanilla."
"Tropical banana and orange mix for smoothies."
];
```

Результаты

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

* `ProductDescription`

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

* `=SubStringCount(ProductDescription, 'apple')`, чтобы подсчитать количество вхождений слова `apple` в строке `ProductDescription`.

* `=SubStringCount(ProductDescription, 'banana')`, чтобы подсчитать количество вхождений слова `banana` в строке `ProductDescription`.

* `=SubStringCount(ProductDescription, 'orange')`, чтобы подсчитать количество вхождений слова `orange` в строке `ProductDescription`.

Results table

| ProductDescription | SubStringCount(ProductDescription, 'apple') | SubStringCount(ProductDescription, 'banana') | SubStringCount(ProductDescription, 'orange') |
| --- | --- | --- | --- |
| A refreshing orange soda made with real orange juice. | 0 | 0 | 2 |
| Banana chips with apple and cinnamon flavor. | 1 | 0 | 0 |
| Delicious apple pie with a hint of cinnamon and vanilla. | 1 | 0 | 0 |
| Fresh apple and banana smoothie. | 1 | 1 | 0 |
| Organic apple, banana, and orange juice. Great for breakfast. | 1 | 1 | 1 |
| Tropical banana and orange mix for smoothies. | 0 | 1 | 1 |

Вывод функции `SubStringCount` успешно возвращает количество вхождений каждой подстроки (`apple, banana, orange`) встречается в описании продукта. Например, в первом описании функция возвращает 2, потому что существует два экземпляра слова `orange`. Аргумент `sub_string` чувствителен к регистру, поэтому во втором описании функция не засчитает слово `Banana`, поскольку оно не совпадает с подстрокой `banana` в выражении меры.

Примечание к подсказкеЧтобы выполнить поиск без учета регистра, можно сначала преобразовать строку ввода в верхний или нижний регистр символов, а затем использовать функцию `SubStringCount` для результата. Например, для поиска всех вхождений слова apple, независимо от регистра, используйте следующее выражение меры: `=SubStringCount(Upper(ProductDescription),'APPLE')`. Это выражение использует функцию `SubStringCount` с функцией `Upper` для преобразования всей строки в заглавные символы, а затем ищет слово `APPLE`.

## Пример. Сценарий использования SubStringCount с разбором вложенных данных

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

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

Обзор

Набор данных записей ИТ содержит список идентификационных номеров изменений и категорий. В таблице данных поле Categories создано на основе многоуровневой иерархии, содержащей список верхних родительских категорий, за которыми следуют все подкатегории, например «Программное обеспечение &gt; Программа &gt; Исправление». Этот сценарий показывает, как выбрать последнее значение, или значение листа, из этой неровной иерархии категорий с помощью комбинации функций SubStringCount и SubField.

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

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

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

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

  * ChangeID содержит исходный идентификатор изменения, который необходимо обработать.

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

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

```
Example:
Load * inline [
ChangeID,Categories
CHG00100,Software;Program;Patch
CHG00101,Hardware;Server
CHG00102,Hardware;Network;Router
];
```

Результаты

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

* ChangeID

* Categories

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

* =SubStringCount(Categories,';')+1, чтобы подсчитать количество уровней категорий в иерархии изменений.

* =SubField(Categories, ';' ,SubStringCount(Categories,';')+1), чтобы извлечь крайнюю правую категорию в иерархии изменений.

Results table

| ChangeID | Categories | ​SubStringCount(Categories,';')+1 | SubField(Categories, ';' ,SubStringCount(Categories,';')+1) |
| --- | --- | --- | --- |
| CHG00100 | Software;Program;Patch | 3 | Patch |
| CHG00101 | Hardware;Server | 2 | Server |
| CHG00102 | Hardware;Network;Router | 3 | Router |

В этом примере функция SubStringCount вложена в функцию SubField. Первое вычисляемое измерение, SubStringCount(), подсчитывает количество вложенных значений в поле Categories. Это определяется путем подсчета количества разделителей «точка с запятой» (';') и прибавления 1 к результату. Этот вывод затем передается в качестве третьего параметра функции SubField для извлечения крайней правой категории, вложенной в поле Categories.

В качестве примера рассмотрим результаты для записи ChangeID CHG00100. В первом вычисляемом измерении значение SubStringCount равно 2. Затем выражение добавляет 1 к этому результату для определения того, что поле Categories имеет три вложенных значения категории, Software, Program и Patch. Функция SubField во втором вычисляемом измерении затем использует этот результат для извлечения третьей категории, Patch.