BI
2025/04/08
彩未翔 増本

【LookerStudio×GAS×スプレッドシート】計算フィールド不要!Looker Studioの表示の遅さを軽減

Looker Studioの表示速度を改善!GoogleスプレッドシートとGASを活用し、計算フィールドなしでデータを可視化する方法を詳しく画像を用いて解説します。

Looker Studioの計算フィールドが遅くなる原因

Looker Studio(旧Googleデータポータル)は、手軽にデータを可視化できる便利なツールですが、計算フィールドを多用するとパフォーマンスが低下することがあります。特に、大量のデータを扱う場合や複雑な計算を行う場合、レポートの表示に時間がかかることが問題になります。


また、難しいタスクでLookerStudioを使用している人は感じたことがあるかもしれませんが計算フィールドではできることできないことの限界があります。


では、どのようにすればLooker Studioの表示を速く確実にできるのでしょうか?答えは、スプレッドシート側で事前に計算を済ませておくことです。


スプレッドシートで事前に計算を済ませるメリット

Looker Studioの計算フィールドを使わずに、スプレッドシートで事前に計算しておくことで、次のようなメリットがあります。


表示速度の向上:計算を事前に完了させることで、Looker Studioの負担を軽減し、レポート表示を高速化できます。


Looker Studioの処理負荷削減:計算済みのデータをそのまま取得できるため、Looker Studioの内部処理がシンプルになります。


GAS(Google Apps Script)を使えばより柔軟な処理が可能:関数では対応できない複雑な処理もGASを使うことで実装できます。


では、具体的にGASを使ってスプレッドシートのデータを処理し、それをLooker Studioに取り込む方法を見ていきましょう。


GASでスプレッドシートのデータを処理するスクリプトの作成

1️⃣ 手順①:スプレッドシートを準備


まず、Googleスプレッドシートを用意し、データを記録します。例えば、以下のような売上データがあるとします。



また、売上データの他にGASのスクリプトを回した後の集計データのシートを作成します。



2️⃣手順②:GASスクリプトを作成



  1. Googleスプレッドシートを開き、拡張機能 > Apps Script をクリック




  2. スクリプトを書く(JavaScript)

    以下のスクリプトは月ごとの売上、購入回数、購入単価を計算します。 またLookerStudioでは実装が難しい「前年同月」データや、計算フィールドでできるような年度の計算(2024年2月は2023年度)や経過月(例えば10月だったら4月から7ヶ月目)など、LookerStudioで必要なディメンションやメジャーを全て作成してしまいます。


    function aggregateSalesData() {
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    const sourceSheet = ss.getSheetByName('元データ'); // データを取るシート
    const targetSheet = ss.getSheetByName('集計データ'); // 出力先シート

    const data = sourceSheet.getDataRange().getValues();
    const headers = [
    "年月", "売上", "購入回数", "購入単価", "前年同月売上", "前年同月購入回数", "前年同月購入単価",
    "年", "月", "年度", "経過月"
    ];

    const aggregatedData = {};
    const fiscalYearSummary = {};
    const outputData = [headers];

    // データ集計
    for (let i = 1; i < data.length; i++) {
    const [orderDate, , , , orderCode, , , , sales] = data[i]; // 正しいカラムの順番で取得
    if (!orderDate || !sales || isNaN(sales)) continue; // 売上がNaNならスキップ

    const date = new Date(orderDate);
    const year = date.getFullYear();
    const month = date.getMonth() + 1;
    const yearMonth = `${year}-${String(month).padStart(2, '0')}`;
    const fiscalYear = (month >= 4) ? year : year - 1;

    if (!aggregatedData[yearMonth]) {
    aggregatedData[yearMonth] = { sales: 0, uniqueOrders: new Set(), year, month, fiscalYear };
    }
    if (!fiscalYearSummary[fiscalYear]) {
    fiscalYearSummary[fiscalYear] = { salesByMonth: {}, uniqueOrdersByMonth: {} };
    }

    aggregatedData[yearMonth].sales += sales;
    aggregatedData[yearMonth].uniqueOrders.add(orderCode);

    if (!fiscalYearSummary[fiscalYear].salesByMonth[month]) {
    fiscalYearSummary[fiscalYear].salesByMonth[month] = 0;
    fiscalYearSummary[fiscalYear].uniqueOrdersByMonth[month] = new Set();
    }

    fiscalYearSummary[fiscalYear].salesByMonth[month] += sales;
    fiscalYearSummary[fiscalYear].uniqueOrdersByMonth[month].add(orderCode);
    }

    // 出力データの生成
    for (const yearMonth in aggregatedData) {
    const entry = aggregatedData[yearMonth];
    const purchaseCount = entry.uniqueOrders.size;
    const averageUnitPrice = purchaseCount > 0 ? Math.floor(entry.sales / purchaseCount) : 0;

    const lastYearMonth = `${entry.year - 1}-${String(entry.month).padStart(2, '0')}`;
    const lastYearEntry = aggregatedData[lastYearMonth] || { sales: 0, uniqueOrders: new Set() };
    const lastYearSales = lastYearEntry.sales;
    const lastYearPurchaseCount = lastYearEntry.uniqueOrders.size;
    const lastYearAverageUnitPrice = lastYearPurchaseCount > 0 ? Math.floor(lastYearSales / lastYearPurchaseCount) : 0;

    const elapsedMonth = entry.month >= 4 ? entry.month - 3 : entry.month + 9;

    outputData.push([
    yearMonth, // 年月
    entry.sales, // 売上
    purchaseCount, // 購入回数
    averageUnitPrice, // 購入単価
    lastYearSales, // 前年同月売上
    lastYearPurchaseCount, // 前年同月購入回数
    lastYearAverageUnitPrice,// 前年同月購入単価
    entry.year, // 年
    entry.month, // 月
    entry.fiscalYear, // 年度
    elapsedMonth // 経過月
    ]);
    }

    // データの書き込み
    targetSheet.clear();
    targetSheet.getRange(1, 1, outputData.length, outputData[0].length).setValues(outputData);
    }



  3. aggregateSales() を実行すると、「集計結果」シートに日別売上合計が表示される



    以下のように「集計データ」シートに集計されます。



Looker Studioでデータを可視化する

スプレッドシートをLooker Studioに接続



  1. 「集計データ」シートを選択した状態で、「拡張機能」からLookerStudioのレポートを作成する


  2. 作成すると以下のようなスプレッドシートができる。先ほど計算して集計されたカラムは、そのままディメンションやメジャーとしてデータに追加されています。




まとめ:この方法を活用して快適なデータ分析を実現

Looker Studioの計算フィールドを減らすことで、レポートの表示速度を大幅に向上できます。そのために、スプレッドシートとGASを活用し、データを事前に計算しておく方法が有効です。


ポイントのおさらい


・Looker Studioの計算フィールドを減らすことで、表示速度を改善


・スプレッドシートでデータを事前に計算し、負荷を軽減


・GASを活用して自動計算し、効率的なデータ集計を実現


この方法を取り入れれば、Looker Studioのストレスフリーなデータ可視化が可能になります!ぜひ試してみてください。


New call-to-action