company logo

Central de Ajuda

Acessar Coletum
Todas as coleçõesExportação de Dados e IntegraçõesComo integrar o novo webservice do Coletum ao Power BI?

Como integrar o novo webservice do Coletum ao Power BI?

Transforme seus dados em insights com Coletum e Power BI

André Smaniotto·29 de setembro de 2026

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.

Integrando os dados

Parte I - Configuração no Coletum Web

  1. Acesse o Coletum web com seu usuário administrador.

  2. Abra o menu principal e depois Web service.

  3. Selecione Adicionar token.

  4. Escreva o nome para identificar a integração e clique em Salvar.

  5. O novo token aparecerá disponível logo abaixo.

  6. Copie e armazene esse token.

Parte II - Configuração no Power BI Desktop

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

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

  3. 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
    ExpandAnswer
  1. O código será executado e o editor do Power Query abrirá para que você selecione e confirme os dados desejados para a importação.

  2. Veja a prévia dos dados e identifique as colunas que são relevantes e aquelas que podem ser removidas.

  3. 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.

  4. 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.

Conclusão

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.

info icon
Se precisar saber mais sobre o web service do Coletum, acesse o Manual - Coletum Web Service.

Esta resposta foi útil?
😞
😐
😁