top of page

Quick Start Kit: Automatically Keep a Daily History of Your Data

With the release of version v1.1 of the DataCollection module, we’re introducing a powerful new feature:

qe score

Automatic daily data history backup.


This update helps ensure your dashboard data is archived every day, without manual effort. It’s a simple yet essential step to track progress, troubleshoot issues, or just maintain historical records for future reference.

Saving today's data allows you to build a historical record and track the evolution of all data over time, which can then be displayed in the Dashboard (lookerstudio).

Saving today's data allows you to build a historical record and track the evolution of all data over time, which can then be displayed in the Dashboard (lookerstudio).















1. How It Works

At the end of each day, a script automatically copies all data rows from the current day in the data_dashboard sheet and appends them to the bottom of the same file. This creates a growing historical record of your data over time — one snapshot per day.

At the end of each day, a script automatically copies all data rows from the current day in the data_dashboard sheet and appends them to the bottom of the same file. This creates a growing historical record of your data over time — one snapshot per day.


2. How to Set It Up

You only need to schedule the script to run daily. Here’s how:

  1. Open your Google Sheet.

  2. Go to Extensions > Apps Script.

  3. In the Apps Script editor, go to Triggers from the left-side menu.

  4. Click on "Add Trigger" (bottom right).

  5. Choose the function: copyTodayRowsUniqueAppli.

  6. Set the event source to Time-driven.

  7. Set the type to Daily.

  8. Choose the time range: Between 11:00 PM and midnight.

  9. Click Save.

Once this trigger is created, the function will run every day, backing up the day’s data automatically.



3. If You’re Using an Older Version of the Quick Start Kit

If your DataCollection sheet doesn't include this feature yet:

  1. Go to Extensions > Apps Script.

  2. In the Apps Script editor, click the "+" icon to add a new script file.

  3. Copy and paste the script below into the file.

  4. Click Save.

  5. Then follow the setup steps in section 2 to schedule the trigger.


QE score - trigger

function copyTodayRowsUniqueAppli() {

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("data_dashboard");

  const today = new Date();

  today.setHours(0, 0, 0, 0); // Normalize for comparison


  const lastRow = sheet.getLastRow();

  const lastCol = sheet.getLastColumn();


  const allData = sheet.getRange(2, 1, lastRow - 1, lastCol).getValues(); // Full data from row 2

  const matchingRows = [];


  for (let i = 0; i < allData.length; i++) {

    const row = allData[i];

    const dateCell = row[0];

    const colBValue = row[1];


    if (!dateCell) break; // Stop at first empty date


    const rowDate = new Date(dateCell);

    rowDate.setHours(0, 0, 0, 0);


    if (rowDate.getTime() === today.getTime()) {

      // Count how many times this (today's date + col B) combo exists in the entire data

      let count = 0;

      for (let j = 0; j < allData.length; j++) {

        const d = new Date(allData[j][0]);

        d.setHours(0, 0, 0, 0);

        if (d.getTime() === today.getTime() && allData[j][1] === colBValue) {

          count++;

        }

      }


      if (count <= 1) { // Only copy if the combo exists once or less

        matchingRows.push(row);

      }

    }

  }


  if (matchingRows.length > 0) {

    const destinationStartRow = sheet.getLastRow() + 1;

    sheet.getRange(destinationStartRow, 1, matchingRows.length, matchingRows[0].length)

         .setValues(matchingRows);

    Logger.log(matchingRows.length + " row(s) copied.");

  } else {

    Logger.log("No rows to copy: all (date + column B) combos already exist more than once.");

  }

}


This simple setup ensures you always have a reliable history of your data — versioned by day — with no manual exports

or archiving needed.Ready to try it? Upgrade to v1.1 and set up your trigger today!

Comments


bottom of page