Skip to main content
Únase a nosotros en TDX, en San Francisco, o en Salesforce+ los días 5 y 6 de marzo en la conferencia para desarrolladores sobre la era de agentes de IA. Registrarse ahora.

Utilizar variables de enlace y funciones de resumen

Objetivos de aprendizaje

Después de completar esta unidad, podrá:

  • Hacer que una consulta sea dinámica insertando variables de enlace de Apex.
  • Utilizar una función de resumen para agrupar y resumir datos en una consulta.
  • Aplicar agrupamiento a los resultados de la consulta.
  • Reconocer cuándo utilizar la cláusula WHERE (DÓNDE) frente a la cláusula HAVING (TENER).

Siga el proceso con Trail Together

¿Desea seguir el proceso con un experto a medida que realiza este paso? Eche un vistazo a este vídeo, parte de la serie Trail Together en Trailhead Live.

(Este vídeo comienza en el minuto 1:10:42, en caso de que desee retroceder y volver a ver el principio del paso).

Introducción

Hemos tratado cómo escribir una consulta SOQL básica y cómo formular consultas que incluyan campos en objetos principales o secundarios. Pero, como ya sabe, cada proyecto de desarrollo de aplicaciones es único. Saber cómo adaptar la lógica empresarial para resolver un problema específico es importante.

Variables de enlace

Usar variables de enlace es una forma de personalizar su código. Es similar a abrir un formulario en la interfaz de usuario y modificar un campo de entrada para buscar ciertos resultados. Veamos un ejemplo en la aplicación DreamHouse. Usted es un agente inmobiliario que vende casas y desea revisar su inventario de propiedades con un precio inferior a 200 000 $. De esta manera, escriba la siguiente consulta:

List<Property__c> property = [SELECT Id, Name, Price__c FROM Property__c WHERE Price__c < 200000];

Es bastante simple para usted. Pero es estática. Esta consulta siempre devuelve casas por debajo de los 200 000 $. ¿Qué pasa con otros agentes inmobiliarios y compradores potenciales que no pueden escribir consultas SOQL y ejecutarlas en Developer Console? Necesitan una forma más fácil de filtrar las casas por el precio que les convenga. ¿Cómo puede escribir una consulta que funcione para un comprador con un presupuesto de 200 000 $ y para otro comprador con uno de 800 000 $? Ahí es donde entran las variables de enlace, una variable de Apex que se utiliza en una consulta SOQL. Utilice las variables de enlace como marcadores de posición para valores específicos que se indicarán más adelante.

Nota

Esto no es un concepto nuevo. En Programación orientada a los objetos para administradores, ha aprendido sobre el uso de un parámetro como marcador de posición en un método. Cuando llama al método, pasa un argumento que reemplaza al parámetro. Una variable de enlace en una consulta es como un parámetro en un método. La variable de enlace se reemplaza por un valor específico cuando se ejecuta la consulta.

Considere una variable de enlace llamada maxHomeValue. Declaramos la variable en Apex y luego usamos la variable en una consulta, de esta manera:

Integer maxHomeValue = 200000;
List<Property__c> property = [SELECT Name, Price__c FROM Property__c WHERE Price__c < :maxHomeValue];

Observe que, en la consulta, la variable de enlace está precedida por dos puntos (: ). Esta consulta devuelve el nombre y el precio del objeto de propiedad. Pero los resultados se filtran según el precio de la casa: WHERE Price__c < :maxHomeValue. El valor de la variable de enlace, maxHomeValue, se establece fuera de la consulta. Pongámoslo en práctica.

  1. En su Playground de Trailhead, haga clic en Iniciador de aplicación, escriba Dream en el cuadro de búsqueda y luego seleccione la aplicación DreamHouse.
  2. Haga clic en Property Explorer (Propiedades del explorador).
    Property Explorer (Propiedades del explorador) busca propiedades disponibles basándose en varios filtros, como un rango de precio máximo. El selector deslizante de precio máximo acepta valores para la variable de enlace maxHomeValue.
  3. Mueva el selector deslizante de precio máximo a 550 000.

Cada vez que se mueve el selector deslizante, su valor asociado se modifica en el código a través de su variable de enlace. La consulta se ejecuta y añade los resultados a una lista de propiedades que se muestran en la página de propiedades del explorador.

El selector deslizante establece el valor de la variable en el código Apex. Esos valores reemplazan los marcadores de posición de las variables en la consulta.

El uso de variables de enlace en la cláusula WHERE (DÓNDE) le permite establecer los valores de las variables en su código antes de que se ejecute la consulta. Las variables de enlace hacen que una consulta sea dinámica. Para personalizar una consulta para cada usuario, establezca los valores de las variables de enlace según la entrada del usuario. A medida que continúe modificando y revisando el código, descubrirá muchos tipos de campos con datos que cambian constantemente.

