ブロックリファレンス

BLOCKS Reference

Google Drive

クエリーの結果からスプレッドシートを作成

概要

このブロックは、クエリーの結果からGoogleドライブにスプレッドシートを作成します。

スプレッドシートの作成に成功すると、スプレッドシートへのURLがログへ出力されます。スプレッドシートへは、このURLでアクセスします。

report 注意

このスプレッドシートへアクセスするには、権限が必要です。[Googleドライブのアイテムを共有]ブロックでスプレッドシートを共有し、適切な権限を設定してください(このブロックの拡張設定を使うと作成と同時に共有と権限の設定もできます)。

announcement 重要

セルフサービスプランの場合は、このブロックを使用する前に、Google Sheets APIを有効にしてください。共有機能(【共有相手】プロパティ)を利用する場合は、Google Drive APIも有効にしてください。詳しくは、「基本操作ガイド>ヒント>Google APIを有効にする」を参照してください。

プロパティ

プロパティ名 説明
ブロック名

編集パネルに配置した当該ブロックの表示名が変更できます。

ブロックリストパネル中のブロック名は変更されません。

GCPサービスアカウント このブロックで使用するGCPサービスアカウントを選択します。
フォルダURL

指定したフォルダーにスプレッドシートを作成する場合、このオプションを使用して、そのフォルダーのURLを指定します。

このフォルダーでは、指定されたGCPサービスアカウントでスプレッドシートを作成できるよう、事前に適切な権限を与えておく必要があります。

変数展開の指定が可能]
ファイル名

作成するスプレッドシートのファイル名を指定します。空欄の場合は、自動でファイル名が付けられます。

変数展開の指定が可能]
クエリー

スプレッドシートの入力となるクエリーを指定します。

クエリ接頭辞open_in_new#legacySQL/#standardSQL)を指定すると、[SQL文法]プロパティの指定に関わらず、クエリ接頭辞に指定したSQL文法でクエリーが実行されます。

content_pasteをクリックすると、指定されたクエリーをクリップボードへコピーします。コピーの際、フロー間共通変数は、設定値に置き換わります。フロー間共通変数を置き換えたくない場合は、ウェブブラウザーのコピー機能を利用してください(例:コピーしたい部分を範囲選択して、マウスの右ボタンクリックで表示されるメニューから「コピー」をクリック)。

  • 変数展開の指定が可能
  • %形式の文字列書式の指定が可能

    クエリー内の%形式の文字列書式を有効にする]プロパティのチェックボックスにチェックが付いているときのみ有効です。

    %Yや%mなどの%形式の文字列書式をBigQueryにそのまま渡したい場合は、%の部分を%%としてください。例えば、%Yや%mの場合は、%%Y、%%mとします。BLOCKSにより%%が%へ変換され、%Y、%mがBigQueryに渡ります。

クエリー内の%形式の文字列書式を有効にする

クエリー内の%形式の文字列書式を有効にするかしないかを指定します。

  • チェックボックスオン:クエリー内の%形式の文字列書式が有効
  • チェックボックスオフ:クエリー内の%形式の文字列書式が無効

lightbulb ヒント

クエリー内でFORMAT_TIMESTAMP関数やPARSE_TIMESTAMP関数などのように%を含む「形式設定文字列open_in_new」を使う場合は、%%%に置き換える必要がなくなるため、このチェックをオフにすると便利です。

作成したファイルURLを格納する変数

作成したスプレッドシートへのURLが変数に格納できます。

作成したスプレッドシートへのURLを変数に格納したい場合は、このプロパティに変数を指定します。

ブロックメモ このブロックに関するメモが記載できます。このブロックの処理に影響しません。
ワークシート名

作成するスプレッドシートのシート名を指定します。空欄の場合は、自動でシート名が付けられます。

変数展開の指定が可能][%形式の文字列書式の指定が可能]
開始セル(A1形式)

