Salesforce での集計数式と行レベルの数式

[レポートのまとめに戻る](https://qiita.com/Keiji_otsubo/items/9c883d1e4bf0df549a2a)

+ [レポート　UNIQUE](https://qiita.com/Keiji_otsubo/items/c05576a8df76127cd2ca)
+ [行レベルの数式を最大限に活用: ヒント、制限、および制約](https://help.salesforce.com/s/articleView?id=sf.reports_formulas_row_level_limits.htm&type=5)

各行レベルの数式では、一意の項目を 5 件まで参照できます。数式で同じ項目が 5 回参照される場合は、1 件の一意の項目の参照として計数されます。

+ [レポートの「行レベルの数式を追加」にてテキストを改行すると「_BR_ENCODED_」と表示されてしまいます](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007akHE5)

:::note
以下の回答によると行レベル数式では改行はできないようです。数式項目を作って改行させればレポートでも表示できるとのことです。

It's not possible to add a line break in row level formulas.

You should create a formula field on the object returning text:

"Date="&DateField__c&BR()&"1st threshold"& etc

You can now use this formula field in your report

https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000A9CCKSA3
:::

+ [集計レポートに表示する属性項目について](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ajTWG)

+ [前月対比](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007epklV)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/925e1e2e-457a-742b-c451-d6cc1e3f65d1.png)

```
IF(PREVGROUPVAL(金額,年月)=0 && 金額 > 0,100,
IF(PREVGROUPVAL(金額,年月)=0 && 金額 = 0,0,
金額/PREVGROUPVAL(金額,年月)*100))
```

+ [各担当の所有レコードに対して２か月以内に活動している割合を算出したレポートの作り方](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007erCKx)

:::note
レポートタイプ取引先を使います。各カラムは以下を参考にしてみてください。
私の例では所有者でグループ化していますが、担当者を使ってみてください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/88ccdd75-8e1c-08bd-4b50-9eb89c5ce5bf.png)

行レベルの数式列（２ヶ月以内）

```
IF(DUE_DATE >= ADDMONTHS(TODAY(),-2),1,0)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/21648668-07bb-0708-0a33-3d68f73c140a.png)

集計レベルの数式列(割合)

```
CDF1:SUM / RowCount
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/9a22670e-1703-1e2b-304c-70828f5ccdcd.png)
:::

----

[Summary Formulas vs. Row Level Formulas in Salesforce](https://www.salesforceben.com/summary-formulas-vs-row-level-formulas-in-salesforce-reports-examples/)

Salesforce レポートの数式は、レコードのグループ化、計算、またはレコード データの比較のためにレポートで使用できます。

Salesforce Report Builder には、集計式と行レベルの式の2 種類の式があります。似ているように聞こえますが、両者には明確な違いがあります。

集計数式は複数のレコードにまたがるのに対し、行レベルの数式は単一のレコードにまたがります。集計数式は列ベースの数式 (数式の結果が列の下部に表示される) と考えることができますが、行レベルの数式の結果は行自体に表示されます。

|||||
|:----|:----|:----|:----|
|要約式|複数のレコードにまたがる。|列の一番下にあります。|例: レポート内のすべての更新商談の平均金額。|
|行レベルの数式|1 つのレコードに適用されます。|行自体でそれを見つけます。|例: 同じレコードの 2 つのフィールドに同じ値があるかどうかを確認します。|

# multi-select picklist is not supported yet in row-level formulae.

+ [質問:Creating a report based on multi-select picklist values](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JfhztSAB)

:::note
Looks like multi-select picklist is not supported yet in row-level formulae.

The Release Notes state that 'Picklist' is supported, but doesn't mention multi-select picklist: https://docs.releasenotes.salesforce.com/en-us/winter20/release-notes/rn_rd_reports_row_level_formulas.htm

There's an Idea to add multi-select picklist support to row-level formulae here:

[Enhanced Support for Row-Level Formulas](https://ideas.salesforce.com/s/idea/a0B8W00000GdfBpUAJ/enhanced-support-for-rowlevel-formulas)

https://salesforce.stackexchange.com/questions/324767/multi-select-picklist-issue
:::


# 例 1: 合計商談金額

上司から、商談金額の合計を国別に表示するレポートを作成できるかどうか尋ねられました。

これを達成するために、実際には集計式フィールドは必要ありません (ただし、それがあなたの推測であったとしても、あなたは正しい道を進んでいます!)。

+ 必要なのは、フィールドをクリックしてから、SUM チェックボックスをクリックすることだけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/11516acc-efba-3c38-fcb5-f19ed2fba3e6.png)

+ 国に基づくグループ化を含めると、レポートの要約行に次のように表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/ae442f0d-2a4f-1e30-6696-63c55cf7e0b6.png)


