1. Wprowadzenie
Looker Studio umożliwia bezpłatne tworzenie aktywnych, interaktywnych paneli z atrakcyjnymi wizualizacjami danych. Pobieraj dane z różnych źródeł i twórz w Looker Studio nieograniczoną liczbę raportów z pełnymi możliwościami edycji i udostępniania. Poniższy zrzut ekranu przedstawia przykładowy panel Looker Studio:

( Kliknij tutaj, aby wyświetlić ten przykładowy raport w Looker Studio)
Społecznościowe oprogramowanie sprzęgające to funkcja Looker Studio, która umożliwia używanie Apps Script do tworzenia oprogramowania sprzęgającego z dowolnym źródłem danych dostępnym w internecie. Społecznościowe oprogramowanie sprzęgające jest tworzone przez społeczność Looker Studio. Oznacza to, że każdy może tworzyć złącza społeczności. Możesz też udostępniać społecznościowe oprogramowanie sprzęgające innym osobom, aby mogły uzyskiwać dostęp do własnych danych z poziomu Looker Studio.
Z połączeń społecznościowych możesz korzystać w różnych przypadkach:
- wyświetlasz dane z platformy komercyjnej (np.mediów społecznościowych, marketingu, analityki itp.);
- wizualizujesz dane przedsiębiorstwa przechowywane lokalnie (np. dane o sprzedaży z lokalnej bazy danych MySQL);
- Udostępniasz klientom możliwość wizualizacji danych z Twojej usługi.
- Tworzysz platformę raportowania za pomocą przycisku push
- wizualizujesz własne dane ze źródła internetowego (np. tworzysz panel Google Fit);
Czego się nauczysz
- Jak działa społecznościowe oprogramowanie sprzęgające narzędzia Looker Studio
- Jak używać Google Apps Script do tworzenia oprogramowania sprzęgającego społeczności
- Jak korzystać ze społecznościowych oprogramowań sprzęgających w Looker Studio
Czego potrzebujesz
- dostęp do internetu i przeglądarki;
- konto Google,
- Znajomość podstaw języka JavaScript i interfejsów API sieci
2. Krótka ankieta
Dlaczego wybierasz ten codelab?
Jak zamierzasz korzystać z tego laboratorium/samouczka?
Jak oceniasz swoją znajomość narzędzia Looker Studio?
Które z poniższych stwierdzeń najlepiej opisuje Twoje doświadczenie?
Możesz przejść do następnej strony, aby przesłać informacje z ankiety.
3. Omówienie złączy społeczności
Społecznościowe oprogramowanie sprzęgające Looker Studio umożliwia bezpośrednie połączenia z dowolnym źródłem danych dostępnym w internecie. Możesz łączyć się z platformami komercyjnymi, publicznymi zbiorami danych lub własnymi prywatnymi danymi lokalnymi. Złącza społeczności mogą pobierać dane za pomocą interfejsów API sieci, interfejsów API JDBC, plików płaskich (CSV, JSON, XML) i usług Apps Script.

Rozważmy scenariusz, w którym opublikowano pakiet w npm i chcesz śledzić liczbę pobrań pakietu w czasie według dni. W tym module stworzysz oprogramowanie sprzęgające społeczności, które pobiera dane za pomocą interfejsu API liczby pobrań pakietów npm. Wtyczkę Community Connector można następnie wykorzystać w Looker Studio do utworzenia panelu wizualizującego liczbę pobrań.
4. Przepływ pracy społecznościowego oprogramowania sprzęgającego
W podstawowym łączniku społeczności definiujesz 4 funkcje:
getAuthType()getConfig()getSchema()getData()
W zależności od bieżącego kroku procesu Looker Studio wykonuje te funkcje oprogramowania sprzęgającego i wykorzystuje odpowiedź w kolejnych krokach. Poniższy film zawiera omówienie tych kwestii:
- Jak działa złącze społeczności
- Różne etapy przepływu pracy
- Kiedy wywoływane są różne funkcje
- Kiedy Looker Studio wyświetla różne interfejsy
- Oczekiwane działania użytkowników na różnych etapach
Po obejrzeniu filmu możesz wrócić do ćwiczenia.
Nie musisz zapamiętywać tego przepływu pracy. Wystarczy, że się z nim zapoznasz, aby zrozumieć, co się dzieje w przypadku konektora. Zawsze możesz wrócić do tego diagramu.