データを書き出すセルの位置をA1形式で指定します。空欄の場合は、セルA1が指定されたと見なします。

A1:D10のような範囲指定もできます。例えば、B2:D5と指定した場合、セルB2からセルD5までの範囲(下図赤枠の部分)にデータを書き出します。書き込むデータがこの範囲より大きい場合は、エラーとなりこのブロックの処理は失敗します。

ヘッダー行を出力する

ヘッダー行を出力するかしないかを指定します。

  • ヘッダー行を出力する場合は、チェックを付けます。
  • ヘッダー行を出力しない場合は、チェックを外す。
出力するキー

出力データの変数]に格納されたデータの内、ここで指定したキーに対するデータのみを出力します。列の並びはここで指定されたキーの順番になります。

キーは、[]ボタンをクリックして追加します。

共有相手

共有する相手を選択します。

  • [特定のユーザー]:特定のユーザーと共有します。
  • [グループ]:特定のGoogleグループと共有します。
  • [ドメイン]:特定のGoogle Workspaceドメインと共有します。
  • [ウェブ上で一般公開]:誰でもアイテムにアクセスできるようにします。
付与する権限

共有する相手に付与する権限を選択します。

  • [編集]:アイテムの編集ができます。
  • [閲覧(コメント可)]:アイテムの閲覧とコメントができます。
  • [閲覧]:アイテムの閲覧のみができます。
Eメールアドレス

共有相手として[特定のユーザー][グループ]を選択した場合に、メールアドレスを指定します。

メールアドレスは、カンマ(,)区切りで複数のメールアドレスを列挙できます(例:foo@example.jp, bar@example.jp, baz@example.jp)。

  • [特定のユーザー]:ユーザーのメールアドレスを指定します。
  • [グループ]: Googleグループのメールアドレスを指定します。
変数展開の指定が可能][%形式の文字列書式の指定が可能]
ドメイン

共有相手として[ドメイン]を選択した場合に、共有相手のGoogle Workspaceドメインを指定します。

変数展開の指定が可能][%形式の文字列書式の指定が可能]
ファイル検索で検出を許可する

共有する相手として[ドメイン][ウェブ上で一般公開]を選択した場合に、ファイル検索でアイテムの検出を許可するかしないかを指定します。

  • アイテムの検出を許可するときはチェックを付けます。
  • アイテムの検出を許可しないときはチェックを外します。
クエリー文をログへ出力

クエリー文をログへ出力するかどうかの指定です。

ログに出力するクエリー文は、変数が展開されて出力されます。クエリー文をログへ出力する場合は、チェックボックスにチェックを入れてください。

使用例

BigQuery上の毎日の商品別売上データを集計し、その結果をスプレッドシートに出力し、Slackで社内の関係者に通知するフローを作成する例を紹介します。

前提条件

以下のようなBigQueryテーブルがあらかじめ用意されているとします。

  • 注文明細テーブル(order_items)
    スキーマ定義:
    カラム名 モード
    order_id STRING NULLABLE
    order_date DATE NULLABLE
    product_id STRING NULLABLE
    quantity INTEGER NULLABLE
    price FLOAT NULLABLE
    サンプルデータ:
    order_id order_date product_id quantity price
    1001 2024-03-10 A001 2 1000
    1001 2024-03-10 B002 1 2000
    1002 2024-03-10 C003 3 1500
    1002 2024-03-10 A001 2 1000
  • 商品マスタテーブル(products)
    スキーマ定義:
    カラム名 モード
    product_id STRING NULLABLE
    product_name STRING NULLABLE
    category STRING NULLABLE
    サンプルデータ:
    product_id product_name category
    A001 商品A カテゴリX
    B002 商品B カテゴリY
    C003 商品C カテゴリZ

