Salesforceカスタム項目詳細について～数式項目（クロスオブジェクト数式）、積み上げ集計項目

こんにちは
本橋孝昭です

今回はSalesforceで作れるカスタム項目の中級編として
・数式項目
・数式項目のクロスオブジェクト数式
・積み上げ集計項目

について解説していきます

# そもそもカスタム項目ってなんだ？

カスタム項目とは
・Salesforceシステム管理者が作成した項目
です

標準項目とカスタム項目の違いはこちらをご参照ください

https://qiita.com/Takaa/items/8f253a4eef84065fb844

項目には項目型があり、今回の
・数式項目
・積み上げ集計項目
は標準項目にはなく、カスタム項目で作成可能です


# 項目の項目型とは何か？

項目には必ず「項目型」があります
・チェックボックスの項目型「チェックボックス」
・日付の項目型「日付」
・選択リストの項目型「選択リスト」
です

日付の項目型は「日付」と分かりやすいと思うのですが
項目型で「数式項目」「積み上げ集計項目」というのは、ちょっと一見したらどのような項目型か分かりにくいですね
なので今回は「数式項目」「積み上げ集計項目」について確認しましょう

# Salesforceの「数式」と聞いて気を付けること

Salesforceで「数式」というと今回のオブジェクトの数式項目だけでなく、ほかにも様々な設定で数式が使われます

【Salesforceの数式で設定できること】
・オブジェクトの数式項目
・レポートの数式
・入力規則の条件数式
・フローの起動条件の数式

今回の「数式」とはオブジェクトの数式項目について説明します
（レポートの行レベルの数式とオブジェクトの数式項目は混同する人もいらっしゃるので要注意）


## 数式項目　とは
数式項目とは
・数式を使って項目の値を表示させる
項目です
主な使い方はこちらです

### 1 項目の値を使って計算する
項目の値を使って計算する方法があります
例えば商談オブジェクトで
数式項目「税込み金額」
という項目を作成する
（数式　商談金額×1.1）※消費税10％の場合

このような数式項目を作成した場合、自動で計算されますね
この数式項目の使い方は簡単ですね

## 2 　画像を表示させる
さて、数式項目で使いやすい設定としてはIMAGE関数という関数を使用すれば、
画像をレコード上に表示させられることが可能です

詳細はこちらの記事をご確認ください


※「数式」項目での画像の使用

https://help.salesforce.com/s/articleView?id=000385501&type=1

https://qiita.com/Takaa/items/b3da4d268caa8fa1006d

## 3 リンクを表示させ画面遷移をする

HIPERLINK関数という関数をしようすれば、リンクを表示してリンクをクリックさせたら画面遷移をすることのできる数式を作成できます

HIPERLINK関数の詳細はこちらをご確認ください

※ハイパーリンク数式項目の使用のヒント

https://help.salesforce.com/s/articleView?id=sf.tips_for_using_hyperlink_formula_fields.htm&type=5

https://qiita.com/Takaa/items/b3da4d268caa8fa1006d


## 4　親オブジェクトのデータを引っ張ってきて表示させる（クロスオブジェクト数式）

クロスオブジェクト数式についてTrailheadではこのように解説しています

https://trailhead.salesforce.com/ja/content/learn/projects/improve-data-quality-for-a-recruiting-app/create-cross-object-formulas

＞クロスオブジェクト数式は、関連オブジェクトから項目を入力して計算し、詳細ページ、リストビュー、レポートに表示します。これらの数式は、関連する親オブジェクトからデータを取得して子オブジェクトに表示します


数式の特徴の1つとして親オブジェクトのデータを引っ張ってきて表示させる設定も可能です

例として、
・商談に取引先の業種をひっぱって表示させる
ことが可能です

このように親オブジェクトの項目を引っ張って子オブジェクトに表示させる数式項目のことをクロスオブジェクト数式と呼びます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/aa6e7fb5-9861-d2e0-128e-6ef55ddf31c7.png)


クロスオブジェクト数式の特徴をいくつか示します

### クロスオブジェクト数式特徴1 親が変わればその値に変わる

特徴１として
親レコードが変わればその
親レコード内容が数式項目に反映される　というルールがあります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/b414d2c2-b0f1-8643-aee4-2632f5b2d306.png)

