はじめに
Beast Modeに関するよくある質問にお答えします。Beast Modeの利用を開始するには、どうすればよいですか?
Beast Modeを使って計算を追加する方法について詳しくは、「 Beast Mode関数リファレンスガイド 」を参照してください。Beast Mode計算を保存しようとすると、「無効なクエリ」エラーが表示されるのはなぜですか?
Beast Modeを設定する際の不適切な手順の結果、無効なクエリエラーが発生してしまう一般的な理由として、以下が挙げられます。-
列名は、バックティックで囲む必要があります:
`column`。バックティックの代わりに単一引用符を使用すると、エラーが発生します。 -
文字列値は、単一引用符で囲む必要があります:
‘text’。 -
CASEステートメントには必ず、
CASE、WHEN、THEN、ENDを含める必要があります。基本的なCASEステートメントは次の例のようになります。CASE WHEN `column1` = ‘good’ THEN ‘Yes’ ELSE ‘No’ENDELSEの部分はオプションです。ここでELSEがない場合、最初の部分と一致しなければ値はNULLになります。
Beast Modeで「AND」演算子を使用できますか?
はい。例えば、CASE関数で以下を実行できます。case when `Name` like 'Ca%' AND `id` < 10 then 0 else 1 end
Beast Modeを使ってカスタムまたは複数のまとめ数字を作成できますか?
はい。詳細および例については、「 Beast Mode計算例 - カスタマイズされたまとめ数字を作成する 」を参照してください。Beast Modeで「値の合計」を行うことはできますか?
はい、可能です。例:Beast Modeを使って数値比較を行うことはできますか?例えば、文字列が数値の範囲内にあるかどうかを判別するCASE文を作成できますか?
いいえ。このため、次のBeast ModeのCASEステートメントは失敗する可能性があります。あるデータタイプを別のデータタイプに変換できる関数はありますか(文字列を数値に変換するなど)?
いいえ。ただし、Workbenchでは、データをアップロードする前に列のデータタイプを設定できます。詳細はこちらを参照してください。複数の列と条件でフィルターをかけるには、どうすればよいですか?
例えば、顧客のアップセルの機会が終了(成功または一時停止)した数を確認する場合、Domoのネイティブフィルターでは、行レベルのフィルターに複数の条件を適用することはできません。複数の非包括的な列と条件にフィルターをかけるには、論理Beast Mode計算を作成できます。 この場合、Beast Modeは以下のようになります。特定の日付でフィルターをかけるには、どうすればよいですか?
例えば、終了した機会の成功した数を棒チャートに日別に表示し、外れ値(10日以内に成功した機会など)をフィルターで除外するとします。この場合、機会の開始から終了までの時間を計算し、10日以内に終了したかどうかに基づいて「Yes」または「No」のカテゴリーに分類するBeast Mode計算を作成し、それを フィルター フィールドで使用します。 作成したBeast Modeに「Opty Closed within 10 Days?」という名前を付けると、以下のようになります。週末を除く2つの日付列の違いを調べるには、どうすればよいですか?
DATEDIFF 関数を使用して、各週から2を減算します。
まとめ数字がカードに表示された値と一致するようにデータにフィルターをかけるには、どうすればよいですか?
例えば、州別に売上を計算する米国のマップカードがあり、まとめ数字には総売上額が表示されるとします。ところが、米国のカードの凡例の総売上額は、まとめ数字の売上額よりも少なくなっています。まとめ数字の売上額の方が多い理由は、まとめ数字では国にかかわらずすべての売上額が算入されるのに対し、カードの凡例は米国内での売上のみが表示されるためです。この場合は、米国以外の売上額を除外するBeast Mode計算を作成する必要があります。 この場合、Beast Modeは以下のようになります。Beast Modeで「全体の割合」機能を使用できますか?
いいえ。ただし、以下の方法によって、合計値の割合を含むデータラベルをチャートに挿入できます。- Analyzerで、 [チャートの設定] を開きます。
- [データラベル設定] で、 [テキスト] フィールドに「
%_PERCENT_OF_TOTAL」と入力します。
フィルターフィールドにBeast Mode計算を入力できないのはなぜですか?
Analyzerのフィルターは、DataSetレベルにおける行レベルのフィルタリングに基づいているため、集計をフィルターしません。これを解決するには、Magic ETLまたはSQL DataFlowツールを使って列をグループ化、集計し、その上でカードとフィルターに使用します。これらのツールに関する詳細は、「 準備 」を参照してください。Beast Modeを使ってローテーション平均計算を作成できますか?
Beast Modeを使ってローテーション平均計算を作成することはできませんが、四半期の平均を表示するカードを作成できます。または、これを計算するDataFlowを作成できます。 Beast Modeでこれができない理由: Beast Mode関数は、カードのデータがどのようにグループ化されるかによって、単一のレコードまたはレコードの集合に対して計算されます。したがって、この計算では他のレコードを参照する方法がありません。例えば、4月の平均を求める場合は、4月より前のレコードに戻ってそれらを合計する計算を作成することができません。 代替方法1:カードに四半期の平均を表示する 以下のステップに従って、カードに四半期の平均を表示します。 カードに四半期の平均を表示するには、- カードの上部で時間粒度を[四半期別]に設定します。 詳細については、「 チャートにフィルターを追加する 」を参照してください。
- 日付と値の列をx軸とy軸にそれぞれ追加します。 詳細については、「 DataSetの列をチャートに適用する 」を参照してください。
- 値の列の集計オプションを [AVG] に設定します。
- サブクエリを使用して過去3ヶ月分の値の合計を取得します。
- その値をその範囲にあるレコード数で割ります。
- このフィールドを[Rolling_Average]フィールドと呼びます。
Beast Modeを使って条件付き加算を作成するには、どうすればよいですか?
CASE ステートメントを使用して計算を作成する場合は、この CASE ステートメントの結果を集計します。多くのユーザーがCASEステートメント内でSUM関数を使用していますが、これは間違いです。
Beast Mode計算を集計してまとめ数字として利用するには、どうすればよいですか?
CASE ステートメントを含むBeast Mode計算をまとめ数字として使用しようとするユーザーが多いようです。しかし、値をまとめ数字として使用するには、その値が 数値 データタイプである必要があります。そのため、計算に CASE ステートメント のみ が含まれている場合、Domoはこれを数値データタイプでなく 文字列 データタイプとして認識します。
一般的なCASEステートメントの計算を、数値データタイプのフィールドに調整する方法は、条件付き加算の場合と同じです。SUM関数やCOUNT関数などの集計関数のステートメント全体を、以下のように「ラップする」だけです。
x軸に月の名前を時系列順に並び替えるには、どうすればよいですか?
例えば、カードのx軸にDomoのデフォルトビューの「年 - 月の省略形」(2015 – Janなど)ではなく、月の完全な名前を表示する場合は、カードに月の名前のフィールドを適用すると、月の順序が狂い、ソートされません。月の名前の列は「文字列」データタイプであるため、時系列順ではなくアルファベット順にソートされます。これを修正するには、各月の名前に数値を割り当て、数値を使ってソートします。 この場合、Beast Modeは以下のようになります。x軸の日付の形式を前年同期比用にフォーマットするには、どうすればよいですか?
例えば、カードで前年同期比を実行するにあたり、どこから始めればいいかわからないとします。x軸には1年ではなく複数年が表示されていて、比較できない場合があります。または、前年同期比系列を適用すると、「データが存在しません」というエラーが表示される可能性があります。 前年同期比を行うには、以下の3つのBeast Mode計算を作成する必要があります。-
x軸に日付の形式を設定し、年を表示せず月のみを表示する「Months」という名前の計算:
DATE_FORMAT(`DateColumn`,'%M') -
値が年別に分かれた系列を作成する「Year over Year」という名前の計算:
YEAR(`DateColumn`) -
x軸で月をソートする「Month Sort」という名前の計算:
MONTH(`DateColumn`)
日付列を「文字列」データタイプから「日付」データタイプに変更するには、どうすればよいですか?
例えば、カードで日付を使用するにあたり、使用する日付列が「文字列」データタイプとして読み込まれるため、列の日付値がソートされず、カード上でもソートできなくなっているとします。以下のように、Beast Mode計算を使用して、日付を含む列のデータタイプを文字列値から日付値に変更できます。STR_TO_DATE(`DateColumn`,’%d/%m/%Y’)
注記: 列で使用する値には、1/1/2016のように必ず日付値のみを使用してください。それ以外の場合は計算が機能しません。
x軸で日付値の形式を設定するには、どうすればよいですか?
例えば、標準のカードの形式ではなく、ある特定の形式で日付を表示する場合を想定します。例えば、カードは現在の月を日別に視覚化しているため、x軸の日付値は年、月、日(2016-01-15など)を示していますが、日付と月の値のみ(01-15)を表示させるとします。 DATE_FORMAT()関数を使って日付値の形式を再設定し、日付値の表示を変更すると、日付と月のみが表示されるようになります。DATE_FORMAT(`DateColumn`,’%d-%m’)
日付の形式の設定は、 [チャートの設定] を使用して行うこともできます。詳細については、「 会社のタイムゾーンを設定する 」を参照してください。
ただし、DataSet間でタイムゾーンが一致しない場合は、Beast Modeを使用する必要があります。
例えば、カードの日付列の日付はEST(東部標準時)に基づいているが、会社はPST(太平洋標準時)に基づいているため、ESTではなくPSTに基づいてデータを表示するとします。切り替え先のタイムゾーンに応じて日付値を加算または減算することで、日付値を別のタイムゾーンに変更できます。時間を加算および減算する関数は、 DATE_ADD() と DATE_SUB() です。例えば、日付値をESTからPSTにするには3時間減算する必要があり、これは以下のようなBeast Mode計算を使って行うことができます。
DATE_SUB(`DateColumn`, interval 3 HOUR)
前年から今年までの変化の割合(%)をBeast Modeを使って計算するには、どうすればよいですか?
このトピックについては、「 Beast Mode計算例 - 前期比チャートを作成する 」を参照してください。NULLまたはゼロで除算するには、どうすればよいですか?
次のCASEステートメントを使用すると、NULLまたはゼロで除算できます。条件付き加算を作成するには、どうすればよいですか?
CASEステートメントを使って計算を作成すると、このCASEステートメントの結果を集計できます。多くのユーザーが、以下のようにCASEステートメント内でSUM関数を使用していますが、これは間違いです。CASE WHEN `Column_1` = 'Value_1’ THEN SUM(`Column_1`) END
この代わりに、SUM関数が正しく実行されるようにステートメント全体を「ラップする」必要があります。
SUM(CASE WHEN `Column_1` = 'Value_1’ THEN SUM(`Column_1`) END)
共有計算を追加しましたが、新しいカードにしか表示されません。既存のカードで使用する方法はありますか?
Beast Mode計算を共有すると、カードを作成するデータソースに格納されます。この共有計算は、同じデータソースで作成された他のカードで使用できます。Beast Modeが保存後に「消えて」しまった場合は、どうすればよいですか?
この問題は、複数のユーザーが同じカードを同時に編集してお互いの変更を上書きした場合によく発生します。Beast ModeがDataSetで共有されている場合は、複数のユーザーがDataSetの別々のカードを編集し、そのBeast Modeに対する変更をお互いに上書きすることでも発生します。 この問題は、 お互いの変更を上書きしないようにユーザー同士で連携するか、他のユーザーが編集をしていない時を見計らって自分が編集をするようにすることで簡単に解決できます 。 この問題は、ドリルパス内のカードにBeast Mode計算を作成しようとした場合にも発生します。ドリルパスカードは実際のカードではないため、ドリルパスで作成されたBeast Mode計算は保存されません。計算が保存されるようにするには、カードの最上位のレイヤーで計算を作成し、 [DataSetで計算を共有] チェックボックスをオンにする必要があります。ドリルパスについて詳しくは、「 チャートにドリルパスを追加する 」を参照してください。列を合計する場合、NULL値はどのように処理すればよいですか?
NULL値を含む列の値を合計する場合は、IFNULL関数を使用してNULL値をゼロに変換する必要があります。 例:IFNULL(`col`,0)
例えば、[カテゴリー]列に[A]、[B]、[C]という値があり、[金額]列に[20]、[10]という値と空白のセル(NULL)があるとします。[金額]列をSUMすると、IFNULL計算によりNULL値が0に変換され、SUMは通常どおりに適用されます。