W następnym kroku zaczniesz tworzyć oprogramowanie sprzęgające w Google Apps Script. Będziesz musiał(-a) przełączać się między interfejsem Apps Script a tym samouczkiem.
5. Konfigurowanie projektu Apps Script
Krok 1. Otwórz stronę Google Apps Script.
Krok 2. Utwórz nowy projekt Apps Script, klikając „+ Nowy projekt” w lewym górnym rogu.

Zobaczysz projekt powłoki z pustą funkcją myFunction w pliku Code.gs.

Krok 3. Usuń funkcję myFunction.
Krok 4. Nadaj projektowi nazwę:
- W lewym górnym rogu strony kliknij
Untitled project. - Wpisz tytuł projektu.

Zacznij pisać kod łącznika w pliku Code.gs.
6. Zdefiniuj funkcję getAuthType()
Gdy Looker Studio będzie potrzebować informacji o metodzie uwierzytelniania używanej przez łącznik, wywoła funkcję getAuthType(). Ta funkcja powinna zwracać metodę uwierzytelniania wymaganą przez łącznik do autoryzacji usługi innej firmy.
W przypadku tworzonego przez Ciebie konektora pobierania npm nie musisz uwierzytelniać się w żadnej usłudze innej firmy, ponieważ używany przez Ciebie interfejs API nie wymaga uwierzytelniania. Skopiuj ten kod i dodaj go do pliku Code.gs:
Code.gs
var cc = DataStudioApp.createCommunityConnector();
function getAuthType() {
var AuthTypes = cc.AuthType;
return cc
.newAuthTypeResponse()
.setAuthType(AuthTypes.NONE)
.build();
}
W tym miejscu wskazujesz, że Twój łącznik nie wymaga uwierzytelniania przez podmiot zewnętrzny (AuthTypes.NONE). Aby zobaczyć wszystkie obsługiwane metody uwierzytelniania, zapoznaj się z AuthType().
7. Definiowanie funkcji getConfig()
Zanim użytkownicy będą mogli zacząć korzystać z Twojego łącznika, muszą go skonfigurować. Odpowiedź funkcji getConfig() określa opcje konfiguracji, które zobaczą użytkownicy. Looker Studio wywołuje funkcję getConfig(), aby uzyskać szczegóły konfiguracji łącznika. Na podstawie odpowiedzi udzielonej przez getConfig() usługa Looker Studio wyświetli ekran konfiguracji oprogramowania sprzęgającego i zmieni niektóre jego działania.
Na ekranie konfiguracji możesz podawać informacje lub uzyskiwać dane wejściowe użytkownika za pomocą tych elementów formularza:
| Element wejściowy | Pole tekstowe z jednym wierszem. |
| Element wejściowy | Wielowierszowe pole tekstowe. |
| Element wejściowy | Menu z opcjami jednokrotnego wyboru. |
| Element wejściowy | Menu z opcjami wielokrotnego wyboru. |
| Element wejściowy | Pojedyncze pole wyboru, które może służyć do przechwytywania wartości logicznych. |
| Element displayowy | Statyczne pole tekstowe, które może służyć do przekazywania użytkownikowi instrukcji lub informacji. |
Użyj elementu INFO, aby podać instrukcje dla użytkownika, a elementu TEXTINPUT, aby uzyskać od użytkownika nazwę pakietu wejściowego. W getConfig() odpowiedzi zgrupujesz te elementy formularza pod kluczem configParams.
Interfejs API, z którym się łączysz, wymaga daty jako parametru, więc w odpowiedzi getConfig() ustaw dateRangeRequired na true. Dzięki temu Looker Studio będzie uwzględniać zakresy dat we wszystkich żądaniach danych. Jeśli źródło danych nie wymaga daty jako parametru, możesz pominąć ten krok.
Dodaj do pliku Code.gs ten kod getConfig() poniżej istniejącego kodu dla getAuthType():
Code.gs
function getConfig(request) {
var config = cc.getConfig();
config.newInfo()
.setId('instructions')
.setText('Enter npm package names to fetch their download count.');
config.newTextInput()
.setId('package')
.setName('Enter a single package name')
.setHelpText('e.g. googleapis or lighthouse')
.setPlaceholder('googleapis');
config.setDateRangeRequired(true);
return config.build();
}
Na podstawie tych parametrów konfiguracji, gdy użyjesz łącznika w Looker Studio, zobaczysz ekran konfiguracji podobny do tego poniżej. Ale o tym opowiemy później.

