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:
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.
Considere una variable de enlace llamada maxHomeValue. Declaramos la variable en Apex y luego usamos la variable en una consulta, de esta manera:
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.
- En su Playground de Trailhead, haga clic en
, escriba
Dream
en el cuadro de búsqueda y luego seleccione la aplicación DreamHouse.
- 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.
- 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 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:
La consulta devuelve la ciudad para cada una de las 12 propiedades.
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:
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()
- En el editor de consultas, escriba:
- Haga clic en Execute (Ejecutar).
Los resultados de su consulta deberían mostrar 12 filas con la ciudad para cada propiedad.
- Edite la consulta para que el campo City__c se inserte en la función COUNT(), de esta forma:
- 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.
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()
- En el editor de consultas, edite la consulta para utilizar la función COUNT_DISTINCT(), de esta forma:
- 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.
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.
- En el editor de consultas, escriba:
- 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.
- En el editor de consultas, escriba:
- Haga clic en Execute (Ejecutar).
Los resultados deberían tener ocho filas.
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.
- En el editor de consultas, escriba:
- Haga clic en Query (Consulta). Debería obtener un solo agente.
¡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
-
Documentación de desarrolladores de Salesforce: Usar variables de Apex en consultas SOQL y SOSL
-
Documentación de desarrolladores de Salesforce: Funciones de resumen
-
Documentación de desarrolladores de Salesforce: Ejemplos de cláusulas SELECT
-
Documentación de desarrolladores de Salesforce: GROUP BY