Funciones de resumen

En los informes, utilizará campos de resumen para calcular valores a partir de registros relacionados. Por ejemplo, usted podría querer calcular el número total de propiedades, o el valor promedio o más alto de las propiedades en una ciudad. En SOQL, usted utiliza funciones de resumen para realizar esos y otros cálculos.

Funciones de resumen para consultas SOQL

Función de resumen

Descripción

Ejemplo

COUNT()

Devuelve el número de filas que están asociadas con el campo

SELECT COUNT(Name)FROM Broker__c (SELECCIONAR CONTAR[Nombre] DE Agente__c)

COUNT_DISTINCT()

Devuelve el número de filas únicas que coinciden con los criterios de la consulta

SELECT COUNT_DISTINCT(City__c)FROM Property__c (SELECCIONAR CONTAR_DISTINTO[Ciudad__c] DE Propiedad__c)

MIN()

Devuelve el valor mínimo de un campo

SELECT MIN(Days_On_Market__c)FROM Property__c (SELECCIONAR MÍNIMO[Días_en_Mercado__c] DE Propiedad__c)

MAX()

Devuelve el valor máximo de un campo

SELECT MAX(Beds__c)FROM Property__c (SELECCIONAR MÁXIMO[Camas__c] DE Propiedad__c)

AVG()

Devuelve el valor promedio de un campo numérico

SELECT City__c, AVG(Days_On_Market__c)FROM Property__c GROUP BY City__c (SELECCIONAR Ciudad__c, PROMEDIO[Días_en_Mercado__c] DE Propiedad__c AGRUPAR POR Ciudad__c)

SUM()

Devuelve el valor total de un campo numérico

SELECT SUM(Price__c), Broker__r.Name FROM Property__c GROUP BY Broker__r.Name (SELECCIONAR SUMA[Precio__c], Agente__r.Nombre DE Propiedad__c AGRUPAR POR Agente__r.Nombre)

Usemos propiedades, por ejemplo, en una ciudad. Supongamos que comenzamos con esta consulta sencilla:

SELECT City__c FROM Property__c

La consulta devuelve la ciudad para cada una de las 12 propiedades.

Resultados de la consulta - Filas totales: 12. La tabla tiene una columna que muestra las ciudades.

Como no deseamos la lista completa de ciudades, modifique la consulta para utilizar la función de resumen. Para obtener el número total de propiedades, utilice la función COUNT().

La función de resumen se incluye en la cláusula SELECT de una consulta, de esta forma:

SELECT COUNT(City__c) FROM Property__c. COUNT es la función de resumen, City__c es el campo y Property__c es el objeto.

Los paréntesis después del nombre de la función contienen el nombre del campo que se utilizará en el cálculo. En este ejemplo, estamos contando los valores en el campo City__c.

Ejecute una consulta COUNT()

  1. En el editor de consultas, escriba:
    SELECT City__c FROM Property__c
  2. Haga clic en Execute (Ejecutar).
    Los resultados de su consulta deberían mostrar 12 filas con la ciudad para cada propiedad.
  3. Edite la consulta para que el campo City__c se inserte en la función COUNT(), de esta forma:
    SELECT
    COUNT(City__c)
     FROM Property__c
  4. Haga clic en Execute (Ejecutar).
    El resultado de su consulta debería ser 12, que es el número de propiedades basadas en el campo City__c.
    Resultados de la consulta - Filas totales: 1. La tabla muestra un valor: 12.

Si se ha dado cuenta de que las 12 propiedades están en solo 2 ciudades, es posible que se pregunte por qué el conteo es 12 en lugar de 2. Eso se debe a que la función COUNT() cuenta todos los valores, lo que a menudo incluye varios registros con el mismo valor.

Supongamos que queremos asignar un agente a todas las propiedades en una ciudad. ¿Cuántos agentes necesitamos? Dicho de otra manera, ¿cuántas ciudades únicas representan las 12 propiedades? Para contar solo las ciudades únicas, necesitamos otra función. (Cuando escuche "único", piense en "distinto").

COUNT_DISTINCT() es parecido a COUNT(), excepto que devuelve solo valores únicos (sin duplicados).

Ejecute una consulta COUNT_DISTINCT()

  1. En el editor de consultas, edite la consulta para utilizar la función COUNT_DISTINCT(), de esta forma:
    SELECT COUNT_DISTINCT(City__c) FROM Property__c
  2. Haga clic en Execute (Ejecutar).
    Ahora, su resultado debería ser 2, el número de valores únicos de City__c entre todas las propiedades.
    Resultados de la consulta - Filas totales: 1. Columna: count_distinct(City__c) Valor 2.

