Как это устроено? Поскольку документы Google хранят все действия с ними, мы можем вытащить из домена все записи - логи, содержащие историю этих записей, а затем на их основе получить картину того, как построено сетевое взаимодействие в нашей организации. Если речь идет о школе, то данные целесообразно извлекать 2 раза в год - перед началом нового учебного года и по итогам первого полугодия. Для этого нам понадобится зайти в панель управления нашего домена и перейти в раздел Отчеты.
Далее заходим в раздел Диск и указываем временной период, за который мы будем извлекать данные. Это лучше делать помесячно, т.е. мы укажем первый и последний день интересующего нас месяца. Следующий важный момент - выбор столбцов (это делается в правом меню службы отчетов). Я обычно извлекаю все, кроме IP.
Через несколько секунд мы получим сообщение о том, что нужная нам таблица сгенерирована.
Теперь нам предстоит самое интересное. Для того, чтобы с нашими данными можно было работать, необходимо отфильтровать то, что нам нужно.
В нашем случае мы будем изучать взаимодействие учителей в домене G Suite. Поэтому нам нужно будет отфильтровать только те записи, которые
а) Содержат только данные об учителях (а не об учениках)
б) Показывают взаимодействие учителей, а не их действия с собственными документами. В этом нам поможет Google скрипт, код которого мы здесь публикуем.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function cleanData() { | |
SpreadsheetApp.flush(); | |
var ss = SpreadsheetApp.openById('1B7nsY41C7PeGMwmLQXoaO4kQ0u_mOwFOjfPesuvktyY'); //берем данные из таблицы с логами обращения к G Диску, в скобках подставляем ID таблицы | |
var s = ss.getSheetByName('Лист1') //в качестве рабочего листа - Лист1. Если в таблице не так, то переименовываем | |
var ts = SpreadsheetApp.openById('1GCoApFoMep5XuA3PsbpwOtxfNkYhMsixDtlZTuiJM2Q'); //берем аккаунты учителей из таблицы, ID которой указываем | |
var t = ts.getSheetByName('Лист1'); | |
var all = s.getDataRange().getValues(); | |
var rows = s.getLastRow(); | |
var tall = t.getDataRange().getValues(); | |
var rowst = t.getLastRow(); | |
var w = ss.getSheetByName('TeachersLinks'); //это название пустого листа, который нужно добавить. В него копируются отфильтрованные данные | |
var tarrow = w.getLastRow(); | |
var testTeachers = []; | |
var res = []; | |
for (j = 0; j < rowst; j++) | |
{ | |
testTeachers.push(tall[j][1]) //Переносим в лист Teacherslinks только те взаимодействия, которые а) совершаются только учителями и б) только с чужими объектами | |
} | |
for (i = 1; i < rows; i++) | |
{ | |
var editor = all[i][2]; | |
var owner = all[i][7]; | |
if (testTeachers.indexOf(editor) !== -1 && testTeachers.indexOf(owner) !== -1 && editor !== owner) //Берем запись в таблице и проверяем а) являются ли оба участника действия (editor и owner) учителями и б) не являются ли они одним и тем же человеком | |
{ | |
res.push(all[i]); | |
} | |
} | |
res = res.slice(0,100000); | |
w.getDataRange().clear(); | |
w.getRange(tarrow+2, 1, res.length, res[0].length).setValues(res); //Переносим нужные строки в лист TeachersLinks | |
} |
Подставляем в скрипт ID наших таблиц с данными, запускаем функцию обработки CleanData и в лист TeachersLinks этой же таблицы будут перенесены только те записи, которые нас интересуют. Удалим из таблицы все столбцы кроме столбца с учетными записями редакторов (обычно это столбец B) и авторов документа (G). Озаглавим первый столбец с данными (редактор документа) source, а второй столбец (владелец документа) - target. После этого сохраним наш лист с данными как csv файл. Теперь их можно обрабатывать!