【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のストレスフリーなデータ可視化が可能になります!ぜひ試してみてください。

CTA
  • URLをコピーしました!
  • URLをコピーしました!
この記事を書いた人
目次