Przejdźmy do następnej funkcji – getSchema().
8. Definiowanie funkcji getSchema()
Looker Studio wywołuje funkcję getSchema(), aby uzyskać schemat powiązany z konfiguracją wybraną przez użytkownika dla łącznika. Na podstawie odpowiedzi udzielonej przez getSchema() Looker Studio wyświetli użytkownikowi ekran pól z listą wszystkich pól w łączniku.
W przypadku każdej konkretnej konfiguracji oprogramowania sprzęgającego schemat to lista wszystkich pól, dla których oprogramowanie sprzęgające może dostarczać dane. W zależności od konfiguracji łącznik może zwracać różne schematy z różnymi polami. Schemat może zawierać pola pobierane ze źródła interfejsu API, pola obliczane w Apps Script oraz pola obliczane w Looker Studio za pomocą formuły pola obliczeniowego. Konektor udostępnia metadane każdego pola w schemacie, w tym:
- Nazwa pola
- Typ danych pola
- Informacje semantyczne
Aby dowiedzieć się więcej, zapoznaj się z informacjami o getSchema() i Field.
W zależności od sposobu pobierania danych przez łącznik schemat może być stały lub obliczany dynamicznie po wywołaniu funkcji getSchema(). Parametry konfiguracji z getConfig() zdefiniowane przez użytkownika będą podawane w argumencie request funkcji getSchema().
W tym ćwiczeniu nie musisz uzyskiwać dostępu do argumentu request. Więcej informacji o argumencie request znajdziesz w następnym segmencie, w którym będziesz pisać kod funkcji getData().
W przypadku łącznika schemat jest stały i zawiera te 3 pola:
| Nazwa pakietu npm podana przez użytkownika |
| Liczba pobrań pakietu npm |
| Data liczby pobrań |
Poniżej znajdziesz kod getSchema() dla swojego konektora. Funkcja pomocnicza getFields() abstrahuje od tworzenia pól, ponieważ ta funkcjonalność jest potrzebna zarówno w przypadku funkcji getSchema(), jak i getData(). Dodaj do pliku Code.gs ten kod:
Code.gs
function getFields(request) {
var cc = DataStudioApp.createCommunityConnector();
var fields = cc.getFields();
var types = cc.FieldType;
var aggregations = cc.AggregationType;
fields.newDimension()
.setId('packageName')
.setType(types.TEXT);
fields.newMetric()
.setId('downloads')
.setType(types.NUMBER)
.setAggregation(aggregations.SUM);
fields.newDimension()
.setId('day')
.setType(types.YEAR_MONTH_DAY);
return fields;
}
function getSchema(request) {
var fields = getFields(request).build();
return { schema: fields };
}
Na podstawie tego schematu możesz oczekiwać, że na ekranie pól Looker Studio zobaczysz te pola, gdy używasz łącznika w Looker Studio. Więcej informacji na ten temat znajdziesz w dalszej części artykułu, gdy będziesz testować łącznik.