また、以下の準備も必要です。

  • SlackワークスペースのIncoming Webhookの設定
    • Incoming WebhookのURLを取得しておく
    • レポート共有用のSlackチャンネルを決めておく
  • Googleドライブの共有フォルダーの設定
    • レポート出力用の共有フォルダーを作成しておく
    • 共有フォルダーのURLを取得しておく
    • レポートを共有するグループのメールアドレスを取得しておく
フロー
  1. フローの開始」ブロックを配置
    プロパティ名
    開始時間 0 0 */1 * *(毎日深夜0時)
    開始時間を有効にする check_box
  2. クエリーの実行」ブロックを配置
    プロパティ名
    クエリー
    SELECT
      FORMAT_DATE('%Y-%m-%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)) AS target_date
    
    結果を格納する変数 target_date

    lightbulb ヒント

    target_dateには、[{"target_date": "2024-03-09"}]のようにオブジェクトの配列形式でデータが格納されています。

  3. 「クエリーの結果からスプレッドシートを作成」ブロックを配置
    プロパティ名
    フォルダURL https://drive.google.com/drive/folders/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx?usp=drive_link
    ファイル名 ${target_date.0.target_date}の商品別売上レポート
    クエリー
    SELECT
      p.category AS `カテゴリ`,
      p.product_name AS `商品名`,
      SUM(oi.quantity) AS `販売数量`,
      SUM(oi.price * oi.quantity) AS `売上金額`
    FROM example.order_items oi
    JOIN example.products p ON oi.product_id = p.product_id
    WHERE oi.order_date = DATE('${target_date.0.target_date}')
    GROUP BY p.category, p.product_name
    ORDER BY `カテゴリ`, `商品名`
    
    作成したファイルURLを格納する変数 sheet_url
    ヘッダー行を出力する check_box
    共有相手 グループ
    付与する権限 閲覧
    Eメールアドレス xxxxx@example.jp
    lightbulb ヒント

    target_date.0.target_dateは、target_date変数に格納された配列の最初の要素のtarget_dateキーの値を参照します。

    target_date変数には、[{"target_date": "2024-03-09"}]のようなオブジェクトの配列形式でデータが格納されています。

    この変数の"2024-03-09"を参照するには、target_date.0.target_dateのように記述します。

    • target_dateは変数名
    • .0は配列の最初(0番目)の要素を表す
    • .target_dateは、その要素のtarget_dateキーを表す

    詳しくは、「配列とオブジェクト」を参照願います。

  4. Slack通知」ブロックを配置
    プロパティ名
    Webhook URL https://hooks.slack.com/services/xxxxxxxxxxxxxxxxxxxxxx/yyyyyyyyyyyyyyyyyyyyyyyy
    通知メッセージ ${target_date.0.target_date}の商品別売上レポートが完成しました。スプレッドシートのURLはこちら: ${sheet_url}

このフローが毎日深夜に実行されると、以下のような処理が行われます。

  1. 「クエリーの実行」ブロックで、前日の日付をYYYY-MM-DD形式で取得し、target_date変数に格納
  2. 「クエリーの結果からスプレッドシートを作成」ブロックで、target_date変数を使って前日の売上データを集計し、指定のフォルダにスプレッドシートを作成
  3. 作成したスプレッドシートを、指定のグループに閲覧権限で共有
  4. 「Slack通知」ブロックで、target_date変数を使ってレポート完成通知を指定のSlackチャンネルに送信
ポイント
  • 「クエリーの実行」ブロックを活用し、フロー内で動的に日付を取得
  • クエリ結果の変数への格納方法と、その変数の参照方法
  • 「クエリーの結果からスプレッドシートを作成」ブロックによる、データ集計とレポート作成の自動化
  • 作成したスプレッドシートの共有設定による、関係者への自動共有
  • 「Slack通知」ブロックを使った、レポート完成のリアルタイム通知

このように、フローデザイナーを使えば、データ集計からレポート生成、関係者への通知までを一つのフローで自動化できます。

この情報は役に立ちましたか?