メインコンテンツまでスキップ
waffle.svg
Domo Knowledge Base

Beast Modeに関するよくある質問

Version 5

 

はじめに

Beast Modeに関するよくある質問にお答えします。

Beast Modeの利用を開始するには、どうすればよいですか?

Beast Modeを使って計算を追加する方法の詳細については、「Beast Mode計算をチャートに追加する」を参照してください。すべての関数をカテゴリー別にリスト化した包括的なリファレンスガイドについては、「Beast Mode関数リファレンスガイド」を参照してください。

Beast Mode計算を保存しようとすると、「無効なクエリ」エラーが表示されるのはなぜですか?

Beast Modeを設定する際の不適切な手順の結果、無効なクエリエラーが発生してしまう一般的な理由として、以下が挙げられます。

  • 列名は、バックティックで囲む必要があります:`column`。バックティックの代わりに単一引用符を使用すると、エラーが発生します。

  • 文字列値は、単一引用符で囲む必要があります:‘text’

  • CASEステートメントには、CASEWHENTHENENDを含める必要があります。基本的なCASEステートメントは次の例のようになります。

    CASE WHEN `column1` = ‘good’ THEN ‘Yes’ ELSE ‘No’ END

    ELSEの部分はオプションです。ここでELSEがない場合、最初の部分と一致しなければ値はNULLになります。

Beast Modeで関数を正しく使用する方法については、Beast Mode 関数リファレンスガイド」の記事を参照してください。

Beast Modeで「AND」演算子を使用できますか?

はい。たとえば、CASE関数で以下を実行できます。

case when `Name` like 'Ca%' AND `id` < 10 then 0 else 1 end

Beast Modeを使ってカスタムまたは複数のサマリーナンバーを作成できますか?

はい。詳細および例については、「Beast Mode計算例 - カスタマイズされたサマリーナンバーを作成する」を参照してください。

Beast Modeで「値の合計」を行うことはできますか?

はい、可能です。例:

CASE WHEN `Status` in ('New Sales','Renewed') THEN SUM(`Revenue`)

ELSE 0

END

ただし、SUMは列内ではなくセル内で実行されるため、必要な合計値を取得できない可能性があります。これがうまく機能しない場合は、Beast Modeではなくサマリーナンバーを使用することを検討してください。

Beast Modeを使って数値比較を行うことはできますか?たとえば、文字列が数値の範囲内にあるかどうかを判別するCASE文を作成できますか?

いいえ。そのため、次のBeast ModeのCASEステートメントは失敗する可能性があります。

case when

postcode > 0 then 1

else 0

end

複数の列と条件でフィルターをかけるには、どうすればよいですか?

たとえば、顧客のアップセルの機会が終了(成功または一時停止)した数を確認する場合、Domoのネイティブフィルターでは、行レベルのフィルターに複数の条件を適用することはできません。複数の非包括的な列と条件にフィルターをかけるには、論理Beast Mode計算を作成できます。  

この場合、Beast Modeは以下のようになります。

CASE

WHEN `opportunity_type` = ‘upsell’ AND `opportunity_won` = ‘true’ THEN ‘Yes’

WHEN `opportunity_type` = ‘upsell’ AND `opportunity_paused` = ‘true’ THEN ‘Yes’

ELSE ‘No’

END

特定の日付でフィルターをかけるには、どうすればよいですか?

たとえば、終了した機会の成功した数を棒チャートに日別に表示し、外れ値(10日以内に成功した機会など)をフィルターで除外するとします。この場合、機会の開始から終了までの時間を計算し、10日以内に終了したかどうかに基づいて「Yes」または「No」のカテゴリーに分類するBeast Mode計算を作成し、それをフィルターフィールドで使用します。

作成したBeast Modeに「Opty Closed within 10 Days?」という名前を付けると、以下のようになります。

CASE

WHEN DATEDIFF(`Opportunity_Closed_Date`,`Opportunity_Open_Date`) <= 10 THEN ‘Yes’

WHEN DATEDIFF(`Opportunity_Closed_Date`,`Opportunity_Open_Date`) > 10 THEN ‘No’

ELSE ‘Outlier’

END

週末を除く2つの日付列の違いを調べるには、どうすればよいですか?

DATEDIFF関数を使用して、各週から2を減算します。

