> ## Documentation Index
> Fetch the complete documentation index at: https://help.dingtalk.io/llms.txt
> Use this file to discover all available pages before exploring further.

# データ準備の数式

> YiDA ローコードプラットフォームのデータ準備機能を解説します。データクレンジング・統合・変換などの ETL 処理や、論理処理・テキスト処理の数式設定方法を紹介します。

## 1. ユースケース

**データ準備**は、YiDA ローコードプラットフォームの主要機能の 1 つです。企業ユーザーがデータ分析やアプリ構築を行う前に、生データをクレンジング、統合、変換するのに役立ちます。データ準備は、ゼロコードの ETL（Extraction Transformation Loading）方式を採用し、YiDA アプリ、社外の企業データベース、ファイルベースのデータ、DingTalk 公式データソース（社員名簿、OA、Smart HR、勤怠を含む）のデータを処理します。データ処理パイプラインを構築することで、分散したデータを統合し、ビジュアル分析やデータドリブンな意思決定を支える標準化されたデータセットにまとめます。

## 3. 数式設定のエントリ

**パス：アプリ設定 > データファクトリ > データ準備 > データ準備の作成 > データセットを選択。数式は関連、集計、クレンジングの各ノードで設定できます。**

設定手順は、以下の動画をご覧ください。

## 4. 論理処理

### CASEWHEN

**使い方 1**：CASEWHEN(\<condition>,\<value>,\<condition>,\<value>...)。SQL の CASE WHEN 構文と同等です。

**例**：CASEWHEN(\<性別フィールド>="Male","male",\<性別フィールド>="Female","female")。"Male" の値は "male" に、"Female" の値は "female" に置換されます。

**使い方 2**：CASEWHEN(\<condition>,\<value>,\<condition>,\<value>...\<value>)。SQL の CASE WHEN 構文と同等です。

**例**：CASEWHEN(\<性別フィールド>="Male","male","female")。"Male" の値は "male" に置換され、それ以外の値はすべて "female" に置換されます。

## 5. テキスト処理

### LEN

**使い方**：LEN(\[string field])。文字列の長さを返します。

**例**：LEN("test") は 4 を返します。LEN("测试") は 2 を返します。漢字 1 文字は英字 1 文字としてカウントされます。

### LEFT

**使い方**：LEFT(\<measure field>,\< n >)。\<field> の値の左端から数えて n 文字分の文字列を返します。

**例**：Field1 の値が "ABCDEF" の場合、LEFT(Field1,3) は "ABC" を返します。

### RIGHT

**使い方：** RIGHT(\<measure field>,\< n >)。\<field> の値の右端から数えて n 文字分の文字列を返します。

**例**：Field1 の値が "ABCDEF" の場合、RIGHT(Field1,3) は "DEF" を返します。

### MID

**使い方**：MID(\<measure field>, \< start >, \< n >)。\<field> の値の左端から start 番目の文字から始まる、長さ n の文字列を返します。

**例**：Field1 の値が "ABCDEF" の場合、MID(Field1, 3, 3) は "CDE" を返します。

### POS

**使い方**：POS(\<measure field>,\<substring>)。\<text> における \<substring> の位置を返します。一致しない場合は 0 を返します。

**例**：Field1 の値が "ABCDEF" の場合、POS(Field1,"DE") は 4 を返します。

### UPPER

**使い方**：UPPER(\<measure field>)。\<field> の値を大文字に変換します。

**例**：Field1 の値が "AbcdeF" の場合、UPPER(Field1) は "ABCDEF" を返します。

### LOWER

**使い方**：LOWER(\<measure field>)。\<field> の値を小文字に変換します。

**例**：Field1 の値が "AbcdeF" の場合、LOWER(Field1) は "abcdef" を返します。

### VAL

**使い方**：VAL(\<measure field>)。テキスト型の \<field> の値を数値型に変換します。

**例**：Field1 の値が "123" の場合、VAL(Field1) は 123 を返します。

### LEFTTRIM

**使い方**：LEFTTRIM(\<measure field>)。\<field> の値の先頭にある空白を削除します。

**例**：Field1 の値が " ABC" の場合、LEFTTRIM(Field1) は "ABC" を返します。

### RIGHTTRIM

**使い方**：RIGHTTRIM(\<measure field>)。\<field> の値の末尾にある空白を削除します。

