Loading

Mostrar sumas cero en informes y gráficos

Fecha de publicación: Apr 3, 2026
Descripción
Al ejecutar un informe agrupado en Salesforce, si no hay datos de una agrupación específica, el informe no muestra nada. Esto puede ser frustrante, en especial, al agrupar por fecha e intentar analizar una tendencia. Los gráficos solo muestran las fechas con un valor, lo cual dificulta identificar periodos sin datos. Como resultado, es posible que no podamos identificar periodos en los que los negocios fueron particularmente malos.

Actualmente, hay una idea relacionada a este problema, que se puede encontrar en el vínculo siguiente:
 Allow zero-sum in reports (Permitir sumas cero en informes)
Solución
El objetivo de este ejemplo es generar un informe basado en el objeto Oportunidad, con el foco puesto en agrupar los datos por propietarios y fecha de cierre; sin embargo, es importante tener en cuenta que el mismo enfoque puede adaptarse también a cualquier otro objeto. 

Crear un nuevo campo Fórmula en el objeto Oportunidad
Crear un flujo desencadenado por programación en Oportunidades
Crear un flujo desencadenado por registros
Crear un segundo flujo desencadenado por registros

_____________________________________________________________________________________

Crear un nuevo campo Fórmula en el objeto Oportunidad
Paso 1: En cualquier página de Lightning, haga clic en el icono de engranaje en la esquina superior derecha. Seleccione Configuración y navegue a la ficha Gestor de objetos. Desplácese por la lista de objetos disponibles hasta que encuentre Oportunidad. Cuando lo vea, haga clic en él para seleccionarlo.
Paso 2: En la barra lateral, haga clic en Campos y relaciones.
Paso 3: Haga clic en Nuevo para crear un campo personalizado.
Paso 4: Elija Fórmula como Tipo de datos del campo y haga clic en el botón Siguiente.
Paso 5: Ingrese el nombre de la fórmula en la sección Etiqueta de campo como Recuento de oportunidades. El Nombre de campo se completa automáticamente. Seleccione Número como Tipo de devolución de fórmula y configure Posiciones decimales en 0, luego haga clic en el botón Siguiente.
Paso 6: Ingrese la Fórmula siguiente (consulte la Fórmula de muestra) en Lienzo de fórmula y haga clic en el botón Comprobar sintaxis para asegurarse de que no haya errores. Opcionalmente, complete la Descripción y el cuadro Texto de ayuda.
Paso 7. En la sección Tratamiento de campos en blanco, seleccione Tratar los campos vacíos como espacios en blanco. Haga clic en el botón Siguiente.
Paso 8. Configure la seguridad A nivel de campo para determinar si el campo debería ser visible para perfiles y conjuntos de permisos específicos, y haga clic en Siguiente
Paso 9. Elija los Formatos de página que deberían mostrar el campo y luego presione el botón Guardar.
 
fomula.jpg
 
Fórmula de ejemplo:
IF(Name="DUMMY OPP",0,1)

Crear un flujo desencadenado por programación en Oportunidades
Paso 1: En cualquier página de Lightning, haga clic en el icono de engranaje en la esquina superior derecha. 
Paso 2: Seleccione Configuración y, en el cuadro Búsqueda rápida, introduzca y haga clic en Flujos.
Paso 3: Haga clic en el botón Nuevo flujo.
Paso 4: Seleccione Flujo desencadenado por programación y haga clic en el botón Crear.
 
image.png

Paso 5: Haga clic en +Definir programación, luego seleccione la fecha del día siguiente y configure la hora hasta la medianoche. Asegúrese de que la Frecuencia esté configurada como Diaria y haga clic en Listo.
 
Set Scheduled.PNG
Daily.PNG

Paso 6: Haga clic en el vínculo +Seleccionar objeto (opcional) en el elemento Inicio y configure el objeto en Usuario.
 
Set Scheduled - Copy.PNG

Paso 7: Aplique todos los filtros necesarios. Por ejemplo, es posible que desee excluir a los usuarios de Experience Cloud (al menos, el usuario invitado, si está en uso, debe excluirse; de lo contrario, generará errores). Asegúrese de haber excluido a los usuarios inactivos mediante filtrado. Haga clic en Listo.
 
Filter Condition.png

Paso 8: Agregue el elemento Crear registros al lienzo.
a. En Diseñador de flujos, haga clic en el icono + y seleccione el elemento Crear registros.
b. Introduzca un Nombre para el elemento en el campo Etiqueta. El Nombre de API se completará automáticamente.
c. Seleccione Uno en Cuántos registros crear y Utilizar recursos independientes y valores literales en la sección Cómo establecer los campos de registro.
d. Configure el objeto como Oportunidad.
e. Agregue los valores de campo necesarios, asegurándose de que los campos obligatorios tengan un valor.
 i. Como este elemento creará Oportunidades, asegúrese de configurar OwnerId con $Record.Id.
 ii. En Fecha de cierre, configure {!$Flow.CurrentDate}.
 iii. El Nombre también debería ser único y coincidir exactamente con el valor en el campo de la fórmula que se creó antes. En este artículo, usaremos DUMMY OPP a modo de ejemplo.
 iv. Por último, configure la Etapa, dado que es un campo obligatorio:


Su flujo desencadenado por programación ahora debe tener el siguiente aspecto:


Paso 9: Guarde y active su flujo.

Nota: También es posible ejecutar otro flujo desencadenado por programación para crear oportunidades pasadas o futuras, pero este enfoque puede ser más complejo y generar una gran cantidad de registros que deben crearse. Por lo tanto, es importante ser consciente de los límites del almacenamiento y flujos para evitar problemas.

Crear un flujo desencadenado por registros
Paso 1: Haga clic en la flecha Atrás ubicada en la esquina superior izquierda del lienzo de Flow Builder y haga clic en el botón Nuevo flujo.
Paso 2: Configure el objeto en Oportunidad y seleccione Se crea o se actualiza un registro en la sección Desencadenar el flujo cuando.
Paso 3: Configure el menú desplegable Requisitos de condición en La fórmula se evalúa como verdadera e introduzca la fórmula (consulte la fórmula de muestra) en el lienzo de fórmula. A continuación, haga clic en el botón Comprobar sintaxis para asegurarse de que no haya errores.
 
Record Triggered.PNG
Record Triggered 2.PNG

Fórmula de ejemplo:
AND({!$Record.Name}<>"DUMMY OPP",OR(ISNEW(),ISCHANGED({!$Record.CloseDate})))
Paso 4: Configure la sección Cuándo ejecutar el flujo para registros actualizados como Cada vez que un registro se actualiza y cumple los requisitos de condición.
Paso 5. En Optimizar el flujo para, seleccione Acciones y registros relacionados y haga clic en Listo.
Paso 6. Agregue un elemento Obtener registros.
a. En Diseñador de flujos, haga clic en el icono + y seleccione el elemento Obtener registros.
b. Introduzca un Nombre para el elemento en el campo Etiqueta (por ejemplo, Recuperar oportunidad ficticia). El Nombre de API se completará automáticamente.
c. Configure el menú desplegable Requisitos de condición como Se cumplen todas las condiciones (AND). Agregue los detalles siguientes como Condiciones de filtro:
 
Primera condición de filtro
  • Campo: Nombre
  • Operador: Equals
  • Valor: DUMMY OPP
Segunda condición de filtro
  • Campo: OwnerId
  • Operador: Equals
  • Valor: {!$Record.OwnerId}
Tercera condición de filtro
  • Campo: Fecha de cierre
  • Operador: Equals
  • Valor:  {!$Record.CloseDate}
d. Configure Cuántos registros almacenar como Solo el primer registro Cómo almacenar datos de registros como Almacenar automáticamente todo, y haga clic en Listo.

Get Records.PNG
image.png

Paso 7: Agregue un elemento Decisión.
a. En el Diseñador de flujos, haga clic en el icono + y seleccione el elemento Decisión.
b. Introduzca un Nombre para el elemento en el campo Etiqueta (por ejemplo, ¿Se encontraron registros?). El Nombre de API se completará automáticamente.
c. Cambie el nombre de Nuevo resultado y configure los filtros de la siguiente manera: 
  • Variable: {!Retrieve_Dummy_Opportunity.Id}
  • Operador: Es nulo
  • Valor: {!$GlobalConstant.False} 
d. Cambie el Nombre del Resultado predeterminado a No (opcional). Haga clic en Listo.
 
image.png

Paso 8:  Termine el flujo en la rama No (predeterminado) del elemento Decisión.
Paso 9. En la rama , agregue un elemento Eliminar registros
a. En Diseñador de flujos, debajo del nodo , haga clic en el icono + y seleccione el elemento Eliminar registros.
b. Introduzca un Nombre para el elemento en el campo Etiqueta (por ejemplo, Eliminar oportunidades ficticias). El Nombre de API se completará automáticamente.
c. Seleccione Utilizar los Id. almacenados en una variable de registro o variable de colección de registros en la sección Cómo buscar registros para eliminar.
d. Introduzca la variable Obtener registro ({!Retrieve_Dummy_Opportunity}) en el campo Registro o recopilación de registros y haga clic en Listo. 

image.png
 
Su flujo desencadenado por registros debe tener el siguiente aspecto: 
 

Paso 10: Guarde y active su flujo.

Crear un segundo flujo desencadenado por registros
Paso 1: Haga clic en la flecha Atrás ubicada en la esquina superior izquierda del lienzo de Flow Builder y haga clic en el botón Nuevo flujo.
Paso 2: Configure el objeto en Oportunidad y seleccione Se elimina un registro en la sección Desencadenar el flujo cuando.
Paso 3: Configure el menú desplegable Requisitos de condición como Se cumplen todas las condiciones (AND) y agregue los detalles siguientes como sus Condiciones de entrada:
  • Campo: Nombre
  • Operador: No es igual a
  • Valor: DUMMY OPP

Delete Element.PNG

