URLs de las APIS de SMARTFENSE
A continuación enumeramos todas las APIs disponibles en SMARTFENSE:
Módulos interactivos: https://instancia.takesecurity.com/api/related-training-campaigns/
Newsletters: https://instancia.takesecurity.com/api/related-newsletter-campaigns/
Phishing: https://instancia.takesecurity.com/api/related-phishing-campaigns/
Ransomware: https://instancia.takesecurity.com/api/related-ransomware-campaigns/
Vídeos: https://instancia.takesecurity.com/api/related-video-campaigns/
Exámenes: https://instancia.takesecurity.com/api/related-exam-campaigns/
Encuestas: https://instancia.takesecurity.com/api/related-survey-campaigns/
Importante: Deberás reemplazar la palabra instancia de la url de cada API por el subdomino de la instancia en cuestión.
Para conectar nuestras APIs a Microsoft Power BI:
1- Iniciar Power BI. Ir a la sección de Obtener datos de otros orígenes
2- En la ventana de Obtener datos, seleccionar del menú lateral izquierdo Otras y seleccionar Web, luego clic en Conectar.
3- Allí dejar seleccionado "Básico" y colocar la URL de la API que desean conectar en Dirección URL, luego hacer clic en Aceptar.
La URL debe tener el subdominio de la instancia de SMARTFENSE.
Importante: También deben estar logueado a la vez en la instancia de SMARTFENSE con el mismo usuario administrador que utilizarán aquí para establecer la conexión.
4- Por último en la ventana "Acceder a contenido web" les solicitará iniciar sesión, seleccionar la opción del menú lateral izquierdo: Básico luego deben colocar las credenciales de usuario administrador de la instancia de SMARTFENSE, Nombre de usuario y Contraseña y en "Seleccionar en qué nivel hay que aplicar esta configuración" deben colocar la URL de la instancia, como se ve en la imagen. Clic en Conectar
En caso que no se pueda conectar
Si la conexión no se establece y se obtiene el siguiente error, hacer clic en Cancelar
Ir al menú Archivo
En el menú lateral izquierdo de abajo seleccionar Opciones y configuración luego seleccionar Configuración de origenes de datos
En la ventana de Configuración de origen de datos, seleccionar la opción "Permisos globales", seleccionar la url de la instancia de SMARTFENSE, en la lista desplegable de abajo Borrar permisos seleccionar Borrar todos los permisos.
En la siguiente ventana hacer clic en Eliminar, luego Cerrar
Una vez realizado este proceso volver a realizar la conexión desde el paso 1 asegurandose de tener seleccionada la opción de Básico del paso 4 y colocar correctamente las credenciales de acceso.
Una vez establecida la conexión
1- Si la conexión fue exitosa se nos abrirá el Editor de Power Query mostrando la siguiente información:
2- Si la información obtenida a través de la API supera las 100 filas, debemos utilizar una función para que la tabla nos muestre la información de todas las páginas, ya que pagina de a 100 filas.
2.1- En la sección de Consultas, debajo de la consulta ya creada, hacemos clic con el botón derecho > Nueva Consulta > Consulta en blanco
2.2 - A la derecha dentro de Propiedades le colocamos el nombre a función: GetPage.
2.3 - Sobre la consulta GetPage que hemos creado, a la izquierda, hacemos clic con el botón derecho > Editor avanzado
2.4 - En el editor avanzado eliminamos los datos precargados y copiamos la siguiente función, sin dejar espacios arriba ni abajo, luego hacemos clic en "Listo".
let
// Función para obtener una página de datos
GetPage = (url as text) =>
let
Source = Json.Document(Web.Contents(url)),
Results = Source[results],
NextPage = if Record.HasFields(Source, "next") then Source[next] else null
in
[Results=Results, NextPage=NextPage]
in
GetPage
2.5 - En la Consulta inicial (donde tenemos los datos obtenidos por la API) a la izquierda, hacemos clic con el botón derecho > Editor avanzado
2.6 - Eliminamos la función que trae y copiamos la siguiente, cambiado el subdominio de la URL por el subdominio de la instancia. Debemos usar la URL de la API que utilizamos para la conexión, con el subdominio de la instancia correcta y añadiendo /?page=1. Luego hacemos clic en "Listo".
let
// URL inicial de la API
InitialUrl = "https://instancia.takesecurity.com/api/related-training-campaigns/?page=1",
// Función para obtener todas las páginas
GetAllPages = (url as text) =>
let
// Inicializar la primera página
FirstPage = GetPage(url),
FirstResults = FirstPage[Results],
FirstNextPage = FirstPage[NextPage],
// Función para obtener todas las páginas de manera iterativa
GetAllPagesIteratively = (url as text) =>
let
PagesList = List.Generate(
() => [Url = url, Page = GetPage(url)],
each [Url] <> null,
each [Url = [Page][NextPage], Page = if [Url] <> null then GetPage([Url]) else [Results = {}, NextPage = null]],
each [Page][Results]
),
AllResults = List.Combine(PagesList)
in
AllResults
in
GetAllPagesIteratively(url),
// Obtener todos los datos desde la URL inicial
AllData = GetAllPages(InitialUrl),
// Convertir la lista en una tabla
ResultTable = Table.FromList(AllData, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
// Expandir los registros (ajusta los nombres de campo según tu API)
ExpandedData = Table.ExpandRecordColumn(ResultTable, "Column1", {"first_name", "last_name", "email", "groups", "functional_areas", "hierarchical_levels", "related_campaigns"}, {"first_name", "last_name", "email", "groups", "functional_areas", "hierarchical_levels", "related_campaigns"}),
#"Se expandió related_campaigns" = Table.ExpandListColumn(ExpandedData, "related_campaigns"),
#"Se expandió related_campaigns1" = Table.ExpandRecordColumn(#"Se expandió related_campaigns", "related_campaigns", {"campaign_mode","campaign_name","campaign_description","campaign_state","campaign_date","campaign_expiration_date","campaign_is_test","content_name","content_type","activity_sent","activity_sent_date","notify_user_on_creation","user_notification_on_creation","activity_started","activity_started_date","activity_completed","activity_completed_date"}),
#"Se expandió hierarchical_levels" = Table.ExpandListColumn(#"Se expandió related_campaigns1", "hierarchical_levels"),
#"Se expandió functional_areas" = Table.ExpandListColumn(#"Se expandió hierarchical_levels", "functional_areas"),
#"Se expandió groups" = Table.ExpandListColumn(#"Se expandió functional_areas", "groups")
in
#"Se expandió groups"
2.7 - En caso de ser necesario expandimos las columnas necesarias, como se detalla en los siguientes pasos.
3- Con la barra inferior movemos a la derecha hasta ver la columna results.related_campaigns y hacemos clic en el botón de expandir de la columna
3- Seleccionamos Expandir en nuevas fila
4- Hacemos nuevamente clic en el botón expandir de la columna para ver los datos que nos traerá y allí podemos seleccionar todos o los que deseemos ver. Clic en Aceptar
5- De esta forma visualizaremos todos los datos de los resultados de las campañas del componente en distintas columnas.
6- Luego podemos ir al Menú superior y Cerrar y aplicar para avanzar con la creación de las consultas que se deseen realizar.
Consideraciones finales:
La actualización es en tiempo real, si desde PowerBI se presiona el botón "Actualizar" cargará los datos actuales.
No se realiza una actualización cada cierto tiempo de los datos de la instancia, sino que hay que realizar una actualización manualmente para obtener los datos que actualmente tiene la instancia de nuestra plataforma.