**例**：Field1 の値が "ABC " の場合、RIGHTTRIM(Field1) は "ABC" を返します。

### NUMBERTOSTRING

**使い方**：NUMBERTOSTRING(\<number>)。数値データを文字列に変換します。

**例**：Field1 の値が "12345 " の場合、NUMBERTOSTRING(Field1) は "12345" を返します。

### SPLITPART

**使い方**：SPLITPART(\<string field>, delimiter, substring position)。区切り文字で文字列を N 個の部分文字列に分割します（N は区切り文字の数 + 1）。部分文字列の位置は、1 から（左から右へ）、または -1 から（右から左へ）カウントされます。

**例**：Field1 の値が "ABCDABHABC" の場合、SPLITPART(\<Field1>,A,2) は "BCD" を返します。部分文字列の位置を -5 に設定した場合も "BCD" が返されます。

### CONCAT

**使い方**：CONCAT(\<field>,\<field>,...)。複数のフィールドを 1 つの文字列に連結します。入力パラメータは文字列型のフィールドである必要があります。

**例**：Field1 の値が "A"、Field2 の値が "BCD" の場合、CONCAT(\<Field1>,\<Field2>) は "ABCD" を返します。

### REPLACE

**使い方**：REPLACE(\[string], \[search string], \[replacement string])。置換後の文字列を返します。

**例**：Field1 が "abcdefg"、Field2 が "bcd"、Field3 が "12345" の場合、REPLACE(\[Field1], \[Field2], \[Field3]) は "a12345efg" を返します。

## 6. 時間処理

### NOW

**使い方**：NOW()。現在時刻を秒単位で返します。

**例**：なし

### DATEFORMAT

**使い方**：DATEFORMAT(\<日付フィルター>,\<time format>)。日付を文字列としてフォーマットします。

両方の関数のフォーマットは Java の日付フォーマット規則に準拠します。対応するフォーマットタイプは以下のとおりです。

* yyyy：年
* MM：月
* dd：日
* hh：12 時間制（1〜12）
* HH：24 時間制（0〜23）
* mm：分
* ss：秒

**例 1：**

DATEFORMAT(\<日付フィルター>,"yyyy-MM-dd")。日付フィールドの値が 1989年8月4日 の場合、返される値は 1989-08-04 です。区切り文字 "-" は "/" などの文字に置き換えることができます。

**例 2：**

DATEFORMAT(\<日付フィルター>,"yyyy-MM-dd HH:mm:ss")。日付フィールドの値が 2020年9月1日 13:30:00 の場合、返される値は 2020-09-01 13:30:00 です。区切り文字 "-" や ":" は "/" や「年」「月」「日」などの文字に置き換えることができます。

### DATEADD

**使い方：** `DATEADD(<Time field>,<offset>,<time granularity>)`。\<Time field> に指定した **\<time granularity>** の \<offset> を加算します。

* 時間の粒度の値：

* オフセットは、加算または減算する具体的な数値です。正の値は加算、負の値は減算を意味します。

**例 1：**

Date コンポーネントの値が "20200901" の場合、`DATEADD(Date component,10,"DAY") = 20200911` となります。

**例 2：**

Date コンポーネントの値が "20200901" の場合、`DATEADD(Date component,-1,"DAY") = 20200831` となります。

<Note>
  デフォルトの日付表示形式は `yyyyMMdd` です。表示形式を変更するには、[**DATEFORMAT 関数**](/ja/yida/form/sk0p7euqper7qr7l)の例を参照してください。
</Note>

### DATEDIFF

**使い方**：DATEDIFF(\<Time field 1>,\<Time field 2>,\<time granularity>)。指定した時間の粒度で、Time field 1 と Time field 2 の差を返します。

時間の粒度のオプション：

* YEAR       年
* MONTH    月
* DAY        日
* HOUR      時
* MINUTE   分
* SECOND  秒

**例**：DATEDIFF(Date component 1, Date component 2,"DAY") は、2 つの日付コンポーネント間の日数を返します。

**注：パラメータには日付コンポーネントのみを指定できます。固定の日付値を数式に直接入力することはできません。**

Date コンポーネントの値が "2020-02-14"、当日が "2020-02-16" の場合：

DATEDIFF(NOW(), 入力日,"DAY") = 2