### クロスオブジェクト数式特徴2  親の項目値が変われば子の項目値も自動で変更される

もしも過去の取引先の業種を商談に残したい場合、 数式項目では過去の情報を残せないので不向きです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/0d38aa65-b3d9-76ef-7ee3-0f1f6a462442.png)


### クロスオブジェクト数式特徴3 親オブジェクトの親オブジェクトのレコードの項目値を引っ張ることも可能 


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/d97b7c12-92f7-7a97-4280-fb85c6fa7dbb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/98a1d121-6c62-a368-f4d7-a19a29ef1f78.png)

なお、親の親の親も参照可能です
ヘルプによれば最大10リレーションの離れたオブジェクトの値まで引っ張ることが可能です


＞最大 10 リレーション離れたオブジェクトの項目を参照できます。

https://help.salesforce.com/s/articleView?id=sf.customize_cross_object.htm&type=5

以上でクロスオブジェクトの数式の解説は終わりです

なお、数式項目は親のオブジェクトの値を引っ張ることは可能ですが子のオブジェクトのデータを親に引っ張ることはできないです

子のオブジェクトのデータの一部や合計などを親オブジェクトのレコードに表示させる場合は
「積み上げ集計項目」になります

# 積み上げ集計項目
最後に積み上げ集計項目についての説明です


積み上げ集計項目は、子オブジェクトのレコードのデータを親オブジェクトのデータに表示させることが可能です
例として下記画像のように子レコードの金額の合計金額の表示が可能です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/d576a329-da27-a609-9119-cf4854d4eda9.png)

なお、積み上げ集計項目項目は基本的に主従関係がないと作成できません

主従関係や参照関係の詳細はこちらをご確認ください

https://qiita.com/Takaa/items/67b7c837992074489f06

## 積み上げ集計項目 注意点

積み上げ集計の注意点としては子レコードの内容が変更されると都度積み上げ集計の計算内容も変更されることです
なので現状の結果の表示には便利ですが過去の状態は残らないのでご注意ください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/4317c13a-e7f7-5bf9-fc7c-490a4b375c79.png)

では、ここからは積み上げ集計項目の使い方をいくつか紹介します

## 積み上げ集計項目 使用例1 

金額の最小値などの表示も積み上げ集計項目で可能です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/f6d77b47-cecd-ae3f-eca5-085fb3170def.png)

## 積み上げ集計項目 使用例2
完了予定日の最小値　などの日付の表示も可能です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/3ec92a34-75b2-3324-e6a6-4a8a6fac3ce1.png)

## 積み上げ集計項目 使用例3
積み上げ集計項目の検索条件を使用すれば特定の条件
（例　子レコードの中で完了予定日が2024年の子レコードのみ）での合計値などの表示が可能です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/3d898f87-2a12-b641-4c11-c58dd9ab87af.png)


# 本橋的補足

Salesforceの用語って普段から「ちょっとこれだと意味が分かりにくいなぁ」というのがいくつかありますが、
今回の「クロスオブジェクト数式」と「積み上げ集計項目」もこれらの用語名がそもそも分かりにくいなぁ　と説明するたびに思います

「～数式」と聞くと、ついつい↓の画像のように
![数式1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/bd202875-5b01-cf80-67ff-cb04f0591041.jpeg)

「お、なんだか難しい方程式？かな？」と思いきやそんなこともなく、要は
・関連する親オブジェクトからデータを取得して子オブジェクトに表示
ということが「クロスオブジェクト数式」なので、なんだか用語と意味は違うなあ　といつも思います

「積み上げ集計項目」も「積み上げ」というからには
・合計しか出せないのか
![積み上げ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/77cb9e99-ca32-69d1-2224-a3de74847542.jpeg)


と思いきや意外や意外！？「最小値」や「最大値」も出せるし数値以外にも最小日付　というのも出せますからね！

「クロスオブジェクト数式」と「積み上げ集計項目」は名前で損をしている（？）気がするので何とかならないですかね


# まとめ
今回はカスタム項目の中級編として
・数式項目
・数式項目のクロスオブジェクト数式
・積み上げ集計項目

について解説しました

コメントありましたらいつでもお待ちしてます！