Przejdźmy do naszej ostatniej funkcji – getData().
9. Definiowanie funkcji getData() : część 1
Looker Studio wywołuje funkcję getData() za każdym razem, gdy musi pobrać dane. Na podstawie odpowiedzi udzielonej przez getData() narzędzie Looker Studio wyrenderuje i zaktualizuje wykresy w panelu. Funkcja getData() może być wywoływana podczas tych zdarzeń:
- Użytkownik dodaje wykres do panelu
- Użytkownik edytuje wykres
- Użytkownik wyświetla panel
- Użytkownik edytuje filtr lub kontrolę danych
- Looker Studio potrzebuje próbki danych
Nie musisz kopiować żadnego kodu z tej strony, ponieważ skopiujesz gotowy
getData()
w kolejnym kroku.
Informacje o obiekcie request
Looker Studio przekazuje obiekt request z każdym wywołaniem getData(). Sprawdź strukturę obiektu request poniżej. Pomoże Ci to napisać kod funkcji getData().
Struktura obiektu request
{
configParams: object,
scriptParams: object,
dateRange: {
startDate: string,
endDate: string
},
fields: [
{
name: Field.name
}
]
}
- Obiekt
configParamsbędzie zawierać wartości konfiguracji parametrów zdefiniowanych wgetConfig()i skonfigurowanych przez użytkownika. - Obiekt
scriptParamsbędzie zawierać informacje związane z wykonaniem łącznika. W tym ćwiczeniu nie musisz z niego korzystać. dateRangebędzie zawierać żądany zakres dat, jeśli został on uwzględniony w odpowiedzigetConfig().fieldsbędzie zawierać listę nazw pól, dla których są żądane dane.
W przypadku łącznika przykład funkcji requestgetData() może wyglądać tak:
{
configParams: {
package: 'jquery'
},
dateRange: {
startDate: '2017-07-16',
endDate: '2017-07-18'
},
fields: [
{
name: 'day',
},
{
name: 'downloads',
}
]
}
W przypadku getData()wywołania w powyższym request żądane są tylko 2 pola, mimo że schemat oprogramowania sprzęgającego zawiera dodatkowe pola. Na następnej stronie znajdziesz przykładową odpowiedź na to wywołanie getData() oraz ogólną strukturę odpowiedzi getData().
10. Definiowanie funkcji getData() – część 2
W getData()odpowiedzi musisz podać zarówno schemat, jak i dane w przypadku wymaganych pól. Kod podzielisz na 3 segmenty:
- Utwórz schemat dla żądanych pól.
- Pobieranie i analizowanie danych z interfejsu API.
- przekształcanie przeanalizowanych danych i filtrowanie ich pod kątem żądanych pól;
Nie musisz kopiować żadnego kodu z tej strony, ponieważ skopiujesz gotowy
getData()
kod na następnej stronie.
To struktura getData() dla Twojego oprogramowania sprzęgającego.
function getData(request) {
// TODO: Create schema for requested fields.
// TODO: Fetch and parse data from API.
// TODO: Transform parsed data and filter for requested fields.
return {
schema: <filtered schema>,
rows: <transformed and filtered data>
};
}
Tworzenie schematu dla żądanych pól
// Create schema for requested fields
var requestedFieldIds = request.fields.map(function(field) {
return field.name;
});
var requestedFields = getFields().forIds(requestedFieldIds);
Pobieranie i parsowanie danych z interfejsu API
Adres URL interfejsu npm API będzie miał ten format:
https://api.npmjs.org/downloads/point/{start_date}:{end_date}/{package}
Utwórz adres URL interfejsu API, używając parametrów request.dateRange.startDate, request.dateRange.endDate i request.configParams.package podanych przez Looker Studio. Następnie pobierz dane z interfejsu API za pomocą UrlFetchApp(klasa Apps Script: reference). Następnie przeanalizuj pobraną odpowiedź.
// Fetch and parse data from API
var url = [
'https://api.npmjs.org/downloads/range/',
request.dateRange.startDate,
':',
request.dateRange.endDate,
'/',
request.configParams.package
];
var response = UrlFetchApp.fetch(url.join(''));
var parsedResponse = JSON.parse(response).downloads;
Przekształcanie przeanalizowanych danych i filtrowanie ich pod kątem żądanych pól
Odpowiedź z interfejsu API npm będzie miała ten format:
{
downloads: [
{
day: '2014-02-27',
downloads: 1904088
},
..
{
day: '2014-03-04',
downloads: 7904294
}
],
start: '2014-02-25',
end: '2014-03-04',
package: 'somepackage'
}
Przekształć odpowiedź z interfejsu npm API i podaj getData() w tym formacie: Jeśli ten format jest niejasny, zapoznaj się z przykładową odpowiedzią w następnym akapicie.
{
schema: [
{
object(Field)
}
],
rows: [
{
values: [string]
}
]
}
W odpowiedzi zwróć schemat tylko żądanych pól, używając właściwości schema. Dane zwracasz za pomocą właściwości rows jako listę wierszy. W każdym wierszu sekwencja pól w values musi być zgodna z sekwencją pól w schema. Na podstawie wcześniejszego przykładu request odpowiedź na getData() będzie wyglądać tak:
{
schema: requestedFields.build(),
rows: [
{
values: [ 38949, '20170716']
},
{
values: [ 165314, '20170717']
},
{
values: [ 180124, '20170718']
},
]
}
Podzbiór schematu został już utworzony. Użyj tej funkcji, aby przekształcić przeanalizowane dane i odfiltrować je pod kątem żądanych pól.
function responseToRows(requestedFields, response, packageName) {
// Transform parsed data and filter for requested fields
return response.map(function(dailyDownload) {
var row = [];
requestedFields.asArray().forEach(function (field) {
switch (field.getId()) {
case 'day':
return row.push(dailyDownload.day.replace(/-/g, ''));
case 'downloads':
return row.push(dailyDownload.downloads);
case 'packageName':
return row.push(packageName);
default:
return row.push('');
}
});
return { values: row };
});
}
11. Definiowanie funkcji getData() : część 3
Połączony kod getData() będzie wyglądać jak ten poniżej. Dodaj do pliku Code.gs ten kod:
Code.gs
function responseToRows(requestedFields, response, packageName) {
// Transform parsed data and filter for requested fields
return response.map(function(dailyDownload) {
var row = [];
requestedFields.asArray().forEach(function (field) {
switch (field.getId()) {
case 'day':
return row.push(dailyDownload.day.replace(/-/g, ''));
case 'downloads':
return row.push(dailyDownload.downloads);
case 'packageName':
return row.push(packageName);
default:
return row.push('');
}
});
return { values: row };
});
}
function getData(request) {
var requestedFieldIds = request.fields.map(function(field) {
return field.name;
});
var requestedFields = getFields().forIds(requestedFieldIds);
// Fetch and parse data from API
var url = [
'https://api.npmjs.org/downloads/range/',
request.dateRange.startDate,
':',
request.dateRange.endDate,
'/',
request.configParams.package
];
var response = UrlFetchApp.fetch(url.join(''));
var parsedResponse = JSON.parse(response).downloads;
var rows = responseToRows(requestedFields, parsedResponse, request.configParams.package);
return {
schema: requestedFields.build(),
rows: rows
};
}
Plik Code.gs jest gotowy. Następnie zaktualizuj plik manifestu.
12. Aktualizowanie pliku manifestu
W edytorze Apps Script kliknij Ustawienia projektu > Wyświetlaj plik manifestu „appsscript.json” w edytorze.

