# 정렬

## Content

SpreadJS를 사용하면 피벗 테이블 데이터를 정렬하여 빠르고 편리하게 분석할 수 있도록 구성할 수 있습니다. 정렬 기능은 특히 대용량 데이터를 다룰 때 유용합니다. `PivotTable.sort` 함수를 사용하면 데이터를 정렬할 수 있으며, 이 함수는 `sortInfo` 객체를 매개변수로 받습니다.
SpreadJS에서는 피벗 테이블 데이터를 다음 네 가지 방식으로 정렬할 수 있습니다:

1. 필드 항목 이름 기준 정렬
2. 값 기준 정렬
3. 사용자 정의 필드 항목 값 기준 정렬
4. 사용자 정의 콜백 정렬

## 필드 항목 이름 기준 정렬

피벗 테이블 데이터를 특정 필드를 기준으로 정렬하려면, 필드 이름을 지정하고 `sortInfo`의 `sortType` 속성을 설정하여 정렬 순서를 오름차순, 내림차순 또는 사용자 정의로 지정할 수 있습니다.
아래 이미지는 "Category" 필드에 내림차순 정렬 순서가 적용된 예시를 보여줍니다.
![pivot-sort-by-field-name](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/df1fe1ee-eb3c-4da7-8c20-a0d8d2b7e734/pivot-sort-by-field-name.6635c7.png)

다음 코드 샘플은 필드 항목 이름 기준으로 피벗 테이블 데이터를 정렬하는 방법을 보여줍니다:

```javascript
let pivotTable = spread.getActiveSheet().pivotTables.get("PivotTable");
 var sortInfo = {
  sortType: GC.Pivot.SortType.desc
 };
pivotTable.sort("Category", sortInfo);
```

## 디자이너 사용

디자이너에서 필드의 필터 드롭다운에서 **기타 정렬 옵션..(More Sort Options..**)을 클릭하여 데이터를 정렬할 수도 있습니다. 이 옵션을 클릭하면 필드 정렬(**Sort Field**) 대화상자가 열리며, 여기서 대상 필드를 선택하고 정렬 유형을 오름차순 또는 내림차순으로 설정할 수 있습니다.
아래 이미지는 디자이너에서 필드 항목 이름을 기준으로 정렬하는 방법을 보여줍니다:
![pivot-sort-by-field-name](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/df1fe1ee-eb3c-4da7-8c20-a0d8d2b7e734/pivot-sort-by-field-name.6dac76.gif)

## 값 기준 정렬

피벗 테이블 데이터를 필드의 값에 따라 정렬하려면, `sortInfo` 클래스의 `sortType` 및 `sortValueFieldName` 속성을 설정할 수 있습니다. `sortValueFieldName` 속성을 사용하면 데이터를 정렬할 기준이 되는 필드의 이름을 지정할 수 있습니다. 이 기능을 통해 "Grand Total"(총합계) 열의 값을 기준으로 피벗 테이블 데이터를 정렬할 수 있습니다.
아래 이미지는 "Quantity" 값을 기준으로 "Category" 필드를 오름차순으로 정렬한 예시입니다.
![pivot-sort-by-value](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/df1fe1ee-eb3c-4da7-8c20-a0d8d2b7e734/pivot-sort-by-value.b7e3ef.png)

다음 코드 샘플은 피벗 테이블에서 값을 기준으로 정렬하는 방법을 보여줍니다:

```javascript
let pivotTable = spread.getActiveSheet().pivotTables.get("PivotTable");
var sortInfo = {
    sortType: GC.Pivot.SortType.asc,
    sortValueFieldName: "Quantity"
 };
  pivotTable.sort("Category", sortInfo);
```

### 디자이너 사용

디자이너에서 필드의 필터 드롭다운에서 **기타 정렬 옵션..(More Sort Options..**)을 클릭하여 데이터를 정렬할 수 있습니다. 이 옵션을 클릭하면 정렬 필드(**Sort Field**) 대화상자가 열리며, 여기서 대상 필드를 선택하고 정렬 순서를 오름차순 또는 내림차순으로 설정할 수 있습니다.
아래 이미지는 디자이너에서 값을 기준으로 정렬하는 방법을 보여줍니다:
![pivot-sort-by-value](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/df1fe1ee-eb3c-4da7-8c20-a0d8d2b7e734/pivot-sort-by-value.077032.gif)

값 영역의 컨텍스트 메뉴에서도 **Sort**(정렬) 옵션을 사용하여 피벗 데이터를 값 기준으로 정렬할 수 있습니다. 이 메뉴에서는 다음 세 가지 정렬 옵션을 제공합니다:

* 작은 값부터 큰 값 순으로 정렬
* 큰 값부터 작은 값 순으로 정렬
* 기타 정렬 옵션

앞의 두 옵션은 각각 오름차순 및 내림차순으로 정렬하며, 기타 정렬 옵션은 해당 값 영역에 따라 다음과 같이 동작합니다:

| **Value Area** | **Dialog** | **Behavior** |
| ---------- | ------ | -------- |
| 일반 값 영역 | ![sort-by-value1](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/df1fe1ee-eb3c-4da7-8c20-a0d8d2b7e734/sort-by-value1.db302b.png?width=250) | **값 기준 정렬(Sort by Value)** 대화상자가 표시됩니다. |
| 총계 영역 | ![sort-by-value2](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/df1fe1ee-eb3c-4da7-8c20-a0d8d2b7e734/sort-by-value2.00683a.png?width=250) | **값 기준 정렬(Sort by Value)** 대화상자가 표시되지만, 다음과 같은 조건과 함께 정렬 방향은 비활성화됩니다:<br>\- Grand Total 열인 경우\, 방향은 기본적으로 위에서 아래로입니다\.<br>\- Grand Total 행인 경우\, 방향은 기본적으로 왼쪽에서 오른쪽입니다\.<br>\- Grand Total 행과 열 모두인 경우\, 대화상자가 표시되지 않습니다\. |
| 행 헤더 영역/코너 영역 | ![sort-by-value3](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/df1fe1ee-eb3c-4da7-8c20-a0d8d2b7e734/sort-by-value3.24e54b.png?width=250) | 정렬 필드(**Sort Field**) 대화상자가 열리며, 다음과 같은 조건이 적용됩니다:<br>\- Compact 레이아웃의 경우\, Corner 영역에 정렬 옵션이 나타나지 않습니다\.<br>\- 선택한 필드가 ΣValues 필드인 경우\, **값 기준 정렬(Sort by Value)** 대화상자가 나타납니다.<br>\- 선택한 Row 영역이 ΣValues 항목인 경우\, 대화상자가 나타나지 않습니다\. |
| 열 헤더 영역 | ![sort-by-value4](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/df1fe1ee-eb3c-4da7-8c20-a0d8d2b7e734/sort-by-value4.ff4ac7.png?width=250) | 정렬 필드(**Sort Field**) 대화상자가 열리며, 다음과 같은 조건이 적용됩니다:<br> \- 선택한 필드가 ΣValues 필드인 경우\, **값 기준 정렬(Sort by Value)** 대화상자가 나타납니다. <br>\- 선택한 Column 영역이 ΣValues 항목인 경우\, 대화상자가 나타나지 않습니다\. |

## 사용자 정의 필드 항목 값 기준 정렬

사용자 정의 필드 항목 값을 기준으로 피벗 테이블 데이터를 정렬하려면, `sortInfo` 객체의 `sortByPivotReferences` 속성을 사용할 수 있습니다.
아래 이미지는 "OrderDate" 필드의 "Qtr1" 데이터를 기준으로 "Category" 필드를 오름차순으로 정렬한 예시입니다.
![pivot-sort-by-custom-value](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/df1fe1ee-eb3c-4da7-8c20-a0d8d2b7e734/pivot-sort-by-custom-value.58dbfa.png)

다음 코드 샘플은 사용자 정의 필드 항목 값을 기준으로 정렬하는 방법을 보여줍니다:

```javascript
let pivotTable = spread.getActiveSheet().pivotTables.get("PivotTable");
 var sortInfo = {
  sortType: GC.Pivot.SortType.asc,
  sortValueFieldName: "Quantity",
  sortByPivotReferences: [
     {
        fieldName: "OrderDate",
        items: ["Qtr1"]
     }
    ]
}
pivotTable.sort("Category", sortInfo);
```

## 디자이너 사용

디자이너에서 필드의 필터 드롭다운에서 **값 기준 정렬(Sort by Value)** 을 클릭하여 데이터를 정렬할 수 있습니다. 이 옵션을 클릭하면 대상 필드의 정렬 순서를 선택할 수 있는 **정렬 필드(Sort Field)** 대화상자가 열리며, 여기서 **기타 옵션..(More Options..**) 버튼을 클릭하면 또 다른 **정렬(Sort)** 대화상자가 열립니다. 이 대화상자에서는 기본적으로 **총합계(GrandTotal)** 이 선택되어 있어 값 기준 정렬과 동일한 결과를 제공합니다. 사용자 정의 필드 항목 값으로 정렬하려면, **선택한 열의 값(Values in selected column)** 의 범위 선택기를 사용해 범위를 지

>type=warning
> 행 또는 열 영역 필드의 경우 이 대화상자 옵션은 비활성화됩니다. 예를 들어, Category 필드에 대해 **기타 옵션..(More Options..**) 버튼을 클릭하면 버튼이 비활성화되므로, Quantity 필드를 선택한 후 **기타 옵션(More Options...)** 버튼을 클릭해야 합니다.

아래 이미지는 디자이너에서 사용자 정의 필드 항목 값을 기준으로 정렬하는 방법을 보여줍니다:
![pivot-sort-by-custom-field-value](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/df1fe1ee-eb3c-4da7-8c20-a0d8d2b7e734/pivot-sort-by-custom-field-value.47e35c.gif)

## 사용자 정의 콜백 정렬

값의 오름차순 또는 내림차순이 아닌 사용자 정의 로직을 사용하여 피벗 테이블 데이터를 정렬하려면, 사용자 정의 콜백 함수를 사용할 수 있습니다.
아래 이미지는 사용자 정의 콜백 함수를 사용하여 TotalSales 열을 정렬한 예시입니다.
![pivot-sort-by-custom-callback](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/df1fe1ee-eb3c-4da7-8c20-a0d8d2b7e734/pivot-sort-by-custom-callback.ac07df.png)
다음 코드 샘플은 사용자 정의 콜백 함수를 사용하여 TotalSales 열을 정렬하는 방법을 보여줍니다:

```javascript
let pivotTable = spread.getActiveSheet().pivotTables.get("PivotTable");
 var sortInfo = {
       sortType: GC.Pivot.SortType.desc,
       customSortCallback: (fieldItemNameArray)=>{
       alert("sorting from custom callback")
       return fieldItemNameArray.sort((a,b)=>b-a);
    }
  };
pivotTable.sort("TotalSales", sortInfo);
```