式を使ったカスタム指標の設定
右側からフィールドをドラッグして集計方式を選択するほか、カスタム指標を直接追加することもできます。
BIダッシュボードの編集中は、カスタム指標のデータ結果は表示されません。結果はプレビューで確認できます。プレビューについて詳しくは、プレビュー、一時保存、オンラインを参照してください
分析シナリオに応じて、現在の言語(Trinoなど)でサポートされている集約関数を使ってフィールド式を作成できます。以下ではTrinoを例に、よく使われる関数を紹介します。式に異常があるとクエリでエラーになるため、オンラインにする前にロジックに誤りがないことを確認してください。
なお、フィールド式で最終的に生成されるデータ結果は数値タイプである必要があります。数値以外のタイプのカスタム指標は-と表示されます。
基本の集約関数
通常の指標と同じ集計方式を使用できます
| 関数 | 説明 |
|---|---|
| count(x) | カウント。null値は除外されます |
| count(distinct x) | 重複を除いたカウント。null値は除外されます |
| avg(x) | 平均値。数値タイプのフィールドのみ対応 |
| sum(x) | 合計。数値タイプのフィールドのみ対応 |
| max(x) | 最大値。数値タイプのフィールドのみ対応 |
| min(x) | 最小値。数値タイプのフィールドのみ対応 |
上記の集約関数のほかに、次の集約関数も使用できます
| 関数 | 説明 |
|---|---|
| count(*) | カウント。count(x)との違いは、空の行もカウントされることです |
| max_by(x,y) | 入力値のうち、yの最大値に関連付けられたxの値 |
| min_by(x,y) | 入力値のうち、yの最小値に関連付けられたxの値 |
| approx_distinct(x) | 近似的な重複除外カウント。count(distinct x)との誤差は4‰です |
詳しくは、Aggregate functionsを参照してください
集約処理中のフィルター
集約関数を使用するときは、FILTERとWHERE句で表した条件を組み合わせて、集約処理から行を除外できます
データが次のとおりだとします
| channel | pay_amount |
|---|---|
| iOS | 648 |
| Android | 68 |
カスタム指標を2つ作成すると、「行から列への変換」を実現できます
-- iOSチャネルの売上
sum("pay_amount") filter(where "channel" = 'iOS')
-- Androidチャネルの売上
sum("pay_amount") filter(where "channel" = 'Android')
四則演算
フィールド式では、四則演算の記号や具体的な数値を使って、課金率やARPUなど、ビジネスシナリオに応じた数式タイプの指標を作成できます
| Operator | 説明 |
|---|---|
| + | 加算 |
| - | 減算 |
| * | 乗算 |
| / | 除算 |
なお、Trinoでは、フィールドタイプがintまたはbigintで、除算の結果に小数を残したい場合は、式の中でまずcast(フィールド as double)を行ってから計算する必要があります。また、四則演算のいずれかの項がnullの場合は最終的な結果もnullになるため、事前に処理してください
上記のOperatorのほかに、次の関数も使用できます
| 関数 | 説明 |
|---|---|
| abs(x) | 絶対値 |
| ceiling(x) | xを切り上げた、最も近い整数を返します |
| floor(x) | xを切り捨てた、最も近い整数を返します |
| approx_distinct(x) | 近似的な重複除外カウント。count(distinct x)との誤差は約4‰です |
詳しくは、Mathematical functions and operatorsを参照してください
条件式
カスタム指標では、条件式を組み合わせて必要な指標の結果を得ることができます
| 関数 | 説明 |
|---|---|
CASE expression WHEN value THEN result [ WHEN ... ] [ ELSE result ] END | 上から順に条件を判定し、最初に条件を満たしたときの結果を返します。どの条件も満たさない場合はelseの結果を返します |
| if(condition, true_value, false_value) | 条件を判定し、真の場合と偽の場合で異なる結果を返せます |
| coalesce(value1, value2[, ...]) | 最初のnullでない値を返します。nullになるのを避けるために使用できます |
詳しくは、Conditional expressionsを参照してください
ウィンドウ関数
構文:関数 OVER (PARTITION BY パーティションフィールド ORDER BY 並べ替えフィールド)
注意:ウィンドウ関数を使用する場合、関係するパーティションフィールドや並べ替えフィールドは、集約関数またはgroup byで使用されているフィールドである必要があります(must be an aggregate expression or appear in GROUP BY clause)
BIダッシュボードでは、選択したディメンションに基づいてgroup byが行われ、順にgroup_0、group_1……という別名が付けられます。パーティションフィールドや並べ替えフィールドには、この名前を使用する必要があります
詳しくは、Window functionsを参照してください
集約関数
すべての集約関数は、OVER句を追加することでウィンドウ関数として使用できます
データが次のとおりだとします
| user | channel | pay_amount |
|---|---|---|
| a | iOS | 648 |
| b | Android | 68 |
| c | Android | 6 |
| d | Android | 128 |
最終的に次の結果を得たいとします
| user | channel | channel内での売上の割合 |
|---|---|---|
| a | iOS | 648 |
| b | Android | 68 / (68 + 6 + 128) |
| c | Android | 6 / (68 + 6 + 128) |
| d | Android | 128 / (68 + 6 + 128) |
userとchannelをディメンションにドラッグし、カスタム指標を1つ作成します
sum("pay_amount")/ sum("pay_amount") over(partition by "group_1")
ランキング関数
| 関数 | 説明 |
|---|---|
| rank() | 値グループ内での値の順位を返します。順位は、その行より前にある、同順位ではない行の数に1を加えた値です |
| dense_rank() | 値グループ内での値の順位を返します |
| row_number() | 各行に一意の連続した番号を返します |
値関数
| 関数 | 説明 |
|---|---|
| first_value(x) | ウィンドウの最初の値を返します |
| last_value(x) | ウィンドウの最後の値を返します |
| nth_value(x, offset) | ウィンドウの先頭からoffsetで指定した位置の値を返します。offsetは1から始まり、任意のスカラー式を指定できます。nullの場合、またはウィンドウのサイズを超える場合はnullを返します |
| lead(x[, offset[, default_value]]) | ウィンドウ内で現在の行からoffset行後の値を返します。offsetには任意のスカラー式を指定でき、デフォルトは1(次の行)です。nullの場合はエラーになり、ウィンドウのサイズを超える場合はdefault_valueを返します。default_valueを指定していない場合はnullを返します |
| lag(x[, offset[, default_value]]) | ウィンドウ内で現在の行からoffset行前の値を返します。offsetには任意のスカラー式を指定でき、デフォルトは1(前の行)です。nullの場合はエラーになり、ウィンドウのサイズを超える場合はdefault_valueを返します。default_valueを指定していない場合はnullを返します |
よくある質問
Q:設定したカスタム指標のデータが表示されないのはなぜですか?
A:式の設定に次のような誤りがないか確認してください
- フィールドは構文規則に従う必要があります。SR構文の場合は``で囲み、Trino構文の場合は""で囲んでください
- 式で生成される指標の結果は数値タイプである必要があります。max(文字列フィールド)などの関数で数値以外の結果になった場合は表示できません
Q:クエリでエラーが発生するのはなぜですか?
A:式の設定に次のような誤りがないか確認してください
- 存在しないフィールドを使用している
- 式が不完全である(括弧が不足しているなど)
- サポートされていない関数を使用している、または集約関数を使わずにフィールドを直接使用している
Q:ディメンションフィールドはカスタマイズできますか?
A:現在は対応していません。ワークシートのSQL文を調整して、新しいディメンションフィールドを追加できます