DATEDIFF(入力日, NOW(),"DAY") = -2

### FROMUNIXTIME

**使い方**：数値の Unix タイム値を日付値に変換します。

関数宣言：

```sql theme={"theme":{"light":"github-light","dark":"github-dark"}}
datetime fromunixtime(bigint unixtime)
```

パラメータの説明：

* unixtime：Bigint 型。Unix 日時形式の秒数。string、double、または decimal 型の値は、演算前に暗黙的に bigint に変換されます。
* 戻り値：Datetime 型。unixtime が NULL の場合、NULL を返します。

例：

```sql theme={"theme":{"light":"github-light","dark":"github-dark"}}
fromunixtime(123456789) = 1973-11-30 05:33:09
```

### WEEK

**使い方**：WEEK(\[date], \[start day (optional)])。指定した日付が該当する年の週番号を算出します。開始曜日を指定しない場合、デフォルトで月曜日を週の初日とします。開始曜日の値 1〜7 は、月曜日から日曜日までを週の初日とすることを示します。

**例**：フィールド値が "2020-01-08" の場合、WEEK(\[date],) は "20202" を返します。開始曜日は省略可能で、デフォルトは空です。

### QUARTER

**使い方**：QUARTER(\[date], \[fiscal year flag (optional)])。指定した日付が該当する年の四半期を算出します。会計年度フラグを 1 に設定すると会計年度（4 月開始）を使用し、0 に設定すると暦年を使用します。

**例**：Field1 の値が "2020-02-02" の場合、QUARTER(\[Field1], 0) は "1" を返します。

## 7. 基本統計

### ROUND

**使い方**：ROUND(\<field>,\<precision>)。指定した小数点以下の桁数にフィールドを丸めます。

**例**：Field1 の値が "12.33333" で精度が 2 の場合、ROUND(\<Field1>,\<precision>) は "12.33" を返します。

### MOD

**使い方**：MOD(\<field>,\<field>)。剰余演算を行い、余りを返します。

注：除算の商を取得するには、算術演算子 / を使用します。例えば 6/4 は商 1、余り 2 を返します。

例：Field1 の値が "6"、Field2 の値が "4" の場合、MOD(\<Field1>,\<Field2>) は "2" を返します。

### ParseDouble

**使い方**：ParseDouble(\<field>)。文字列または整数を浮動小数点数に変換します。

**例**：フィールド値が 3 または "3" の場合、ParseDouble(\<field>) は 3.0 を返します。

### ParseInt

**使い方**：ParseInt(\<field>)。文字列または浮動小数点数を整数に変換します。

**例**：フィールド値が 3.2 または "3.2" の場合、ParseInt(\<field>) は 3 を返します。

## 8. 配列

### ArrayToString

**使い方**：ArrayToString(\<array field>,\[delimiter (optional)])。配列を文字列に変換します。

**例**：Field1 の値が "\[プロダクト部, 技術部, 営業部]"、Field2 の値が "-" の場合、ArrayToString(\<Field1>,\<Field2>) は "プロダクト部-技術部-営業部" を返します。Field2 が空の場合は、"プロダクト部,技術部,営業部" が返されます。

### StringToArray

**使い方**：StringToArray(\<string field>,\[delimiter (optional)])。文字列を配列にパースします。

**例**：Field1 の値が "プロダクト部-技術部-営業部"、Field2 の値が "-" の場合、StringToArray(\<Field1>,\<Field2>) は "\[プロダクト部, 技術部, 営業部]" を返します。

### ArrayLength

**使い方**：ArrayLength(\<array field>)。配列の長さを返します。

**例**：フィールド値が "部門"（選択肢が "プロダクト部, 技術部, 営業部"）の場合、ArrayLength(\<複数選択その他配列フィールド>) は "3" を返します。

### ArrayCat

**使い方**：ArrayCat(\<array field 1>,\<array field 2>,...)。複数の配列を連結します。

**例**：Field1 の値が "プロダクト部, 技術部, 営業部"、Field2 の値が "プロダクト担当, 技術担当, 営業担当" の場合、ArrayCat(\<複数選択その他配列フィールド 1>,\<複数選択その他配列フィールド 2>,...) は "プロダクト部, 技術部, 営業部, プロダクト担当, 技術担当, 営業担当" を返します。