Spowoduje to utworzenie nowego pliku manifestu appsscript.json.

Zastąp plik appscript.json tymi informacjami:
appsscript.json
{
"timeZone": "America/Los_Angeles",
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"dataStudio": {
"name": "npm Downloads - From Codelab",
"logoUrl": "https://raw.githubusercontent.com/npm/logos/master/npm%20logo/npm-logo-red.png",
"company": "Codelab user",
"companyUrl": "https://developers.google.com/looker-studio/",
"addonUrl": "https://github.com/googledatastudio/example-connectors/tree/master/npm-downloads",
"supportUrl": "https://github.com/googledatastudio/community-connectors/issues",
"description": "Get npm package download counts.",
"sources": ["npm"]
}
}
Zapisz projekt Apps Script.

Gratulacje! Pierwsze społecznościowe oprogramowanie sprzęgające zostało utworzone i jest gotowe do testowania.
13. Testowanie oprogramowania sprzęgającego w Looker Studio
Korzystanie z wdrożenia
Krok 1. W środowisku programistycznym Apps Script kliknij Wdróż > Testowe wdrożenia, aby otworzyć okno Testowe wdrożenia.

Wyświetlone zostanie domyślne wdrożenie Wdrożenie główne.
Krok 2. Kliknij Kopiuj, aby skopiować identyfikator wdrożenia Head.
Krok 3. Aby wczytać łącznik w Looker Studio, zastąp w tym linku symbol zastępczy <HEAD_DEPLOYMENT_ID> identyfikatorem wdrożenia głównego łącznika i kliknij link w przeglądarce:
https://lookerstudio.google.com/datasources/create?connectorId=<HEAD_DEPLOYMENT_ID>
Autoryzowanie oprogramowania sprzęgającego
Użytkownicy, którzy korzystają z Looker Studio po raz pierwszy: jeśli nie korzystasz jeszcze z Looker Studio, poprosimy Cię o autoryzację tej usługi i zaakceptowanie warunków. Dokończ proces autoryzacji. Gdy po raz pierwszy użyjesz Looker Studio, może się też pojawić okno z prośbą o zaktualizowanie preferencji marketingowych. Jeśli chcesz otrzymywać e-maile z informacjami o najnowszych funkcjach, aktualizacjach i zmianach w usłudze, zarejestruj się, aby otrzymywać powiadomienia o usługach.
Po wczytaniu pojawi się prośba o autoryzację łącznika.