Paso 4: Haga clic en Listo.
Paso 5. Agregue un elemento Obtener registros al lienzo.
a. En Diseñador de flujos, haga clic en el icono + y seleccione el elemento Obtener registros.
b. Introduzca un Nombre para el elemento en el campo Etiqueta (por ejemplo, ¿Se encontraron registros?). El Nombre de API se completará automáticamente. Agregue los detalles siguientes como Condiciones de filtro:

Primera condición de filtro
  • Campo: Nombre
  • Operador: Does Not Equal
  • Valor: DUMMY OPP
Segunda condición de filtro
  • Campo: Fecha de cierre
  • Operador: Equals
  • Valor: {!$Record.CloseDate}
Tercera condición de filtro
  • Campo: OwnerId
  • Operador: Equals
  • Valor: {!$Record.OwnerId}
Cuarta condición de filtro
  • Campo: Id.
  • Operador: Does Not Equal
  • Valor: {!$Record.Id}
Quinta condición de filtro
  • Campo: Fecha de cierre
  • Operador: Menor o igual que
  • Valor: {!$Flow.CurrentDate}
c. Configure Cuántos registros almacenar como Solo el primer registro Cómo almacenar datos de registros como Almacenar automáticamente todo. Luego, haga clic en el botón Listo.

Nota: Elimine el último filtro si también creó registros DUMMY OPP futuros.
 
Edit Get Records.png

Paso 6: Agregue un elemento Decisión.
a. En el Diseñador de flujos, haga clic en el icono + y seleccione el elemento Decisión.
b. Introduzca un Nombre para el elemento en el campo Etiqueta (por ejemplo, ¿Se encontraron registros?). El Nombre de API se completará automáticamente.
c. Cambie el Nombre del nuevo resultado a  y configure los filtros de la siguiente manera:
  • Campo: {!Retrieve_opportunities.Id}
  • Operador: Es nulo
  • Valor: {!$GlobalConstant.False}
d. Cambie el nombre del Resultado predeterminado a No (opcional). Haga clic en Listo.
 
Record Found.PNG

Paso 7: Termine el flujo en la rama .
Paso 8: En la rama No de la decisión, agregue un elemento Crear registros para crear la oportunidad ficticia, similar al primer flujo desencadenado por programación. Sin embargo, esta vez configure la Fecha de cierre como {!$Record.CloseDate}. Haga clic en Done (Listo).
 
Edit Create Records.png

Su segundo flujo desencadenado por registros debe tener el siguiente aspecto:
 

Paso 9: Guarde y active su flujo.
 
Ahora puede crear un informe sobre las oportunidades que tienen una fecha de cierre hasta el día de hoy.  Si creó una oportunidad ficticia para fechas futuras, puede configurar el intervalo de fechas en el futuro en el informe. En lugar de usar el recuento de registros en el informe, debe usar la suma del campo de fórmula que creó al comienzo. Asegúrese además de colocar el selector de Recuentos de filas en la posición de desactivado.



También puede generar un informe sobre el campo de importe, que mostrará 0 en un gráfico, dado que no está definido en los flujos. 



Nota: Esta solución puede consumir bastante almacenamiento, así que asegúrese de eliminar con frecuencia los registros ficticios innecesarios.

_____________________________________________________


Autor: Eric Praud | MVP de Salesforce
Eric es consultor ejecutivo en Epam PolSource, y ha trabajado en el ecosistema de Salesforce durante los últimos 12 años. Empezó su trayectoria en Salesforce como agente de asistencia técnica. Como muchas otras personas, se topó con la plataforma por casualidad y desde entonces no ha mirado atrás. Eric es un usuario muy activo en la comunidad de respuestas, y ha sido MVP de Salesforce desde marzo de 2021.


El envío refleja solo la opinión del usuario que hizo que el envío estuviera disponible y no las opiniones de Salesforce, independientemente de si el usuario está afiliado a Salesforce, y pueden contener o constituir productos, servicios, información, datos, contenido y otros materiales que pone a disposición un tercero u otro individuo en representación del tercero ("materiales de terceros"). Salesforce no controla ni respalda los materiales de terceros, incluidas su veracidad, validez, puntualidad, completitud, fiabilidad, integridad, calidad, legalidad, utilidad o seguridad, así como ninguno de los derechos de propiedad intelectual aplicables, ni se hace responsable de los elementos mencionados anteriormente. Los envíos realizados a través de tablones de mensajes o foros en respuesta a las preguntas publicadas, o que, de otra manera, pretenden servir de respuesta a alguna pregunta, incluidas las preguntas sobre Salesforce o los Programas, solo se publican a modo de conocimientos generales y nunca deben entenderse como respuestas a preguntas específicas (aunque una respuesta esté marcada como la "mejor" respuesta o de alguna otra forma similar). Si desea obtener respuestas a preguntas específicas, debe ponerse siempre en contacto con el servicio de asistencia de Salesforce. Salesforce no tiene ningún control sobre los envíos, y no se hace responsable del uso o el mal uso (incluida su distribución) que de ellos hagan otras partes.

Si tiene alguna pregunta, empápese de la sabiduría de nuestra Trailblazer Community aquí: https://trailhead.salesforce.com/trailblazer- community/feed

Número del artículo de conocimiento

000395398

 
Cargando
Salesforce Help | Article