サマリーナンバーがカードに表示された値と一致するようにデータにフィルターをかけるには、どうすればよいですか?

たとえば、州別に売上を計算する米国のマップカードがあり、サマリーナンバーには総売上額が表示されるとします。ところが、米国のカードの凡例の総売上額は、サマリーナンバーの売上額よりも少なくなっています。サマリーナンバーの売上額の方が多い理由は、サマリーナンバーでは国にかかわらずすべての売上額が算入されるのに対し、カードの凡例は米国内での売上のみが表示されるためです。この場合は、米国以外の売上額を除外するBeast Mode計算を作成する必要があります。

この場合、Beast Modeは以下のようになります。

CASE

WHEN `Country` = ‘United States’ THEN ‘Yes’

ELSE ‘No’

END

サマリーナンバーに関する詳細は、「チャートのサマリーナンバーを設定する」を参照してください。

Beast Modeで「全体の割合」機能を使用できますか?

いいえ。ただし、以下の方法によって、合計値の割合を含むデータラベルをチャートに挿入できます。

  1. Analyzerで、[チャートの設定] を開きます。

  2. [データラベル設定]で、[テキスト] フィールドに「%_PERCENT_OF_TOTAL」と入力します。

フィルターフィールドにBeast Mode計算を入力できないのはなぜですか?

Analyzerのフィルターは、DataSetレベルにおける行レベルのフィルタリングに基づいているため、集計をフィルターしません。これを解決するには、Magic ETLまたはSQL DataFlowツールを使って列をグループ化、集計し、その上でカードとフィルターに使用します。これらのツールに関する詳細は、「準備」を参照してください。

Beast Modeを使ってローテーション平均計算を作成できますか?

Beast Modeを使ってローテーション平均計算を作成することはできませんが、四半期の平均を表示するカードを作成できます。または、これを計算するDataFlowを作成できます。 

Beast Modeでこれができない理由:

Beast Mode関数は、カードのデータがどのようにグループ化されるかによって、単一のレコードまたはレコードの集合に対して計算されます。そのため、この計算では他のレコードを参照する方法がありません。たとえば、4月の平均を求める場合は、4月より前のレコードに戻ってそれらを合計する計算を作成することはできません。

代替方法1:カードに四半期の平均を表示する

以下のステップに従って、カードに四半期の平均を表示します。 

カードに四半期の平均を表示するには

  1. カードの上部で時間粒度を [四半期別] に設定します。
    詳細については、「チャートにフィルターを追加する」を参照してください。

  2. 日付と値の列をx軸とy軸にそれぞれ追加します。
    詳細については、「DataSet列をチャートに適用する」を参照してください。

  3. 値の列の集計オプションを [AVG] に設定します。

代替方法2:DataFlow計算を作成する

この計算はDataFlowで作成できます。変換は以下のようになります。

SELECT

  `DateField`

  ,`ValueField`

  ,(SELECT

      SUM(`ValueField`) / COUNT(*) 

    FROM

      TABLE t2

    WHERE

      t2.`DateField` > LAST_DAY(DATE_SUB(t1.`DateField`, INTERVAL 3 MONTH))

      AND t2.`DateField` < LAST_DAY(t1.`DateField`) ) AS `Rolling_Average`

    FROM

      TABLE t1

この変換では、日付フィールドに月を表す日付が含まれていることを想定しています(1月の場合は「2015-01-01」など)。

上の計算では、以下が行われます。

  1. サブクエリを使用して過去3か月分の値の合計を取得します。

  2. その値をその範囲にあるレコード数で割ります。

  3. このフィールドを [Rolling_Average] フィールドと呼びます。

また、[DateField] と [ValueField] のフィールド名を変更し(その結果作成されるDataSetで使用する名前を追加し)、「TABLE」を入力に使用するDataSet表で置き換える必要があります。

DataFlowに関する詳細は、「準備」を参照してください。

Beast Modeを使って条件付き加算を作成するには、どうすればよいですか?

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計算を集計してサマリーナンバーとして利用するには、どうすればよいですか?

CASEステートメントを含むBeast Mode計算をサマリーナンバーとして使用しようとするユーザーが多いようです。しかし、値をサマリーナンバーとして使用するには、その値は数値データタイプである必要があります。そのため、計算にCASEステートメントのみが含まれている場合、Domoはこれを数値データタイプでなく文字列データタイプとして認識します。