Solo Cambridge, Boston y Brookline son los valores únicos encontrados en el campo City__c. Tenga en cuenta que las funciones COUNT() y COUNT_DISTINCT() distinguen entre mayúsculas y minúsculas. Eso significa que Cambridge no es un duplicado de cambridge. Cambridge y cambridge se consideran dos valores únicos.

MIN(), MAX(), AVG() y SUM()

Otras funciones de resumen útiles incluyen MIN(), MAX(), AVG() y SUM().

Las funciones MIN() y MAX() son sencillas. MIN() encuentra el valor mínimo (el más bajo) y MAX() encuentra el valor máximo (el más alto). Pero hay algo único acerca de estas funciones. Pueden manejar fechas y horas, así como números.

  1. En el editor de consultas, escriba:
    SELECT MIN(Date_Listed__c) FROM Property__c
  2. Haga clic en Execute (Ejecutar).

La función MIN() devuelve la fecha más temprana. La función MAX() devuelve la fecha más reciente.

Las funciones MIN() y MAX() también reconocen el orden de clasificación de los valores de lista de selección, por lo que puede encontrar el primer o último valor en una lista de selección.

La función AVG() calcula el promedio de todos los valores. La función SUM() calcula la suma de todos los valores. Debido a que ambas funciones realizan cálculos, solo funcionan con campos que contienen valores numéricos.

Agrupe los resultados de las funciones de resumen

Después de calcular valores basados en información resumida, es posible que desee informar los resultados en grupos, como se hace en los informes de resumen. Para agrupar valores en una consulta SOQL, utilice la cláusula GROUP BY. Por ejemplo, un cliente de DreamHouse Realty quiere saber qué agentes han vendido (cerrado) una propiedad.

Ponga en práctica la cláusula GROUP BY

A continuación, utilice la cláusula GROUP BY en una consulta.

  1. En el editor de consultas, escriba:
    SELECT MAX(Status__c), Broker__r.Name
    FROM Property__c
    GROUP BY Broker__r.Name
  2. Haga clic en Execute (Ejecutar).
    Los resultados deberían tener ocho filas.
    Resultados de la consulta - Filas totales: 8, Columna 1: max(Status__c), Columna 2: Name (Nombre).

Recuerde que esta consulta agrupa las propiedades por agente. Para las propiedades de cada agente, listamos el valor más avanzado de Status__c. Ese es el valor de la lista de selección Status que está más cerca del valor final de la lista de selección. Queremos agentes que hayan vendido propiedades, por lo que se ajustarían aún más los resultados. Replantear un proyecto.

Filtre los resultados de las funciones de resumen

Otra forma de restringir los resultados es utilizar una cláusula HAVING (TENER). La cláusula HAVING filtra los resultados devueltos por una función de resumen.

Bueno…, esto suena como algo que podemos usar para encontrar agentes que hayan vendido propiedades. Nuestra consulta anterior ha devuelto una lista de agentes que tienen propiedades en cualquier estado. Intente utilizar la cláusula HAVING para ajustar esos resultados.

  1. En el editor de consultas, escriba:
    SELECT MAX(Status__c), Broker__r.Name
    FROM Property__c
    GROUP BY Broker__r.Name
    HAVING MAX(Status__c) = 'Closed'
  2. Haga clic en Query (Consulta). Debería obtener un solo agente.
    Resultados de la consulta - Filas totales: 1. Columna 1: max(Status__c). Columna 2: Name (Nombre).

¡Sí! Vamos allá. El uso de la cláusula HAVING restringe los resultados a las propiedades con el estado Closed (Cerrada). ¡Bien hecho!

La cláusula WHERE es muy similar a la cláusula HAVING, ¿verdad? Esto le servirá para saber cuándo usar WHERE y cuándo usar HAVING:

  • La cláusula WHERE filtra los registros en una consulta SOQL que no tiene función de resumen.
  • La cláusula HAVING filtra los resultados después de que una función de resumen haya añadido los datos.

Como ha aprendido en este módulo, SOQL es una herramienta ideal para acceder a los datos en su organización de Salesforce. A medida que continúe desarrollando y ampliando sus habilidades en Apex, encontrará muchas oportunidades para utilizar su conocimiento de SOQL. A medida que lo haga, recuerde que puede encontrar detalles, ejemplos y más información sobre Apex y SOQL en los recursos proporcionados en este módulo. Ahora, láncese a hacer consultas con SOQL.

Recursos

Comparta sus comentarios sobre Trailhead en la Ayuda de Salesforce.

Nos encantaría conocer su experiencia con Trailhead. Ahora puede acceder al nuevo formulario de comentarios cuando quiera desde el sitio de la Ayuda de Salesforce.

Más información Continuar para compartir comentarios