Kliknij Autoryzuj i przyznaj oprogramowaniu sprzęgającemu wymagane uprawnienia.
Konfigurowanie oprogramowania sprzęgającego
Po zakończeniu autoryzacji pojawi się ekran konfiguracji. Wpisz „lighthouse” w obszarze wprowadzania tekstu i w prawym górnym rogu kliknij Połącz.

Potwierdź schemat
Zobaczysz ekran pól. W prawym górnym rogu kliknij Utwórz raport.

Tworzenie panelu informacyjnego
Znajdziesz się w środowisku panelu narzędzia Looker Studio. Kliknij Dodaj do raportu.

W Looker Studio za każdym razem, gdy użytkownik uzyskuje dostęp do łącznika i dodaje nową konfigurację, na jego koncie Looker Studio tworzone jest nowe źródło danych. Źródło danych to instancja łącznika utworzona na podstawie określonej konfiguracji. Na podstawie wybranego przez użytkownika oprogramowania sprzęgającego i konfiguracji źródło danych zwróci tabelę danych z określonym zestawem pól. Użytkownicy mogą tworzyć wiele źródeł danych z tego samego łącznika. Źródło danych może być używane w wielu raportach, a ten sam raport może korzystać z wielu źródeł danych.
Teraz dodaj wykres ciągu czasowego! W menu kliknij Wstaw > Szereg czasowy. Następnie umieść szereg czasowy na obszarze roboczym. Powinien pojawić się wykres ciągu czasowego liczby pobrań pakietu npm dla wybranego pakietu. Dodaj ustawienia filtra dat i wyświetl panel, jak pokazano poniżej.

To wszystko. Właśnie udało Ci się utworzyć pierwsze społecznościowe oprogramowanie sprzęgające. To już koniec tego ćwiczenia. Zobaczmy teraz, jakie możesz podjąć kolejne kroki.
14. Dalsze kroki
Ulepszanie utworzonego łącznika
Wprowadź ulepszenia do utworzonego właśnie łącznika:
- Jeśli w Looker Studio nie podasz nazwy pakietu na ekranie konfiguracji złącza, podczas rysowania wykresu ciągu czasowego zobaczysz komunikat o błędzie. Spróbuj dodać do konfiguracji oprogramowania sprzęgającego weryfikację danych wejściowych lub opcję domyślną.
- Spróbuj dodać do konfiguracji oprogramowania sprzęgającego obsługę zapytań dotyczących wielu nazw pakietów jednocześnie. Wskazówka: interfejs API liczby pobrań pakietu npm obsługuje wpisywanie wielu nazw pakietów rozdzielonych przecinkami.
- Rozwiązania obu tych problemów znajdziesz w kodzie złącza npm.
Więcej możliwości dzięki złączom społeczności
- Wyświetl dokumentację interfejsu API łącznika i pliku manifestu.
- Aby poznać sprawdzone metody, zapoznaj się z przykładowym kodem oprogramowania sprzęgającego w naszym repozytorium open source.
- Wykonaj ćwiczenie programistyczne clasp, aby móc tworzyć złącza społecznościowe w środowisku lokalnym.
- Po utworzeniu kompletnego złącza społeczności zapoznaj się z dostępnymi opcjami publikowania.
- Utwórz wizualizację utworzoną przez społeczność dla Looker Studio.
Dodatkowe materiały
Poniżej znajdziesz różne materiały, które pomogą Ci lepiej poznać tematy poruszane w tym module.
Typ zasobu | Funkcje dla użytkowników | Funkcje dla programistów | |
Dokumentacja | |||
Wiadomości i aktualności | Zarejestruj się w Looker Studio > Ustawienia użytkownika. | ||
Zadawanie pytań | |||
Filmy | |||
Przykłady | |||