一般的なCASEステートメントの計算を、数値データタイプのフィールドに調整する方法は、条件付き加算の場合と同じです。SUM関数やCOUNT関数などの集計関数のステートメント全体を、以下のように「ラップする」だけです。

SUM(CASE

WHEN `Column_1` = 'Value_1’

THEN SUM(`Column_1`)

END)

サマリーナンバーに関する詳細は、「チャートのサマリーナンバーを設定する」を参照してください。

Beast Modeを使って既存の列を集計するには、どうすればよいですか?

データの列を集計する唯一の方法は、Beast Mode計算を使うことだと思われがちです。より良い方法は、DomoのAnalyzer内のツールを使用して、x軸、y軸、またはその一連のカードの値の集計を作成することです。詳細については、「データを集計する」を参照してください。

x軸に月の名前を時系列順に並び替えるには、どうすればよいですか?

たとえば、カードのx軸にDomoのデフォルトビューの「年 - 月の省略形」(2015 – Janなど)ではなく、月の完全な名前を表示する場合は、カードに月の名前のフィールドを適用すると、月の順序が狂い、ソートされません。月の名前の列は「文字列」データタイプであるため、時系列順ではなくアルファベット順にソートされます。これを修正するには、各月の名前に数値を割り当て、数値を使ってソートします。

この場合、Beast Modeは以下のようになります。

CASE

WHEN `MonthName` = ‘January’ THEN 1

WHEN `MonthName` = ‘February’ THEN 2

WHEN `MonthName` = ‘March’ THEN 3

WHEN `MonthName` = ‘April’ THEN 4

WHEN `MonthName` = ‘May’ THEN 5

WHEN `MonthName` = ‘June’ THEN 6

WHEN `MonthName` = ‘July’ THEN 7

WHEN `MonthName` = ‘August’ THEN 8

WHEN `MonthName` = ‘September’ THEN 9

WHEN `MonthName` = ‘October’ THEN 10

WHEN `MonthName` = ‘November’ THEN 11

WHEN `MonthName` = ‘December’ THEN 12

END

チャートのデータをソートする方法に関する詳細は、「チャートのデータをソートする」を参照してください。

x軸の日付の形式を前年同期比用にフォーマットするには、どうすればよいですか?

たとえば、カードで前年同期比を実行するにあたり、どこから始めればいいかわからないとします。x軸には1年ではなく複数年が表示されていて、比較できない場合があります。または、前年同期比系列を適用すると、「データが存在しません」というエラーが表示される可能性があります。

前年同期比を行うには、以下の3つのBeast Mode計算を作成する必要があります。

  1. x軸に日付の形式を設定し、年を表示せず月のみを表示する「Months」という名前の計算:

    DATE_FORMAT(`DateColumn`,'%M')
  2. 値が年別に分かれた系列を作成する「Year over Year」という名前の計算:

    YEAR(`DateColumn`)
  1. 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計算例 - 前年から今年までの変化の割合を計算する」を参照してください。

Beast Modeを使って前期比チャートを作成するには、どうすればよいですか?

このトピックについては、「Beast Mode計算例 - 前期比チャートを作成する」を参照してください。

NULLまたはゼロで除算するには、どうすればよいですか?

次のCASEステートメントを使用すると、NULLまたはゼロで除算できます。

CASE

WHEN iFNULL(`value2`,0) = 0 THEN 0

ELSE `value1` / `value2`

END

条件付き加算を作成するには、どうすればよいですか?

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は通常どおりに適用されます。

Beast Mode計算でローカルファイルのURLへのリンクを使用できますか?

現時点ではできません。

カードからBeast Mode計算を削除できないのはなぜですか?

DataSetでBeast Mode計算を共有すると、複数のカードで使用できます。これらのカード(フィルター、系列、ソート、日付列など)のいずれかで計算が使用されている場合、その計算がどのカードでも使用されなくなるまで削除できません。その計算を削除しようとすると、その計算を使用しているすべてのカードをリストにしたエラーメッセージが表示されます。また、使用されていることを把握できていない計算が隠れている可能性があるため、各カードのドリルパスをチェックする必要があります。