Ingresar

Conectar Power BI y Excel

Arma tus propios reportes de portafolio con los datos de Gantlog al día. Gantlog publica una lectura para BI en formato OData v4 que Power BI y Excel leen sin código: proyectos, fases, tareas, asignaciones, horas registradas y aprobadas, avance diario, curva S, alertas, carga y capacidad del equipo. Está incluida desde el plan Empresa.

Cada clave solo ve los proyectos que puede ver quien la creó y, si le pones una lista de proyectos, solo esos. Es de solo lectura.

1. Crea una clave para Power BI

  1. En Gantlog, como administrador, abre Integraciones → Nueva clave de API.
  2. Ponle un nombre (por ejemplo, «Power BI PMO») y marca solo el alcance Leer datos para Power BI y Excel (OData) (bi:read).
  3. Si el reporte es de algunos proyectos, elígelos en Proyectos. Copia la clave (glk_…): se muestra una vez.

La dirección de tu empresa es la de Gantlog seguida de /odata/v1, por ejemplo https://app.gantlog.com/odata/v1.

2. Abre la plantilla

  1. Descarga la plantilla de Power BI (.pbit) y ábrela con Power BI Desktop.
  2. En GantlogOData escribe la dirección de tu empresa (https://…/odata/v1) y pulsa Cargar.
  3. Cuando Power BI pida credenciales para esa dirección, elige Básica: en Nombre de usuario escribe cualquier texto (por ejemplo, powerbi) y en Contraseña pega la clave. Nivel de privacidad: Organizativo.
  4. Al terminar la carga tienes el modelo listo, con sus relaciones y medidas (Horas registradas, Horas aprobadas, Horas planificadas, Capacidad, Carga %, Alertas abiertas…) y tres páginas:
    • Portafolio: proyectos con avance real y esperado, semáforo y fin proyectado; alertas abiertas; curva S.
    • Carga del equipo: horas planificadas contra capacidad por persona y por día.
    • Horas: horas registradas y aprobadas por día, por proyecto y por persona.

Guárdala como un archivo .pbix tuyo y agrega las páginas que necesites.

Sin la plantilla

En Power BI Desktop: Obtener datos → Fuente OData, pega la dirección …/odata/v1, credencial Básica como arriba y elige las tablas en el navegador. Relaciónalas por projectId, taskId y userId (Power BI no las detecta solo).

Excel

Datos → Obtener datos → Desde otras fuentes → Desde fuente de datos OData, la misma dirección y la credencial Básica con la clave como contraseña. Para actualizar: Datos → Actualizar todo.

Actualización programada en el servicio de Power BI

Publica el informe y, en la configuración del modelo semántico, abre Credenciales del origen de datos: método Básico, la clave como contraseña y privacidad Organizativo. No hace falta una puerta de enlace: Gantlog se lee por internet con HTTPS. Programa las actualizaciones que necesites; cada página de datos cuenta como una petición en el límite mensual de tu plan (5000 filas por página).

Carga incremental

Toda tabla con modifiedAt registra la fecha y hora de su último cambio (UTC, con microsegundos). En Power BI, para tablas grandes como WorkLogs, usa la actualización incremental: crea los parámetros RangeStart y RangeEnd (fecha y hora), filtra la tabla por su fecha y activa Detectar cambios en los datos con modifiedAt. Gantlog recibe el filtro como $filter y solo lee ese rango.

= Table.SelectRows(WorkLogs, each [workDate] >= Date.From(RangeStart) and [workDate] < Date.From(RangeEnd))

Desde tu propio código, guarda el mayor modifiedAt que recibiste y pide solo lo que cambió después, siguiendo @odata.nextLink hasta que no venga:

curl -u "bi:$GANTLOG_API_KEY" "https://app.gantlog.com/odata/v1/WorkLogs?%24filter=modifiedAt%20gt%202026-10-29T12:00:00.123456Z"

Las filas borradas no se informan: desaparecen en la siguiente carga completa (o al refrescar la partición en Power BI). ProgressCurve, Users, PlannedHours y Capacity se cargan completas.

Conjuntos

ConjuntoQué traeColumnas principalesIncremental
ProjectsProyectos y tableros con los indicadores del planid, code, name, status, pmName, progressPct, expectedPct, scheduleStatus, finishDate, projectedFinish, finishDelayDays, tasks, tasksDonemodifiedAt
PhasesFases y subfases de los planesid, projectId, parentId, name, plannedStart, plannedFinishmodifiedAt
TasksTareas, subtareas e incidenciasid, projectId, parentId, key, name, status, plannedStart, plannedFinish, estimateHours, loggedHours, progressPct, expectedPct, scheduleStatusmodifiedAt
AssignmentsPersonas asignadas a cada tareaid, taskId, projectId, userId, userName, allocationPct, estimateHours, progressPctmodifiedAt
WorkLogsHoras registradas con su estado de aprobaciónid, taskId, projectId, userId, userName, workDate, hours, status, approved, decidedAtmodifiedAt
ProgressUpdatesAvance diario reportadoid, taskId, projectId, userId, reportDate, progressPctmodifiedAt
ProgressCurveCurva S de cada plan, un punto por díaprojectId, date, expectedPct, actualPctCompleta
AlertsAlertas abiertas y resueltasid, projectId, taskId, type, status, createdAt, resolvedAtmodifiedAt
UsersPersonas de la empresaid, fullName, role, status, supervisorIdCompleta
PlannedHoursHoras que el plan programa por persona, tarea y díataskId, projectId, userId, workDate, hoursCompleta
CapacityHoras disponibles de cada persona activa por díauserId, date, hoursCompleta

El modelo completo, con todos los campos y sus tipos, está en https://app.gantlog.com/odata/v1/$metadata. Los estados (status, scheduleStatus) van con sus códigos: ON_TRACK, AT_RISK, LATE; las horas DRAFT, SUBMITTED, APPROVED y REJECTED. Las fechas de Capacity van, si no las filtras, de 90 días atrás a 180 adelante.

Consultas y límites

  • Opciones: $filter (eq ne gt ge lt le, and or not, contains, startswith, endswith, tolower, toupper, year, month, day), $select, $orderby, $top, $skip y $count. Power BI las arma solo cuando filtras en Power Query.
  • Páginas de 5000 filas con @odata.nextLink (con Prefer: odata.maxpagesize=n, hasta 10 000).
  • No disponibles (responden 501): $expand, $apply, $search, ordenar por un indicador calculado y contar con un filtro sobre uno.
  • Autenticación: Authorization: Bearer glk_… o Basic con la clave como contraseña. Sin clave, 401; sin el alcance bi:read, 403.
  • Los mismos límites de uso de la API: por minuto por clave y por mes por empresa. Power BI reintenta solo si recibe 429.
  • Errores en el formato de OData: {"error": {"code": "bad-request", "message": "…"}}.