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:
 Permitir sumas cero en informe
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. Desde cualquier página en Lightning, haga clic en el ícono de engranaje en la esquina superior derecha. Seleccione Configuración y navegue a la ficha Gestor de objetos. Desplácese hacia abajo desde la lista de objetos disponibles hasta que encuentre la Oportunidad. Cuando la vea, haga clic en ella para seleccionarla.
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 Conteo 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 muestra:
IF(Name="DUMMY OPP",0,1)

Crear un flujo desencadenado por programación en Oportunidades
Paso 1. Desde cualquier página en Lightning, haga clic en el ícono de engranaje en la esquina superior derecha. 
Paso 2. Seleccione Configuración y, en el cuadro Búsqueda rápida, ingrese 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 ícono + y seleccione el elemento Crear registros.
b. Ingrese 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 separados 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 sus flujos.

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 del flujo 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 ingrese la fórmula (consulte la fórmula de muestra) en el lienzo de fórmula, luego 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 muestra:
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 ícono + y seleccione el elemento Obtener registros.
b. Ingrese 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 cumplieron todas las condiciones (AND). Agregue los detalles siguientes como Condiciones de filtro:
 
Primera condición de filtro
  • Campo: Nombre
  • Operador: Iguales
  • Valor: DUMMY OPP
Segunda condición de filtro
  • Campo: OwnerId
  • Operador: Iguales
  • Valor: {!$Record.OwnerId}
Tercera condición de filtro
  • Campo: Fecha de cierre
  • Operador: Iguales
  • 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, luego haga clic en Listo.

Get Records.PNG
image.png

Paso 7. Agregue un elemento Decisión.
a. En Diseñador de flujos, haga clic en el ícono + y seleccione el elemento Decisión.
b. Ingrese 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 ícono + y seleccione el elemento Eliminar registros.
b. Ingrese 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 las 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. Ingrese 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 sus flujos.

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 cumplieron todas las condiciones (AND) y agregue los detalles siguientes como sus Condiciones de entrada:
  • Campo: Nombre
  • Operador: No es igual
  • 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 ícono + y seleccione el elemento Obtener registros.
b. Ingrese 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: No es igual
  • Valor: DUMMY OPP
Segunda condición de filtro
  • Campo: Fecha de cierre
  • Operador: Iguales
  • Valor: {!$Record.CloseDate}
Tercera condición de filtro
  • Campo: OwnerId
  • Operador: Iguales
  • Valor: {!$Record.OwnerId}
Cuarta condición de filtro
  • Campo: Id.
  • Operador: No es igual
  • 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 Diseñador de flujos, haga clic en el ícono + y seleccione el elemento Decisión.
b. Ingrese 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 Listo
 
Edit Create Records.png

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

Paso 9. Guarde y active sus flujos.
 
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 conteo 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 Conteos de filas en la posición de desactivado.



También puede generar un informe sobre el campo de monto, 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.

_____________________________________________________


Escrito por: Eric Praud | Salesforce MVP
Eric es consultor senior en Epam PolSource y lleva 12 años trabajando en el ecosistema de Salesforce. Comenzó su trayectoria profesional en Salesforce como agente de soporte de Salesforce. Como muchos otros, se topó con la plataforma accidentalmente y no ha mirado atrás desde entonces. Eric es muy activo en la comunidad de respuestas y es MVP de Salesforce desde marzo de 2021.


El envío solo refleja la opinión del usuario que dispuso el envío, no las opiniones de Salesforce, independientemente de que el usuario sea un afiliado de Salesforce, y pueden contener o representar productos, servicios, información, datos, contenido y otros materiales puestos a disposición por terceros o en nombre de estos (“Material de terceros”). Salesforce no controla, no avala ni es responsable de ningún Material de terceros, lo que incluye su exactitud, validez, rapidez, exhaustividad, veracidad, integridad, calidad, legalidad, utilidad o seguridad, ni de ninguno de los derechos de propiedad intelectual correspondientes. Cualquier envío publicado en un tablón de mensajes o foro, en respuesta a preguntas publicadas, o que de otro modo pretenda responder preguntas, lo que incluye preguntas sobre Salesforce o los Programas, se publica únicamente para su conocimiento general y nunca se deberá tomar en cuenta como respuesta a preguntas específicas (aun cuando la respuesta esté marcada como la “mejor” o tenga calificaciones similares). Le recomendamos contactar siempre con el servicio de asistencia de Salesforce para obtener respuestas a sus preguntas específicas. Salesforce no tiene control alguno sobre los Envíos y no es responsable por la utilización o el uso indebido (incluida la distribución) que un tercero haga de los Envíos.

Si tiene preguntas aproveche la sabiduría de toda nuestra Trailblazer Community aquí: https://trailhead.salesforce.com/trailblazer- community/feed.

Número del artículo de conocimiento

000395398

 
Cargando
Salesforce Help | Article