データ分析では、カスタム SQL を使用すると、複雑なロジックやモデルを持つデータテーブルを作成できます。また、パラメーターの受け渡しもサポートしているため、より高度で可変的な分析シナリオに対応できます。
前提条件
データを取得済みであること。詳細については、「データソースに接続する」をご参照ください。
制限事項
API データソースはカスタム SQL をサポートしていません。
SQL コードを入力する
次のいずれかの方法でカスタム SQL を追加できます。
カスタム SQL ページに移動します。
方法 1:データソースページの右上隅にある [SQL でデータセットを作成] をクリックします。

エントリ 2: データセット 編集ページで、左パネルのデータソースを選択します。キャンバスにデータテーブルがない場合は、キャンバス上の [SQL コードを使用してデータセットを作成するには、ここをクリックしてください] または左パネルの [SQL コードでテーブルを作成] をクリックします。

SQL コードを入力した後、[実行] をクリックします。

SQL ステートメントの例:
SELECT report_date, order_level, shipping_type, area, price, order_number from company_sales_record where $expr{report_date :report_date} and $expr{order_level :order_level} and $expr{order_number :order_number}実行が成功すると、[実行結果] タブで結果をプレビューできます。

[編集の確認] をクリックして、カスタム SQL ステートメントで作成されたデータセットを保存します。
SQL コードを変更する
次の 3 つの方法のいずれかで SQL コードを修正できます。
対象のテーブルの右側にある
アイコンをクリックします。 
キャンバスで対象のテーブルをクリックします。 下の [テーブルの詳細] セクションで、[コードの編集] をクリックします。

対象のテーブルの右側にある
アイコンをクリックし、[コードの編集] を選択します。
SQL 構文
データセットのカスタム SQL は、主にクエリステートメントをサポートしています。 INSERT、UPDATE、および DELETE 構文は、カスタム SQL ステートメントではサポートされていません。ストアドプロシージャもサポートされていません。
SQL クエリ構文は、使用されているデータソースのデータベース構文に従います。 たとえば、データソースで MySQL を使用している場合、カスタム SQL は MySQL クエリステートメントに従って記述する必要があります。 MongoDB の find() や findone() など、一部の特殊なデータベース構文は Quick BI ではサポートされていません。 カスタム SQL では、SELECT ステートメントを使用してデータをクエリする必要があります。
カスタム SQL にコメントを追加する場合、「--」+ スペース + コメントの形式を使用できます。

SQL ステートメントの例:
SELECT area, -- area price -- price from company_sales_recordカスタム SQL で複数のテーブルを結合する場合、テーブルエイリアスとフィールドエイリアスの使用に注意する必要があります。エイリアスの記述構文はデータベースによって異なる場合があります。
データセットのカスタム SQL の行数に制限はありませんが、カスタム SQL の文字数は 65,536 文字を超えることはできません。 必要に応じて、カスタム SQL ロジックを分割して最適化するか、複数のデータセットを個別に作成してから結合クエリを実行できます。
データセット SQL はデータベースで実行され、結果データは Quick BI に返されます。 クエリの待機時間は 5 分です。 5 分経過してもデータが返されない場合は、タイムアウトエラーが発生します。
5 分の制限前にクエリタイムアウトエラーが発生した場合、一般的な原因としては、SLB などのユーザー側のネットワークデバイスのタイムアウト設定、またはクエリインターフェイスリクエストがインターセプトされる原因となるファイアウォールネットワークブロッキングポリシーが挙げられます。
プレースホルダー
Quick BI では、プレースホルダーを使用してパラメーターを渡すことができます。この機能により、クエリ コントロールを介してプレースホルダーの値を SQL に渡すことで、レポートの表示およびデータ分析中に柔軟なデータ分析が可能になります。 Quick BI は、値プレースホルダーと式プレースホルダーの両方をサポートしており、必要に応じて構成できます。
種類 | 説明 | シナリオ | 形式 |
値プレースホルダー | ダッシュボードのクエリ コントロールを介して、1 つの値または値のセットを渡すことができます。 説明 プレースホルダーが日付値を示す場合は、入力値の形式を決定するために日付形式を指定する必要があります。 | パラメーターを渡す必要があるほとんどのシナリオに適用できます。 |
|
式プレースホルダー | ダッシュボードのクエリ コントロールを介して条件を渡すことができます。 | ユーザーがダッシュボードのフィルター条件でフィルター方法を自由に修正できる場合は、式プレースホルダーを使用してフィルター条件全体を SQL に渡す必要があります。 たとえば、次のダッシュボードでは、ユーザーは |
|
構成方法
ビジネス要件を満たし、プレースホルダーを組み込んだ SQL を作成します。
SQL コード編集ページで、[プレースホルダー管理] をクリックします。

[プレースホルダー管理] パネルで、図のようにプレースホルダーを構成し、[OK] をクリックします。

構成項目については、「データセットを作成する」をご参照ください。
説明select ステートメントの後でプレースホルダーを使用する場合は、グローバルに有効なデフォルト値を割り当てる必要があります。
たとえば、データセットを作成するときに、select ステートメントの後にプレースホルダー「profit_range」を次のように含めます。
SELECT report_date, order_level, shipping_type,price,order_number,area, case when profit_amt< ${profit_range} then'Loss' when profit_amt> ${profit_range} then'Profitable' else 'Flat' end 'order_level' from company_sales_record where $expr{report_date :report_date} and $expr{order_level :order_level} and $expr{order_number :order_number}デフォルト値がないと、コードは正しく実行されません。

プレースホルダー管理で、「profit_range」のクエリのデフォルト値を設定します。

デフォルト値を設定すると、コードは次のように正しく実行されます。

[保存] をクリックして、データセットを保存します。

トップメニューバーで、
アイコンをクリックするか、
アイコンをクリックして [ダッシュボードの作成] を選択します。
ダッシュボード編集ページで、クエリ条件を追加し、プレースホルダーをバインドします。
たとえば、クエリ条件を設定するには、ドロップダウン単一選択を使用して [地域] をフィルター処理し、SQL プレースホルダーをバインドして、1 つの値を渡します。

テキストフィルターを使用して [注文番号] をフィルター処理し、SQL パラメーターをバインドして、条件を渡します。

ダッシュボードがクエリされると、クエリ条件に基づいて、指定されたコンテンツが値プレースホルダーと式プレースホルダーに送信されます。
たとえば、ダッシュボードのクエリ条件を以下に示します。

対応する SQL は次のとおりです。
SELECT * FROM company_sales_record WHERE area = 'North' AND order_number > 100プレースホルダーの使用例を以下に示します。
SELECT * FROM tablename WHERE area in ('$val{area_ph}') -- テキスト型、複数選択 AND name = '$val{name_ph}' -- テキスト型、単一選択 AND number = $val{number_ph} -- 数値型 AND report_date > '$val{report_date_ph.get(0)}' -- 日付型、日付範囲コントロールの開始日を取得 AND report_date < '$val{report_date_ph.get(1)}' -- 日付型、日付範囲コントロールの終了日を取得
プレースホルダーが適用されるシナリオについては、「プレースホルダー」をご参照ください。
従来の記述との互換性:
値プレースホルダーの従来の記述 (元のプレースホルダー): ${placeholder_name}
式プレースホルダーの従来の記述 (元のパラメーター): ${physical_field_name:parameter_name}
