O Custom Visualization Builder (CVB) é um ambiente de testes que oferece aos desenvolvedores um ambiente para criar e testar a visualização personalizada antes de adicioná-la ao Looker. Confira um exemplo de como usar essa ferramenta.
O CVB tem dois lados:
- O lado esquerdo, onde você vai escrever o código JavaScript da visualização.
- O lado direito, que também é dividido em duas seções:
- A seção de cima tem as seguintes guias:
- Resposta da consulta: onde você pode adicionar o formato JSON da resposta da consulta.
- Dados brutos. Insira aqui uma matriz dos dados retornados pelo Looker.
- Dependências, que também é uma guia obrigatória, então você precisa inserir uma matriz de string com os links do CDN de todas as dependências necessárias para a visualização.
- A seção inferior em que a visualização resultante é mostrada.
- A seção de cima tem as seguintes guias:
Digamos que você queira criar a seguinte visualização usando a biblioteca Chart.js:
O objeto de visualização tem duas propriedades obrigatórias: create
e a função updateAsync
. Este tutorial vai se concentrar na segunda, que é uma função chamada sempre que o estado da visualização precisa mudar. Ele sempre será chamado depois de create
e poderá ser chamado várias vezes.
Etapa 1: extrair e preparar os dados
Os dados serão transmitidos para a função updateAsync
usando o primeiro parâmetro, convencionalmente chamado de data
. O código a seguir percorre cada elemento desse objeto data
e envia os valores de dados para uma matriz actual_data
e os rótulos para uma matriz data_labels
. Essas duas matrizes serão usadas mais tarde para desenhar a visualização.
const data_labels = []
const actual_data = []
data.forEach((d)=>{
data_labels.push(d["Products Category"])
actual_data.push(d["Products Count"])
})
Etapa 2: anexar a visualização à página
O Chart.js precisa de um canvas
para renderizar a visualização na página. Você precisa criar um elemento canvas
com uma id
de sua escolha (myChart
é usado neste tutorial) e anexar esse canvas
ao elemento div
que o CVB usa para renderizar a visualização. Esse div
tem um atributo id chamado vis
.
const vizCanvas = document.createElement('canvas')
vizCanvas.setAttribute("id", "myChart")
const vizDiv = document.getElementById("vis")
vizDiv.appendChild(vizCanvas)
Etapa 3: desenhar a visualização na página
Agora que você tem um elemento canvas
na página com um ID de myChart
, é possível segmentar esse elemento e desenhar a visualização assim:
const ctx = document.getElementById("myChart")
const myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: data_labels,
datasets: [{
label: 'Top 5 Product Category',
data: actual_data,
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
},
}
});
doneRendering()
É importante chamar a função doneRendering
no final para indicar que a visualização foi renderizada por completo. Isso é especialmente importante se a visualização precisar realizar chamadas assíncronas ou precisar ser renderizada como um PDF.
O código final vai ficar assim:
const visObject = {
create: function(element, config){
element.innerHTML = "";
},
updateAsync: function (data, element, config, queryResponse, details, doneRendering) {
const data_labels = []
const actual_data = []
data.forEach((d)=>{
data_labels.push(d["Products Category"])
actual_data.push(d["Products Count"])
})
const vizCanvas = document.createElement('canvas')
vizCanvas.setAttribute("id", "myChart")
const vizDiv = document.getElementById("vis")
vizDiv.appendChild(vizCanvas)
const ctx = document.getElementById("myChart")
const myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: data_labels,
datasets: [{
label: 'Top 5 Product Category',
data: actual_data,
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
},
}
});
doneRendering()
}
};
looker.plugins.visualizations.add(visObject);
Dados do Looker
Estes são os dados retornados pelo Looker que você pode fornecer na guia DADOS BRUTOS do CVB:
[{"Products Category":"Jumpsuits & Rompers","Products Count":"162"},
{"Products Category":"Suits","Products Count":"184"},
{"Products Category":"Skirts","Products Count":"364"},
{"Products Category":"Plus","Products Count":"439"},
{"Products Category":"Blazers & Jackets","Products Count":"551"}]
Dependências
Confira a dependência necessária para renderizar essa visualização:
["https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js"]
Resposta da consulta
Para extrair a resposta da consulta no Looker, faça uma chamada de API para o endpoint Get Query.
Etapa final
Quando o código estiver funcionando e a visualização for renderizada conforme o esperado, siga as etapas descritas na documentação para enviar a visualização ao Looker.