1. ユースケース
生のフォームデータをそのまま表示できず、カスタムロジックで加工してから表示する必要がある場合があります。 例:- フォームデータは従業員個人が送信しますが、レポートには毎日フォームを送信した従業員の人数を表示したい場合。この場合、COUNT() 関数で結果を算出してから表示します。
- フォームにカスタムフィールドを追加し、ページ遷移用のハイパーリンクにひもづけたい場合。このシーンでもカスタム数式フィールドが役立ちます。
- 論理
- 文字列処理
- 集計
- 配列
3. 数式の設定場所
パス:レポート作成 >> レポート設計ページ >> データセットを選択 >> 表示列フィールドを選択 >> FX >> 数式を設定 以下の動画で設定方法をご確認ください。4. 論理
CASEWHEN
使い方 1:CASEWHEN(<condition>,<value>,<condition>,<value>…)。SQL の CASE WHEN 構文と同等です。 例:CASEWHEN(<性別フィールド>=“Male”,“男性”,<性別フィールド>=“Female”,“女性”)。「Male」の値は「男性」に、「Female」の値は「女性」に置換されます。 使い方 2:CASEWHEN(<condition>,<value>,<condition>,<value>…<value>)。SQL の CASE WHEN 構文と同等です。 例:CASEWHEN(<性別フィールド>=“Male”,“男性”,“女性”)。「Male」の値は「男性」に、それ以外の値はすべて「女性」に置換されます。5. 文字列処理
LEN
使い方:LEN([文字列フィールド])。文字列の長さを返します。 例:LEN(“test”) は 4 を返します。LEN(“测试”) は 2 を返します。中国語 1 文字は英字 1 文字と同様に 1 文字として数えられます。LEFT
使い方:LEFT(<Measure フィールド>,< n >)。<フィールド> の値の左端から n 文字分の文字列を返します。 例:LEFT(Field1,3)。Field1 が “ABCDEF” の場合、戻り値は “ABC” です。RIGHT
使い方:RIGHT(<Measure フィールド>,< n >)。<フィールド> の値の右端から n 文字分の文字列を返します。 例:RIGHT(Field1,3)。Field1 が “ABCDEF” の場合、“DEF” を返します。MID
使い方:MID(<Measure フィールド>, < start >, < n >)。<フィールド> の値の左端から start 文字目より n 文字分の文字列を返します。 例:MID(Field1, 3, 3)。Field1 が “ABCDEF” の場合、“CDE” を返します。POS
使い方:POS(<Measure フィールド>,<サブ文字列>)。<text> における <サブ文字列> の位置を返します。一致するものがない場合は 0 を返します。 例:POS(Field1,“DE”)。Field1 が “ABCDEF” の場合、4 を返します。UPPER
使い方:UPPER(<Measure フィールド>)。<フィールド> の値を大文字に変換します。 例:UPPER(Field1)。Field1 が “AbcdeF” の場合、“ABCDEF” を返します。LOWER
使い方:LOWER(<Measure フィールド>)。<フィールド> の値を小文字に変換します。 例:LOWER(Field1)。Field1 が “AbcdeF” の場合、“abcdef” を返します。VAL
使い方:VAL(<Measure フィールド>)。<フィールド> の値をテキストから数値タイプに変換します。 例:VAL(Field1)。Field1 が “123” の場合、123 を返します。LEFTTRIM
使い方:LEFTTRIM(<Measure フィールド>)。<フィールド> の値から先頭の空白を削除します。 例:LEFTTRIM(Field1)。Field1 が ” ABC” の場合、“ABC” を返します。RIGHTTRIM
使い方:RIGHTTRIM(<Measure フィールド>)。<フィールド> の値から末尾の空白を削除します。 例:RIGTTRIM(Field1)。Field1 が “ABC ” の場合、“ABC” を返します。NUMBERTOSTRING
使い方:NUMBERTOSTRING(<数値>)。数値データを文字列に変換します。 例:NUMBERTOSTRING(Field1)。Field1 が “12345 ” の場合、“12345” を返します。SPLITPART
使い方:SPLITPART(<文字列フィールド>, 区切り文字, サブ文字列の位置)。文字列を「区切り文字」で N 個のサブ文字列に分割します(N は区切り文字の数 + 1)。サブ文字列の位置は、1 から始まる(左から右)または -1 から始まる(右から左)カウントで指定します。 例:SPLITPART(<Field1>,A,2)。Field1 が “ABCDABHABC” の場合、“BCD” を返します。サブ文字列の位置を -5 に設定した場合も “BCD” を返します。CONCAT
使い方:CONCAT(<フィールド>,<フィールド>,…)。複数のフィールドを 1 つの文字列に連結します。入力パラメータは文字列型フィールドである必要があります。 例:CONCAT(<Field1>,<Field2>)。Field1 が “A”、Field2 が “BCD” の場合、“ABCD” を返します。REPLACE
使い方:REPLACE([string], [search string], [replacement string])。置換後の文字列を返します。 例:REPLACE([Field1], [Field2], [Field3])。Field1 が “abcdefg”、Field2 が “bcd”、Field3 が “12345” の場合、“a12345efg” を返します。STRINGTONUMBER
新しい文字列処理レポート数式STRINGTONUMBER() は、テキスト型の数値を数値型に変換します。
本数式は現時点でレポートページでのみサポートされます。以下のように使用します。
6. 集計
集計フィールドの動作を示すため、以下では 2 つの実践的なサンプルデータセットを使用します。 以下の「サンプルデータセット 1」および「サンプルデータセット 2」は、複数のフォームから収集されたものと仮定します。 サンプルデータセット 1 データセット
スプレッドシート
サンプルデータセット 2
データセット
スプレッドシート
SUM
使い方:SUM(<Measure フィールド>,[condition],[除外フィールド])。[condition] に一致する <フィールド> の値の合計を返します。[除外フィールド] は合計のクロス計算に加算されません。 例:サンプルデータセット 1 を使用します。 部門チームビルディング支出 = SUM(支出, 予算タイプ=“チームビルディング”): スプレッドシート結果
BU チームビルディング支出 = SUM(支出, 予算タイプ=“チームビルディング”, 部門):
スプレッドシート結果
AVG
使い方:AVG(<Measure フィールド>,[condition],[除外フィールド]) 説明:[condition] に一致する <フィールド> の値の平均を返します。[除外フィールド] は合計のクロス計算に加算されません。 例:サンプルデータセット 1 を使用します。- BU ごとの平均チームビルディング支出を計算
- 全体の平均チームビルディング支出を計算
MAX
使い方:MAX(<Measure フィールド>,[condition],[除外フィールド])。[condition] における <フィールド> の最大値を返します。[除外フィールド] は合計のクロス計算に加算されません。 例:サンプルデータセット 1 を使用します。 部門最大チームビルディング支出 = MAX(支出, 予算タイプ=‘チームビルディング’): スプレッドシート結果
BU 最大チームビルディング支出 = MAX(支出, 予算タイプ=“チームビルディング”, 部門):
スプレッドシート結果
MIN
使い方:MIN(<Measure フィールド>,[condition],[除外フィールド])。[condition] における <フィールド> の最小値を返します。[除外フィールド] は合計のクロス計算に加算されません。 例:サンプルデータセット 1 を使用します。 部門最小チームビルディング支出 = MIN(支出, 予算タイプ=“チームビルディング”): スプレッドシート結果
BU 最小チームビルディング支出 = MIN(支出, 予算タイプ=“チームビルディング”, 部門):
スプレッドシート結果
COUNTDISTINCT
使い方:COUNTDISTINCT(<Measure フィールド>,[condition],[除外フィールド])。[condition] における <フィールド> の一意な値の数を返します。[除外フィールド] は合計のクロス計算に加算されません。 例:サンプルデータセット 2 を使用します。 BU 部門数 = COUNTDISTINCT(部門, 支出>0, 予算タイプ) スプレッドシート結果COUNT
使い方:COUNT(<Measure フィールド>,[condition],[除外フィールド])。[condition] における <フィールド> の値のカウントを返します。[除外フィールド] は合計のクロス計算に加算されません。 例:サンプルデータセット 2 を使用します。 部門予算レコード数 = COUNT(部門, 支出>0, 予算タイプ) スプレッドシート結果7. 日付と時刻
NOW
使い方:NOW()。現在時刻を秒単位で返します。 例:省略。STRINGTODATE
使い方:STRINGTODATE(<フィールド>,<フォーマット>)。文字列を日付/時刻値に変換します。 例:STRINGTODATE(“1989-09-27”,“yyyy-MM”) は “198909” を返します。 上記 2 つの関数のフォーマットは Java のフォーマット規則に従います。サポートされるフォーマットタイプは以下のとおりです。 yyyy:年 MM:月 dd:日 hh:12 時間制(1-12) HH:24 時間制(0-23) mm:分 ss:秒DATEADD
使い方:DATEADD(<日付フィールド>,<オフセット>,<時間粒度>)。<日付フィールド> に指定した <時間粒度> の <オフセット> を加算します。
- 時間粒度の値:
- オフセットは加算または減算する具体的な数値です。正の値は加算、負の値は減算を表します。
DATEADD(日付コンポーネント,10,"DAY") = 20200911 となります。
例 2:
フォーム内の日付コンポーネントの値が “20200901” の場合、DATEADD(日付コンポーネント,-1,"DAY") = 20200831 となります。
日付のデフォルト表示フォーマットは
yyyyMMdd です。日付表示フォーマットを変更する方法については、DATEFORMAT 関数 の例を参照してください。DATEDIFF
使い方:DATEDIFF(<時間フィールド 1>,<時間フィールド 2>,<時間粒度>)。時間フィールド 1 と時間フィールド 2 の差を、指定した時間粒度で返します。 時間粒度のオプション:- YEAR 年
- MONTH 月
- DAY 日
- HOUR 時
- MINUTE 分
- SECOND 秒
DATEFORMAT
使い方:DATEFORMAT(<日付フィールド>,<時間フォーマット>)。日付を文字列にフォーマットします。 上記 2 つの関数のフォーマットは Java のフォーマット規則に従います。サポートされるフォーマットタイプは以下のとおりです。- yyyy:年
- MM:月
- dd:日
- hh:12 時間制(1-12)
- HH:24 時間制(0-23)
- mm:分
- ss:秒
FROMUNIXTIME
使い方:数値の Unix タイム値を日付値に変換します。 関数宣言:- unixtime:Bigint 型、秒単位、Unix 形式の日付/時刻値。入力が string、double、または decimal 型の場合、計算前に暗黙的に bigint に変換されます。
- 戻り値:Datetime 型の日付値。unixtime が NULL の場合は NULL を返します。
WEEK
使い方:WEEK([日付], [開始曜日(任意)])。日付が年の何週目に該当するかを計算します。開始曜日を指定しない場合、週の初日はデフォルトで月曜日となります。開始曜日の値 1〜7 は、それぞれ月曜日から日曜日が週の初日であることを示します。 例:WEEK([日付],) は、フィールド値が “2020-01-08” の場合、“20202” を返します。開始曜日は任意で、デフォルトは空です。QUARTER
使い方:QUARTER([日付], [会計年度(任意)])。日付が年の何四半期に該当するかを計算します。会計年度:1 は会計年度統計(4 月開始)、0 は暦年を使用します。 例:QUARTER([Field1], 0) は、Field1 が “2020-02-02” の場合、“1” を返します。8. 配列
ArrayToString
使い方:ArrayToString(<配列フィールド>,[区切り文字(任意)])。配列を文字列に変換します。 例:ArrayToString(<Field1>,<Field2>) は、Field1 が “[Product, Engineering, Business]“、Field2 が ”-” の場合、“Product-Engineering-Business” を返します。Field2 が空の場合は “Product,Engineering,Business” を返します。結果は以下のとおりです。StringToArray
使い方:StringToArray(<文字列>,[区切り文字(任意)])。文字列を配列に解析します。 例:StringToArray(<Field1>,<Field2>) は、Field1 が “Product-Engineering-Business”、Field2 が ”-” の場合、“[Product, Engineering, Business]” を返します。ArrayLength
使い方:ArrayLength(<配列フィールド>)。配列の長さを返します。 例:ArrayLength(<複数選択またはその他の配列フィールド>) は、フィールドが「部門」で選択肢が “Product, Engineering, Business” の場合、“3” を返します。ArrayCat
使い方:ArrayCat(<配列フィールド 1>,<配列フィールド 2>,…)。複数の配列を連結した結果を返します。 例:ArrayCat(<複数選択またはその他の配列フィールド 1>,<複数選択またはその他の配列フィールド 2>,…) は、Field1 が “Product, Engineering, Business”、Field2 が “Product staff, Engineering staff, Business staff” の場合、“Product, Engineering, Business, Product staff, Engineering staff, Business staff” を返します。9. 統計
ROUND
使い方:ROUND(<フィールド>,<精度>)。フィールドを指定した小数点以下の桁数に丸めます。 例:ROUND(<Field1>,<精度>)。Field1 が “12.33333” で精度が 2 の場合、戻り値は “12.33” です。MOD
使い方:MOD(<フィールド>,<フィールド>)。剰余(余り)演算です。剰余(余り)の値を返します。 注意:除算の商を得るには、算術演算子 / を使用します。例えば、6/4 は商 1 と余り 2 を返します。 例:MOD(<Field1>,<Field2>)。Field1 が “6”、Field2 が “4” の場合、戻り値は “2” です。ParseDouble
使い方:ParseDouble(<フィールド>)。文字列または整数を浮動小数点数に変換します。 例:ParseDouble(<フィールド>)。フィールドの値が 3 または “3” の場合、結果は 3.0 です。ParseInt
使い方:ParseInt(<フィールド>)。文字列または浮動小数点数を整数に変換します。 例:ParseInt(<フィールド>)。フィールドの値が 3.2 または “3.2” の場合、結果は 3 です。10. FAQ
レポートで COUNT() を使う方法は?
COUNT はカウントに使用する関数です。詳細については、以下の動画を参照してください。レポートに「Formula parsing error. Details: AST syntax error: Unsupported database type encountered during SQL translation: 11」というエラーが表示されるのはなぜですか?
レポート数式フィールドでは、サポート対象の関数のみ使用可能です。サポート対象外の関数を使用するとエラーが発生します。以下のエラースクリーンショットを参照してください。コンポーネントが空かどうかをチェックする際、CASEWHEN 関数が機能しません。
数式内で空データをチェックする際は、Data IS NULL 構文のみサポートされます。Data="" 構文はサポートされません。