Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Looker Studio×BigQuery×スプレッドシートで爆速プロトタイピングする方法!
Search
CUEBiC Inc.
April 25, 2025
Technology
370
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Looker Studio×BigQuery×スプレッドシートで爆速プロトタイピングする方法!
CUEBiC Inc.
April 25, 2025
More Decks by CUEBiC Inc.
See All by CUEBiC Inc.
BigQueryのメタデータ管理を、スクラッチで やったはなし
cuebic9bic
2
170
BigQueryのTVFを型駆動で自動生成する世界
cuebic9bic
0
240
AIに頼りすぎない新人育成術
cuebic9bic
3
840
反脆弱性(アンチフラジャイル)とデータ基盤構築
cuebic9bic
3
550
Tableau API連携の罠!?脱スプシを夢見たはずが、逆に依存を深めた話
cuebic9bic
3
370
今だから言えるセキュリティLT_Wordpress5.7.2未満を一斉アップデートせよ
cuebic9bic
2
1.1k
BigQuery Remote FunctionでLooker Studioをインタラクティブ化
cuebic9bic
4
730
構造化すれば怖くない 画像検索から始める木を見て森に入る勉強法
cuebic9bic
2
540
〜可視化からアクセス制御まで〜 BigQuery×Looker Studioで コスト管理とデータソース認証制御する方法
cuebic9bic
3
480
Other Decks in Technology
See All in Technology
データ活用研修 問いの発見と仮説構築【MIXI 26新卒技術研修】
mixi_engineers
PRO
1
720
運用を犠牲にせずコストを制御し事業成長を支える B2B SaaS ID管理基盤におけるS3 Tableのログストレージ活用
kaminashi
1
130
オートマトンと字句解析でRoslynを読む
tomokusaba
0
130
A Bag-of-Documents Model for Query Specificity
dtunkelang
0
180
PLaMo 3.0 Primeの事後学習
pfn
PRO
0
230
AIがコードを書く時代、人間は何を保証するのか———馬場さんと考える、開発者に求められる新しい責任と価値 - TECH PLAY
netmarkjp
0
950
toio・myCobotでフィジカルAIっぽいことを行うための検討(とりあえず調査) / フィジカルAI LT(IoTLTによる開催)
you
PRO
0
180
新しい SLO が良い感じにハマっている話
z63d
4
1.7k
Data Hubグループ 紹介資料
sansan33
PRO
0
3.1k
AIQAのナレッジ構築について
qatonchan
1
140
Claude Code並行開発環境の ムダ‧ムラ‧ムリを見直した話
muranakaaa
0
380
もう一度考える SRE チームの作り方・育て方 / Rethinking SRE #1: Building and Growing SRE Teams
rrreeeyyy
3
330
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
420
The Invisible Side of Design
smashingmag
301
52k
Deep Space Network (abreviated)
tonyrice
0
240
Paper Plane (Part 1)
katiecoart
PRO
1
9.9k
Building an army of robots
kneath
306
46k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
550
Bash Introduction
62gerente
615
220k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.7k
The SEO identity crisis: Don't let AI make you average
varn
0
520
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
450
Transcript
〜初級から魔改造まで〜 Looker Studio×BigQuery×スプレッドシート で爆速プロトタイピングする方法! 株式会社キュービック テクノロジーエキスパートセンター Tech Lead/データエンジニア 尾﨑勇太 2025.04.18
開示範囲:公開ドキュメント 1
自己紹介 2 株式会社キュービック 役割:Tech Lead/データエンジニア 名前: 尾﨑 勇太(おざき ゆうた) 覚え方:尾崎豊(おざきゆたか)と一字違い
業務領域 「データに関わる全て」
わたくしごとですが Tableau DATA Saber始めました 3 2025年4月1日からTry中🔥
LT内容 4 1.初級編:スプレッドシートで爆速プロトタイプ作成 2.中級編:カスタムクエリで独自データソース作成 3.上級編:クエリストリングでURLパラメータを渡してフィルタ 4.鬼編:UDFにパラメータを渡して動的に集計する
最軽量のデータ連携 5 アーキテクチャ データ収集 データ可視化 軽量データであればデータ出しの段階でDWHにデータ蓄積しなくともアウトプットイメージや 分析軸の合意形成ができる データ蓄積
6 これで済んだらデータエンジニ アはいらねぇんだよな
幾多のSpread Sheet使いを挫折させてきた 7 ・何か妖精さんが毎日データをとってきてくれる ▷節子それ自動化やなくて手動や ・1000万セルの限界 ・表示まで5分以上かかるページ ・再読み込みしたら壊れるグラフ ・データ統合でしか結合できない ・計算フィールドの条件分岐に上限がある
LT内容 8 1.初級編:スプレッドシートで爆速プロトタイプ作成 2.中級編:カスタムクエリで独自データソース作成 3.上級編:クエリストリングでURLパラメータを渡してフィルタ 4.鬼編:UDFにパラメータを渡して動的に集計する
サーバレス化によるデータ連携 9 アーキテクチャ データ収集 データ可視化 GCPのサーバレスアーキテクチャなどでBigQueryへのデータ蓄積部分は自動化しつつ Looker Studioからカスタムクエリで独自データソースを作成することで生産性を向上 データ蓄積 BigQuery
Cloud Run functions Cloud Scheduler
10 ちゃんとBQ蓄積できると理想 系だけど、BIツールでETLせざ る得ないパターンもあるよね
どこでデータ加工するのが正解なのか? 11 新規でデータ蓄積が 必要か? SQLで 加工可能か? YES YES NO BI上で動的な変更が
あるか? GAS YES NO Dataform カスタムSQL YES 冗長な収集が必要か? (アカウント違いなど) スケジュール実行が 必要か? NO NO Google Colaboratory BigQueryの既存デー タを加工するか? サービスアカウント 認証は必要か? NO NO Cloud Run functions Workflows NO YES BigQuery YES
ここで差がつく データエンジニアリング 12
具体的なケースを考える 13 1.時系列の売上データを10%〜◯%まで増加を見れるようにしたい 2.最新のマスタで前日までの最新データが見たい
14 BigQuery 集計値をテーブルにカラム追加 ▷仮で200%まで用意しておいて、後から考えよう 要望1:時系列の売上データを10%〜◯%まで増加を見れるようにしたい 集計パターンをそれぞれローデータとして蓄積 ▷5%刻みでテーブルを用意しよう 間違いではないが非合理的なソリューション例
15 BigQuery Looker Studioの計算フィールドで動的に集計 ▷取得した売上データ×パラメータで計算フィールドを作成 要望1:時系列の売上データを10%〜◯%まで増加を見れるようにしたい カスタムクエリ中で、パラメータで動的にフィルタ ▷データソース生成時に再集計をかける シンプルなソリューション例 一工夫したソリューション例
16 要望2:最新のマスタで前日までの最新データが見たい 間違いではないが非合理的なソリューション例 BigQuery 常に◯年分のデータを最新のマスタで洗い替え ▷めちゃくちゃ重い・・・ マスタ更新があった際に、過去まで遡求して更新 ▷過去のマスタが書き変わってもしょうがないよね ▷本当に???
17 要望2:最新のマスタで前日までの最新データが見たい シンプルなソリューション例 BigQuery 前日から1ヶ月間のデータを最新のマスタで洗い替え ▷ユーザー/運用者が見たいスコープを絞り、品質を担保する 品質が担保される期間を前提にモニタリングする ▷中長期のデータが参照したい場合と分析軸を分ける
どこでデータ加工するのが最適 なのかはもう一度考えよう 18
LT内容 19 1.初級編:スプレッドシートで爆速プロトタイプ作成 2.中級編:カスタムクエリで独自データソース作成 3.上級編:クエリストリングでURLパラメータを渡してフィルタ 4.鬼編:UDFにパラメータを渡して動的に集計する
Looker Studioを仮想的にAPI化 20 アーキテクチャ ページ内表示 パラメータをクエリストリングで連携することで、Looker Studioのカスタムクエリの集計条件 を描画前に調整し、ユーザーがみたい閾値で可視化が可能 BigQuery ページ参照
https://lookerstudio.google.com/u/0/reporting/54f a38e1-b459-4606-9a20-d86359802901/page/p_mnpnn34y nd?params={"ds76.roas_times_param":"0.5"} 表示要素演算 ユーザー フィルタ結果
イメージ 21 https://lookerstudio.google.com/u/0/r eporting/54fa38e1-b459-4606-9a20-d863 59802901/page/p_mnpnn34ynd?params={"d s76.roas_times_param":"0.5"} SELECT campaign_id, campaign_name, ad_group_id,
ad_group_name, impressions, clicks, cost, revenue, revenue / NULLIF(cost, 0) AS roas FROM your_dataset.your_table WHERE revenue / NULLIF(cost, 0) >= @roas_times_param ORDER BY roas DESC ROASはデフォルト値 クエリストリングでデ フォルト値を更新 データソースを再集計
22 動きを見ながらユーザーとアウ トプットを爆速で詰められそう
23 まだだ、まだ足りない SQLの限界に挑戦したい
LT内容 24 1.初級編:スプレッドシートで爆速プロトタイプ作成 2.中級編:カスタムクエリで独自データソース作成 3.上級編:クエリストリングでURLパラメータを渡してフィルタ 4.👹鬼編:UDFにパラメータを渡して動的に集計する🔥
SQLで複雑な処理をUDFでjavascriptで書いてしまう 25 アーキテクチャ ページ内表示 計算フィールドやカスタムクエリ内でのメンテナンス性を考慮し、集計や分岐条件のコアロ ジックをUDFに切り出しつつ、結果のみを動的に可視化できるようにする BigQuery ページ参照 https://lookerstudio.google.com/u/0/reporting/54fa38e1-b4 59-4606-9a20-d86359802901/page/p_mnpnn34ynd?params
={"ds76.roas_times_param":"0.5"} 表示要素演算 ユーザー フィルタ結果 UDF(ユーザー定義関数の呼び出し)
イメージ 26 CREATE OR REPLACE FUNCTION `your-project.your_dataset.label_roas` (roas_time s_param FLOAT64,
roas FLOAT64) RETURNS STRING LANGUAGE js AS R""" if (roas < roas_times_param ) { return `ROAS < ${Math.round( roas_times_param * 100)}%`; } else if (roas >= roas_times_param ) { return `ROAS ≧ ${Math.round( roas_times_param * 100)}%`; } else { return '不明'; } """; ルーティーンのクエリ BigQuery カスタムクエリ パラメータ閾値更新 SELECT campaign_id, campaign_name, ad_group_id, ad_group_name, impressions, clicks, cost, revenue, revenue / NULLIF(cost, 0) AS roas, `your-project.your_dataset.label_roas`( @roas_ times_param, revenue / NULLIF(cost, 0)) AS roas_label FROM your_dataset.your_table ORDER BY roas DESC
まとめ 27 今回は初級から鬼編までさまざまなアプローチを紹介しました。 本格的な運用やメタデータ管理の観点でよりbetterな方法論はたくさんあると思い ます。だけれども、そこに至るまでの課題が多いのが業界あるあるですよね。。。 常に考えたいこと:最小工数で成果を出す方法はないのか? そのための、「プロトタイプ開発でQuick Winする方法」を 今回はご紹介しました。
28
データマート TROCCOがあればそんなにやり込まなくても良い説 29 BigQuery データ収集はノーコードでOK DWH連携だって朝飯前 頑張れば動的な変更も可能 BigQuery 整形もTROCCOのUI上で完結
30 ご清聴、ありがとうございました