dcorreah / powerbi
Power BI reports (backend + Vue) para Laravel
dev-main
2025-09-12 15:20 UTC
Requires
- php: ^8.3
- illuminate/http: ^12.0
- illuminate/support: ^12.0
This package is auto-updated.
Last update: 2026-03-12 16:26:40 UTC
README
Integración de reportes Power BI para Laravel (backend + Vue). Mantiene el flujo de autenticación actual (ROPC con AAD) y compatibilidad de filtros por usuario.
Requisitos
- PHP 8.3+
- Laravel 11+
- Inertia + Vue 3 (Vite) en el proyecto host
- NPM/Yarn (para
powerbi-client)
Instalación
- Instalar el paquete
# Dentro de tu stack (ejemplo con Docker)
docker compose exec app composer require dcorreah/powerbi
- Publicar configuración, migraciones y assets Vue
docker compose exec app php artisan vendor:publish --provider="dcorreah\\PowerBI\\PowerBIServiceProvider" --tag=powerbi-config --force
docker compose exec app php artisan vendor:publish --provider="dcorreah\\PowerBI\\PowerBIServiceProvider" --tag=powerbi-migrations --force
docker compose exec app php artisan vendor:publish --provider="dcorreah\\PowerBI\\PowerBIServiceProvider" --tag=powerbi-assets --force
- Ejecutar migraciones
docker compose exec app php artisan migrate
- Configurar variables de entorno (
.env)
POWERBI_USER_ID=
POWERBI_GRANT_TYPE=password
POWERBI_CLIENT_ID=
POWERBI_CLIENT_SECRET=
POWERBI_RESOURCE=https://analysis.windows.net/powerbi/api
POWERBI_USERNAME=
POWERBI_PASSWORD=
# Opcionales del paquete
POWERBI_REGISTER_ROUTES=true
POWERBI_ROUTE_PREFIX=reports
Integración en el modelo User
Ańade el trait para la relación con reportes Power BI:
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use dcorreah\PowerBI\Traits\HasPowerBIReports;
class User extends Authenticatable
{
use HasPowerBIReports;
}
Frontend
- Instalar dependencias
npm i powerbi-client powerbi-client-vue-js
- Usa el componente publicado en
resources/js/vendor/powerbi/Components/ReportViewer.vuedentro de tu página Inertia. Si no tienes la página, crearesources/js/Pages/Report/View.vue:
<template>
<div class="p-4">
<ReportViewer :report="report" />
</div>
</template>
<script setup>
import ReportViewer from '@/vendor/powerbi/Components/ReportViewer.vue'
const props = defineProps({
report: { type: Object, required: true }
})
</script>
El controlador del paquete enviará la prop report con report_id, embedUrl, token y filter_array.
Rutas incluidas
- Prefijo configurable:
POWERBI_ROUTE_PREFIX(por defectoreports). - Middleware:
web,auth. - Nombres de ruta:
report.index→ GET/{prefix}report.view→ GET/{prefix}/{groupId}/{reportId}/view
Si POWERBI_REGISTER_ROUTES=false, puedes cargar tus propias rutas y usar los controladores del paquete directamente.
Modelo y tablas
El paquete crea las tablas (compatibles con tu app):
reports(campos:name,group_id,report_id,access_level,dataset_id,user_id,token,expiration_date, flagsorder,commission,portfolio).report_filters(definición de filtros).user_reports(pivot User↔Report conshow).pvt_report_user_filters(pivot Report↔Filter por usuario).global_tokens(almacenamiento del token AAD global).
Asignación rápida de reportes a usuarios (Tinker)
docker compose exec app php artisan tinker
use dcorreah\PowerBI\Models\Report;
$report = Report::create([
'name' => 'Mi Reporte',
'group_id' => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
'report_id' => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
'access_level' => 'View',
'dataset_id' => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
'user_id' => 1,
]);
$user = \App\Models\User::find(1);
$user->reports()->attach($report->id, ['show' => true]);
Autenticación y tokens
- Flujo: ROPC (grant_type=password) contra
https://login.windows.net/common/oauth2/token. - El token se almacena en
global_tokensy se renueva segúnexpires_in. - Frontend usa
tokenType: Aady oculta el panel de filtros.
Configuración avanzada
POWERBI_ROUTE_PREFIX: cambia el prefijo de rutas (por ejemplo,analytics).POWERBI_REGISTER_ROUTES: desactívalo para registrar tus propias rutas.
Notas
- Para filtros por usuario, usa
report_filtersy la relación pivot; el paquete calcularáfilter_arrayautomáticamente para el usuario autenticado. - Si usas Spatie Roles, se mostrará todo para
super-admin; de lo contrario, se listan los reportes asociados al usuario. - Asegúrate de no exponer credenciales AAD en el frontend; todo el intercambio ocurre en el backend.