Integrar o Coletum com o Power BI permite que você aproveite ao máximo os dados coletados pela nossa plataforma. Com a integração, você pode criar dashboards sofisticados e realizar análises mais profundas dos seus dados.
Acesse o Coletum web com seu usuário administrador.
Abra o menu principal e depois Web service.

Selecione Adicionar token.

Escreva o nome para identificar a integração e clique em Salvar.
O novo token aparecerá disponível logo abaixo.
Copie e armazene esse token.

Abra o Power BI Desktop. No menu Página Inicial, selecione Obter Dados e depois a opção Consulta em branco.

Na nova consulta criada, clique com o botão direito em cima da consulta e selecione a opção "Editor Avançado".

No editor, substitua todo o conteúdo pelo código abaixo e ajuste com o token criado anteriormente e o id do formulário à ser integrado, logo nas primeiras linhas do código. Clique no botão de “Concluído”
let
Token = "MEU TOKEN DO COLETUM",
FormId = "ID_DO_FORMULÁRIO_A_SER_INTEGRADO",
BaseUrl = "https://coletum.com/api/webservice/v2/forms/" & FormId & "/answers",
GetPage = (page as number) =>
let
Source = Json.Document(
Web.Contents(
BaseUrl,
[
Query = [
page = Text.From(page),
page_size = "500"
],
Headers = [
Token = Token
]
]
)
)
in
Source,
AllPages =
List.Generate(
() => [Page = 1, Result = GetPage(1)],
each [Result] <> null,
each
[
Page = [Page] + 1,
Result =
if [Result][pagination][has_next]
then GetPage([Page])
else null
],
each [Result]
),
ValidPages = List.RemoveNulls(AllPages),
AllData =
List.Combine(
List.Transform(ValidPages, each _[data])
),
ToTable =
Table.FromList(
AllData,
Splitter.SplitByNothing(),
null,
null,
ExtraValues.Error
),
ExpandRoot =
Table.ExpandRecordColumn(
ToTable,
"Column1",
{"id", "answer", "meta_data"}
),
// Tipagem do ID
Typed =
Table.TransformColumnTypes(
ExpandRoot,
{{"id", type text}}
),
ExpandMeta =
Table.ExpandRecordColumn(
Typed,
"meta_data",
{
"created_at",
"updated_at",
"created_by_user_id",
"created_by_user_name",
"updated_by_user_id",
"updated_by_user_name",
"created_at_source",
"updated_at_source",
"total_size",
"created_at_coordinates",
"updated_at_coordinates"
},
{
"meta_data.created_at",
"meta_data.updated_at",
"meta_data.created_by_user_id",
"meta_data.created_by_user_name",
"meta_data.updated_by_user_id",
"meta_data.updated_by_user_name",
"meta_data.created_at_source",
"meta_data.updated_at_source",
"meta_data.total_size",
"meta_data.created_at_coordinates",
"meta_data.updated_at_coordinates"
}
),
// Cast seguro das datas com fuso horário (suporta null)
TypedDates =
Table.TransformColumns(
ExpandMeta,
{
{
"meta_data.created_at",
each try DateTimeZone.From(_) otherwise null,
type datetimezone
},
{
"meta_data.updated_at",
each try DateTimeZone.From(_) otherwise null,
type datetimezone
}
}
),
// Tipagem dos campos escalares do meta_data
TypedMeta =
Table.TransformColumnTypes(
TypedDates,
{
{"meta_data.created_by_user_id", Int64.Type},
{"meta_data.updated_by_user_id", Int64.Type},
{"meta_data.created_by_user_name", type text},
{"meta_data.updated_by_user_name", type text},
{"meta_data.created_at_source", type text},
{"meta_data.updated_at_source", type text},
{"meta_data.total_size", Int64.Type}
}
),
// Expandir coordenadas de criação (GeoJSON Point: coordinates[0]=longitude, [1]=latitude)
ExpandCreatedCoords =
Table.TransformColumns(
TypedMeta,
{
{
"meta_data.created_at_coordinates",
each
if _ = null
then [longitude = null, latitude = null]
else [longitude = _[coordinates]{0}, latitude = _[coordinates]{1}]
}
}
),
SplitCreatedCoords =
Table.ExpandRecordColumn(
ExpandCreatedCoords,
"meta_data.created_at_coordinates",
{"longitude", "latitude"},
{"meta_data.created_at_longitude", "meta_data.created_at_latitude"}
),
// Expandir coordenadas de atualização
ExpandUpdatedCoords =
Table.TransformColumns(
SplitCreatedCoords,
{
{
"meta_data.updated_at_coordinates",
each
if _ = null
then [longitude = null, latitude = null]
else [longitude = _[coordinates]{0}, latitude = _[coordinates]{1}]
}
}
),
SplitUpdatedCoords =
Table.ExpandRecordColumn(
ExpandUpdatedCoords,
"meta_data.updated_at_coordinates",
{"longitude", "latitude"},
{"meta_data.updated_at_longitude", "meta_data.updated_at_latitude"}
),
// Tipagem final das coordenadas (nullable number)
TypedCoords =
Table.TransformColumnTypes(
SplitUpdatedCoords,
{
{"meta_data.created_at_longitude", type number},
{"meta_data.created_at_latitude", type number},
{"meta_data.updated_at_longitude", type number},
{"meta_data.updated_at_latitude", type number}
}
),
// Expandir answer dinamicamente com prefixo
AnswerColumns =
if Table.IsEmpty(TypedCoords)
then {}
else
List.Distinct(
List.Combine(
List.Transform(
Table.Column(TypedCoords, "answer"),
each if _ = null then {} else Record.FieldNames(_)
)
)
),
PrefixedAnswerColumns =
List.Transform(AnswerColumns, each "answer." & _),
ExpandAnswer =
Table.ExpandRecordColumn(
TypedCoords,
"answer",
AnswerColumns,
PrefixedAnswerColumns
)
in
ExpandAnswerO código será executado e o editor do Power Query abrirá para que você selecione e confirme os dados desejados para a importação.

Veja a prévia dos dados e identifique as colunas que são relevantes e aquelas que podem ser removidas.
Depois de concluir a seleção dos dados necessários, proceda com outras ações necessárias no tratamento dos dados, como correção do formato de cada coluna, divisão de colunas e dados, etc.
Selecione a opção Fechar e Aplicar no Power Query para confirmar e fazer a importação oficial dos dados.
Pronto! Com isso estará apto a seguir com as etapas de análise e criação de dashboards.
A integração do Coletum com o Power BI pode transformar a maneira como você analisa e utiliza os dados coletados. Seguindo esses passos, você garante que apenas os dados relevantes sejam carregados e utilizados no Power BI, facilitando as análises e criação de relatórios precisos e insights valiosos. Além disso, a configuração de atualizações automáticas garante que seus dashboards estejam sempre com os dados atualizados em tempo real.