# 例 2: 特定の製品の月間平均ケース数

サポート チームから、昨年の特定の製品のケースの月平均を示すレポートを作成するように依頼されました。
この場合、集計式を使用する必要があります。

+ 集計式を作成する前に、Product フィールドが「Group By Row」フィールドであることを確認してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/71935815-daeb-56ce-0238-f5f68ed24b16.png)

+ [列] の横にあるドロップダウンをクリックし、[集計式] を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/ec207f3f-1706-2f50-d0bd-39337f8e4e20.png)


+ 数式を作成するには、レコード数 (1 年全体の合計レコード数) を 12 (1 年の月数) で割ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/7b7481b2-0c96-f4ec-f5a8-cf7e044c845b.png)


+ 列に名前を付けることを忘れないでください。このシナリオでは、列名は「Monthly Avg Cases」です。これで、レポートを実行する準備が整いました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/01095b73-4cbc-d6a2-e349-9811d723c6cb.png)



# 例 3: フィールド値の一致をチェックする

あなたは、ケース レベルで、ケースのアカウントの請求先の州と配送先の州が一致することを確認する任務を負っています。

行レベルの数式を使用すると、アカウントに新しいフィールドを作成することなく、これを即座に解決できるようになりました。

+ ケース レポートを作成し、[列] ドロップダウンから [行レベルの数式を追加] を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/a9239011-6ab6-8669-ba8b-3d54cd8d3c39.png)


+ エディターに入ったら、Billing State と Shipping State を比較する IF ステートメントを作成します。結果は 0 (一致しない場合) または 1 (一致する場合) になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/6cedbe4c-7781-fce7-1023-bda829accb62.png)


ヒント:左側の [フィールドと関数] メニューを使用して、正しい書式を設定していることを確認してください。

+ 数式に完全に満足したら、列に名前を付けて [適用] をクリックします。
+ レポートでは、位置合わせされていない状態とフィールドのフィルターを簡単に特定できます。これで、単純な行レベルの数式が完成しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/098eccff-8c53-9ed0-f28e-31d5d5c793d3.png)

# レポートで、ステータスがD以上のレコード／レコード総数の割合を出したいです。

+ [レポートで、分子を絞り込んで数式を作成したい](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007clZnS)

:::note
レポートの行レベルの数式を使ってみてください。

D以上なら１にして、それ以外は0にすることでカウントできると思います。

```
CASE(STAGE_NAME,
"D",1,
"E",1,
0)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/2ec1fabc-4516-fc0e-65e2-9119a0f16bd7.png)
:::

+ [開始日と終了日が1か月以上となっているレコードを抽出](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007cljnW)

:::note
以下のような行レベル数式（数値）を作って1だけを抽出すれば可能です

```
IF(ADDMONTHS(開始日,1) < 終了日,1,0)
```

レポートタイプのオブジェクトリレーションでBレコードが「関連レコードが存在する/しない」になっていると、レポート作成時、「行レベルの数式」が選択できないようでした。
先ほど、Bレコードを「少なくとも 1 つの関連レコードが存在する」にしたレポートタイプを作成し、このレポートタイプでレポートを作成したころ、無事に行レベルの数式を使用し、ご教示いただいた方法で抽出できました。
:::


# 行レベル数式の制限


行レベルの数式では次のデータ型はサポートされていません。

+ Boolean
+ Timeonly
+ メール
+ 電話
+ Multiselect picklist

-----

+ 「存在する/しない」カスタムレポートタイプ (取引先責任者が存在する/しない取引先など) では、行レベルの数式はサポートされていません。[行レベルの数式を追加] ボタンは表示されません。

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