# 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')`은 `FruitSentence`에서 `apple`라는 단어가 몇 번 나오는지 계산합니다.

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`이라는 단어를 검색하는 선행 LOAD가 포함되어 있습니다.

```
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!"
];
```

결과 테이블

| 과일 문장 | 부분 문자열 개수\_APPLE |
| --- | --- |
| 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)

#### 차트 표현식

개요

과일 제품의 데이터 집합에는 제품 설명이 있는 필드가 포함되어 있습니다. 이 예에서는 각 설명에서 다음 과일 이름이 나오는 횟수를 계산합니다. apple, banana, or orange.

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* `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')`은 문자열 `ProductDescription`에서 `apple`라는 단어가 나타나는 횟수를 계산합니다.

* `=SubStringCount(ProductDescription, 'banana')`은 문자열 `ProductDescription`에서 `banana`라는 단어가 나타나는 횟수를 계산합니다.

* `=SubStringCount(ProductDescription, 'orange')`은 문자열 `ProductDescription`에서 `orange`라는 단어가 나타나는 횟수를 계산합니다.

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`)이 발생한 인스턴스 수를 성공적으로 반환합니다. 예를 들어, 첫 번째 설명에서 함수는 `orange`라는 단어가 두 번 나오므로 2를 반환합니다. `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)

#### 차트 표현식

개요

IT 레코드 데이터 집합에는 변경 ID 번호와 범주 목록이 포함되어 있습니다. 데이터 테이블에서 Categories 필드는 최상위 상위 범주 다음에 모든 하위 범주가 나열되는 다단계 계층 구조에서 파생됩니다(예: 소프트웨어 &gt; 프로그램 &gt; 패치). 이 시나리오에서는 SubStringCount 및 SubField 함수를 조합하여 이 불규칙한 범주 계층 구조에서 마지막 값 또는 리프 값을 선택하는 방법을 보여 줍니다.

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* Example이라는 데이터 테이블에 로드되는 데이터 집합입니다.

* 데이터 테이블의 필드는 다음과 같습니다.

  * ChangeID에는 처리할 원래 변경 ID가 포함되어 있습니다.

  * 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를 추출합니다.