1. Czym jest analityka biznesowa (BI)
2. Do czego służy Google Report (Looker Studio- dawniej Data Studio)
3. Jak podłączyć do niego własne źródło danych do niego
## Analityka biznesowa (ang. business intelligence)
Analityka biznesowa (BI) to proces zbierania, przetwarzania i prezentowania danych, który pozwala na podejmowanie uzasadnionych decyzji biznesowych. BI składa się z szeregu narzędzi, metod i procesów, które pozwalają na gromadzenie, analizowanie i prezentowanie danych dotyczących działalności przedsiębiorstwa. Celem BI jest udostępnienie pracownikom wszystkich tych poziomów organizacji szybkiego dostępu do informacji, które pozwalają na podejmowanie bardziej uzasadnionych decyzji biznesowych.
Na przykład, firma sprzedająca produkty online może skorzystać z analityki biznesowej, aby zbadać, jakie produkty się najlepiej sprzedają, w jakich porach dnia lub tygodnia dochodzi do największej ilości transakcji oraz jakie są najważniejsze źródła ruchu na stronie internetowej. Firma ta może również zbadać, jakie są najważniejsze czynniki decydujące o zakupie produktu przez konsumenta oraz jakie są najważniejsze kanały reklamy, które przyciągają najwięcej klientów. Te informacje mogą pomóc firmie w podejmowaniu decyzji dotyczących kolejnych kroków w procesie sprzedaży swoich produktów.
## Looker Studio
Looker Studio powszechnie zwane Google Reports jest działającą w przeglądarce odpowiedzią Googla na potrzeby analityki biznesowej. Dawniej jego pełna nazwa to było Google Data Studio.
Narzędzie to służy do tworzenia raportów i wizualizacji danych. Umożliwia ono na łatwe i szybkie tworzenie profesjonalnie wyglądających raportów biznesowych. Można wykorzystać go do tworzenia różnego rodzaju raportów, takich jak:
- **Raporty sprzedaży:** można łączyć dane z różnych źródeł, takich jak Google Analytics, e-sklepów, CRM-ów i innych, aby stworzyć raporty dotyczące sprzedaży, wpływu kanałów marketingowych na sprzedaż itd.
- **Raporty z działań marketingowych**: można łączyć dane z Google Analytics, Google AdWords, Facebook Ads oraz innych narzędzi marketingowych, tak, aby stworzyć raporty dotyczące skuteczności kampanii reklamowych, wpływu kanałów na ruch na stronie internetowej itd.
- **Raporty z działalności na stronie internetowej:** można łączyć dane z Google Analytics, narzędzi do monitorowania jakości ruchu, baz danych i innych, tak, aby stworzyć raporty dotyczące ruchu na stronie internetowej, zachowań użytkowników, konwersji itd.
- **Raporty finansowe:** można łączyć dane z różnych systemów finansowych, takich jak QuickBooks, Xero i inne, tak, aby stworzyć raporty dotyczące przychodów, kosztów, zysków itd.
- **Raporty z danymi niestandardowymi:** można łączyć dane z różnych źródeł, takich jak bazy danych, plików CSV, Google Sheets i innych tak, aby stworzyć raporty dotyczące danych niestandardowych, które nie są dostępne w narzędziach innych niż Data Studio.
Google Reports nie są narzędziem bardzo zaawansowanym. Nie pozwalają na predykcję danych. Działają na zasadzie łączenia danych z wielu źródeł i ich wizualizacji. Jednak dla dużych korporacji takie rozwiązanie może nie wystarczyć. W mojej praktyce zawodowej zdarzyło się, iż w małym startupie gdzie fundusze były bardzo napięte, stworzenie
konektora wysyłającego dane do Google Reports okazało się tańsze, aniżeli ustawienie
oddzielnej aplikacji dla klientów biznesowych z dashboardem wizualizującym na wykresach
wszystkie dane.
Looker Studio (dawniej Data Studio) zaciąga dane poprzez konektory. Na chwilę obecną istnieje ponad 600 ogólnodostępnych konektorów, niemniej jednak nic nie stoi na przeszkodzie, by tworzyć własny.
## Własny konektor do Looker Studio
Na potrzeby tego artykułu spróbujemy, stworzyć konektor, który będzie pobierał kursy walut z API NBP. Pozwoli nam to generować wykresy w Google Reports takie jak poniższy.
![blog-looker-baner.webp](/uploads/blog_looker_baner_e53aab4950.webp)
Aby stworzyć własny konektor, wystarczy stworzyć nowy projekt w usłudze [Google Script](https://www.google.com/script/start/). W projekcie tym będziesz potrzebował dwóch plików: appsscript.json oraz pliku z kodem, który w poniższym przykładzie nazwę kod.gs.
Appsscript.json to plik, który pełni rolę manifestu. To na jego podstawie w liście źródeł danych do raportu nasz konektor będzie się wyświetlał z odpowiednią nazwą, czy też logiem.
```r
{
"dataStudio": {
"name": "NBP Currency",
"logoUrl": "https://www.nbp.pl/graph/logo/logo-nbp-w2.jpg",
"company": "Bernard van der Esch",
"companyUrl": "https://developers.google.com/datastudio/",
"addonUrl": "https://github.com/adeptofvoltron/google-data-studio-nbp-connector",
"supportUrl": "https://github.com/adeptofvoltron/google-data-studio-nbp-connector/issues",
"description": "Get currency rate from polish national bank",
"sources": []
}
}
```
Appsscript.json wystarczy, by móc opublikować nasz kod, jako konektor do Google Reports. Jednakże, aby konektor działał poprawnie, w pliku kod.gs potrzebujemy umieścić wywołania 4 funkcji: `getAuthType()`, `getConfig(request)`, `getSchema(request)`, `getData(request)`.
Funkcja _**getAuthType()**_ wpływa na to, jak możemy się uwierzytelnić w naszym konektorze. Mamy tu kilka metod uwierzytelnienia do wyboru i wszystkie możliwości możemy podejrzeć w dokumentacji Google Apps Script. API, do którego będziemy się łączyć, nie wymaga żadnego uwierzytelnienia.
```r
function getAuthType() {
var cc = DataStudioApp.createCommunityConnector();
var AuthTypes = cc.AuthType;
return cc
.newAuthTypeResponse()
.setAuthType(AuthTypes.NONE)
.build();
}
```
W funkcji _**getConfig (request)**_ w tej metodzie definiujemy konfigurację naszego systemu sprzęgającego. Najpierw tworzymy formularz, który użytkownik będzie musiał wypełnić przed dodaniem naszego konektora do swojego raportu. W naszym przypadku dodamy pole tekstowe, dla kodu waluty, której kurs chcielibyśmy pobrać. Dodamy też pole tekstowe, z instrukcjami dotyczącymi naszego konektora. Na koniec, zaznaczymy, iż nasze dane będą pobierane zawsze dla jakiegoś zakresu dat.
```r
function getConfig(request) {
var cc = DataStudioApp.createCommunityConnector();
var config = cc.getConfig();
config.newInfo()
.setId('instructions')
.setText('Enter currency you are interested in.');
config.newTextInput()
.setId('currencyCode')
.setName('ISO 4217 currency code')
.setHelpText('e.g. USD or EUR')
.setPlaceholder('EUR');
config.setDateRangeRequired(true);
return config.build();
}
```
Funkcja _**getSchema (request)**_ odpowiada za poinformowanie naszego konektora, jakie dane może on zwrócić. Listę pól pozwoliłem sobie wyłączyć do innej funkcji, gdyż później będzie jeszcze przydatna.
```r
function getSchema(request) {
var fields = getFields(request).build();
return { schema: fields };
}
function getFields(request) {
var cc = DataStudioApp.createCommunityConnector();
var fields = cc.getFields();
var types = cc.FieldType;
fields.newDimension()
.setId('effectiveDate')
.setName('effectiveDate')
.setDescription('date')
.setType(types.YEAR_MONTH_DAY);
fields.newMetric()
.setId('mid')
.setName('value')
.setType(types.CURRENCY_PLN);
return fields;
}
```
Najwięcej się dzieje, w funkcji _**getData(request).**_ W dużych projektach warto przeorganizować kod by był bardziej czytelny. Dla dobra artykułu pozostawiłem jednak wszystko bezpośrednio wewnątrz funkcji getData.
W pierwszych liniach, wydobywam z obiektu request, walutę, której dotyczy zapytanie oraz zakres dat. Z obiektu request pobieram też informacje odnośnie żądanych pól. Nasza funkcja musi zwracać wartości tylko dla tych, pól o które została poproszona.
Później następuje najważniejsza część funkcji. Przy użyciu obiektu **UrlFetchApp** pobieram dane z API banku. Na koniec dane z API formatujemy i zwracamy.
```r
function getData(request) {
var currencyCode = request.configParams.currencyCode;
var startDate = request.dateRange.startDate;
var endStart = request.dateRange.endDate;
var requestedFieldIds = request.fields.map(function(field) {
return field.name;
});
var requestedFields = getFields().forIds(requestedFieldIds);
var url = [
'https://api.nbp.pl/api/exchangerates/rates/A', currencyCode, startDate, endStart, '?format=json'
];
try {
var response = UrlFetchApp.fetch(url.join('/'));
} catch (err) {
console.log(err);
return {};
}
var rates = JSON.parse(response).rates;
var returnData = {
schema: requestedFields.build(),
rows: []
};
rates.forEach(function(rate){
var newRow = [];
requestedFieldIds.forEach(function(fieldName){
if(fieldName == 'effectiveDate') {
newRow.push(rate[fieldName].replace(/-/g, ''))
} else {
newRow.push(rate[fieldName])
}
})
returnData.rows.push({values: newRow});
});
return returnData;
}
```
Cały kod można znaleźć w [repozytorium github.](https://github.com/adeptofvoltron/google-data-studio-nbp-connector) Tak przygotowane pliki, są już gotowe do stworzenia konektora. Wystarczy w Google Script wcisnąć przycisk “Wdróż”. Można też taki konektor przetestować. Wystarczy kliknąć na strzałkę obok przycisku “Wdróż”. Z listy wybrać “Testuj wdrożenia”. Tam też wystarczy skopiować identyfikator. W raporcie Googla jako źródło danych trzeba wybrać “Utwórz własne” i wkleić wcześniej podany identyfikator.
## Podsumowując
Looker Studio (dawniej Data Studio) staje się potężnym narzędziem analitycznym, dającym nam wielkie możliwości. Stają się one jeszcze tym większe, kiedy nauczymy się sami podłączać do niego własne dane. W mojej praktyce zawodowej zdarzyło się, iż klient wolał tam otrzymać dane, którymi mógł manipulować w dowolny sposób, niż używać customowego dashboardu. Polecam wypróbować.