Analizar las finanzas de NetSuite, de la conexión al estado de pérdidas y ganancias
~45 minutos · una conexión activa con NetSuite, un libro mayor cargado, un estado mensual de pérdidas y ganancias, un análisis de antigüedad de cuentas por cobrar y una actualización programada
Este es el camino del primer día para un contralor o un analista de FP&A: al final habrá extraído su libro mayor directamente de NetSuite, lo habrá convertido en un estado mensual de pérdidas y ganancias que podrá leer como un estado financiero, habrá creado un análisis de antigüedad de cuentas por cobrar, habrá puesto ambos en un panel de control y habrá configurado todo para que se actualice por sí solo. Sin exportar a una hoja de cálculo ni volver a capturar datos manualmente: las cifras provienen de NetSuite y se mantienen al día.
Se conectará una vez, extraerá los datos una vez y luego hará lo que realmente importa: convertir las filas sin procesar del libro mayor en los resúmenes que una persona de negocios lee el lunes por la mañana.
Requisitos previos
Sección titulada «Requisitos previos»- Un espacio de trabajo de PlaidCloud y un proyecto en el que trabajar (inicie una prueba si necesita uno).
- Una conexión de NetSuite que funcione. Siga primero Conectarse a NetSuite: necesita OAuth 2.0 y los servicios web REST habilitados en NetSuite, el ID de cliente de la integración, un ID de certificado, el ID de su cuenta y el PEM de la clave privada. Confirme que Enviar solicitud de prueba aparece en verde antes de empezar aquí.
- No se necesita SQL para dar forma a los datos: lo hará con pasos de transformación estándar. El único texto de consulta es la extracción desde NetSuite, y se proporcionan todas las consultas de extracción. Mantenga abierto Ejemplos de consultas SuiteQL de NetSuite en una pestaña; este tutorial se basa en esa página.
Paso 1: Crear un flujo de trabajo
Sección titulada «Paso 1: Crear un flujo de trabajo»El flujo de trabajo es la canalización que extrae los datos y les da forma.
- Abra su proyecto y cambie a la pestaña Flujos de trabajo.
- Haga clic en Flujo de trabajo nuevo, asígnele un nombre como
NetSuite Financialsy ábralo.
Paso 2: Extraer el libro mayor
Sección titulada «Paso 2: Extraer el libro mayor»Una sola consulta SuiteQL le entrega un año de actividad contable (cada cuenta, cada mes), lo que basta para crear un estado de pérdidas y ganancias y, más adelante, otros estados financieros.
-
Agregue un paso Solicitud REST. En la pestaña Solicitud, defina Conexión con su conexión de NetSuite, Método con
POSTy Punto de conexión con/services/rest/query/v1/suiteql. -
En el Cuerpo, coloque esta consulta SuiteQL envuelta como
{"q": "…"}:SELECTTO_CHAR(t.trandate, 'YYYY-MM') AS period,a.accttype AS account_type,a.acctnumber AS account_number,BUILTIN.DF(a.id) AS account_name,tal.amount AS amountFROM transactionaccountingline talJOIN transaction t ON t.id = tal.transactionJOIN account a ON a.id = tal.accountWHERE tal.posting = 'T'AND tal.accountingbook = 1AND t.trandate BETWEEN TO_DATE('2026-01-01', 'YYYY-MM-DD')AND TO_DATE('2026-12-31', 'YYYY-MM-DD')ORDER BY period, a.acctnumber -
En la pestaña Respuesta, defina el destino como Tabla (llámela
netsuite_gl) y establezca los tipos de columna:amount→ Moneda, todo lo demás → Texto. (SuiteQL devuelve los números y las fechas como texto; el tipo es lo que permite queamountse sume.) -
Haga clic en Enviar solicitud de prueba para confirmar que se ejecuta y luego ejecute el paso. Ahora tiene una tabla
netsuite_gl: una fila por cuenta y por mes, con un importe contabilizado con signo.
Paso 3: Convertir el libro mayor en un estado de pérdidas y ganancias
Sección titulada «Paso 3: Convertir el libro mayor en un estado de pérdidas y ganancias»Ahora viene el análisis, que se hace con una sola transformación en la que basta con apuntar y hacer clic, sin SQL. Un estado de pérdidas y ganancias es simplemente el libro mayor resumido: cuentas de ingresos y de gastos, agrupadas en unas pocas líneas, con el signo invertido para que los ingresos se lean en positivo. Un paso Table Extract lo hace todo en sus pestañas Selección de datos de la tabla y Filtros de datos.
-
Agregue un paso Table Extract. Defina su Origen como
netsuite_gly su Destino como una tabla nueva,netsuite_pnl. -
En la pestaña Filtros de datos, conserve solo las cuentas de ingresos y de gastos (excluya las cuentas del balance general): agregue un filtro donde
account_typees uno deIncome,OthIncome,COGS,Expense,OthExpense. -
En la pestaña Selección de datos de la tabla, haga clic en Resumir para activar la agregación y luego configure tres columnas de destino:
period: asignada directamente desde el origen. Resumir Agrupar por.pnl_line: una expresión (a continuación) que convierte cada tipo de cuenta en una línea del informe. Resumir Agrupar por.amount: una expresiónnetsuite_gl.amount * -1(la inversión de signo). Resumir Suma.
Para
pnl_line, haga doble clic en su celda de expresión e ingrese lo siguiente (el editor le permite elegir las columnas y la funcióncasedel grupo Condiciones con solo apuntar y hacer clic):case((netsuite_gl.account_type.in_(['Income', 'OthIncome']), '1 - Revenue'),(netsuite_gl.account_type == 'COGS', '2 - Cost of Goods Sold'),(netsuite_gl.account_type.in_(['Expense', 'OthExpense']), '3 - Operating Expenses'),) -
Ejecute el paso.
La expresión amount * -1 es el único ajuste contable: al invertir el signo del importe positivo en el débito, los ingresos quedan en positivo y los costos en negativo, de modo que las tres líneas de cada mes suman la utilidad neta. Luego Suma con Agrupar por en period y pnl_line resume todas las cuentas en esas tres líneas por mes. Las expresiones usan el editor de PlaidCloud en el que basta con apuntar y hacer clic; consulte Uso avanzado del asignador de datos y la referencia de expresiones.
Paso 4: Léalo como un profesional de finanzas
Sección titulada «Paso 4: Léalo como un profesional de finanzas»Abra la tabla netsuite_pnl. Para cada mes tiene tres cifras:
| period | pnl_line | amount |
|---|---|---|
| 2026-01 | 1 - Revenue | 486,200.00 |
| 2026-01 | 2 - Cost of Goods Sold | -190,540.00 |
| 2026-01 | 3 - Operating Expenses | -212,880.00 |
Léalo directamente de ahí:
- Utilidad bruta = ingresos + costo de ventas (el costo de ventas ya es negativo) →
486,200 − 190,540 = 295,660. - Utilidad neta = la suma de las tres líneas →
82,780. - Margen bruto % = utilidad bruta ÷ ingresos → ~61 %.
Lo primero que debe hacer es cuadrarlo: ejecute el estado de resultados propio de NetSuite para el mismo mes y confirme que los ingresos y la utilidad neta coinciden. Si no coinciden, casi siempre se trata de una diferencia de alcance: un filtro de subsidiaria o moneda, o la alineación entre el período contable y la fecha de la transacción (consulte la nota sobre períodos). Confíe en la canalización solo cuando cuadre.
Paso 5: Crear un análisis de antigüedad de cuentas por cobrar
Sección titulada «Paso 5: Crear un análisis de antigüedad de cuentas por cobrar»El segundo logro del primer día sigue la misma estructura de conectar, extraer y dar forma. Comience con la receta de cuentas por cobrar abiertas y luego clasifique los datos según el atraso de cada factura.
-
Agregue otro paso Solicitud REST (la misma conexión,
POST, el punto de conexión de suiteql) con este cuerpo:SELECTt.tranid AS invoice_number,BUILTIN.DF(t.entity) AS customer,TO_CHAR(t.trandate, 'YYYY-MM-DD') AS invoice_date,TO_CHAR(t.duedate, 'YYYY-MM-DD') AS due_date,t.foreigntotal AS invoice_total,t.foreignamountunpaid AS amount_unpaidFROM transaction tWHERE t.type = 'CustInvc'AND t.foreignamountunpaid <> 0ORDER BY t.tranidCárguela como
netsuite_open_ar, coninvoice_totalyamount_unpaid→ Moneda,invoice_dateydue_date→ Fecha, y el resto → Texto. -
Agregue un paso Table Extract que lea
netsuite_open_aren una tabla nuevanetsuite_ar_aging. En la pestaña Selección de datos de la tabla, haga clic en Resumir y configure tres columnas de destino:aging_bucket: una expresión (a continuación) que etiqueta cada factura según su atraso. Resumir Agrupar por.invoices: cualquier columna, por ejemploinvoice_number. Resumir Recuento.balance: asignada desdeamount_unpaid. Resumir Suma.
Para
aging_bucket, ingrese esta expresión: mide los días de vencimiento (una fecha menos otra fecha da como resultado días) y etiqueta el rango:case(((func.today() - netsuite_open_ar.due_date) <= 0, '0 - Current'),((func.today() - netsuite_open_ar.due_date) <= 30, '1 - 1-30 days'),((func.today() - netsuite_open_ar.due_date) <= 60, '2 - 31-60 days'),((func.today() - netsuite_open_ar.due_date) <= 90, '3 - 61-90 days'),else_='4 - Over 90 days',) -
Ejecútelo.
netsuite_ar_agingahora le indica, en cinco filas, cuánto está al corriente frente a cuánto lleva vencido 30/60/90+ días, la vista de cobranza que una empresa lee primero. (due_datedebe tener el tipo Fecha para que la resta de fechas funcione; lo definió en la pestaña Respuesta del paso Solicitud REST anterior.)
Paso 6: Presentarlo en un panel de control
Sección titulada «Paso 6: Presentarlo en un panel de control»Las cifras en una tabla están bien, pero un gráfico es lo que se envía al director financiero. Publique netsuite_pnl y netsuite_ar_aging y luego siga Crear un panel de control para agregar:
- un gráfico de barras de la utilidad neta (o los ingresos) por
period, y - un gráfico circular o de barras del
balancede cuentas por cobrar poraging_bucket.
Eso es un panel de control financiero de NetSuite en vivo: sin exportar, y se actualiza cada vez que se ejecuta el flujo de trabajo.
Paso 7: Programar la actualización
Sección titulada «Paso 7: Programar la actualización»- Ejecute todo el flujo de trabajo una vez, de principio a fin, para confirmar que cada paso aparece en verde.
- Programe el flujo de trabajo: mensualmente con la cadencia del cierre, o cada noche si desea el análisis de antigüedad de cuentas por cobrar actualizado cada mañana.
Como cada extracción reemplaza la tabla completa, cada ejecución vuelve a extraer el segmento que define su cláusula WHERE; limítelas a la ventana que necesita (el año en curso, solo las facturas abiertas) en lugar de todo el historial.
Lo que ha creado
Sección titulada «Lo que ha creado»Partiendo de un flujo de trabajo vacío, extrajo datos en vivo del libro mayor y de las cuentas por cobrar de NetSuite, los convirtió en un estado mensual de pérdidas y ganancias y un análisis de antigüedad de cuentas por cobrar con dos pasos de transformación estándar y sin SQL, los presentó en un panel de control y los configuró para que se actualicen. Es el ciclo de informes esencial que ejecuta un equipo de finanzas, ahora automatizado.
Adónde ir después
Sección titulada «Adónde ir después»- Ejemplos de consultas SuiteQL de NetSuite: balance de comprobación, balance general, órdenes de venta abiertas, órdenes de compra e inventario para agregar al mismo flujo de trabajo.
- Paso Table Extract y Uso avanzado del asignador de datos: agrupación, filtrado y columnas calculadas para un análisis más profundo.
- Diseñar una dimensión con jerarquía: agrupe su plan de cuentas en grupos de informes que usted controla.
- Crear un panel de control: el tutorial completo de paneles de control.