Avanzado y Rendimiento
Queries
Dificultad: 7/10En el mundo real con más de 10 millones de líneas de almacén, una Query es el único objeto de AL capaz de interactuar directamente en crudo, de forma brutal y veloz con el verdadero gestor de base de datos final (el motor SQL).
Rendimiento puro frente a Pages
Si quieres recolectar datos a mano usando el viejo estilo "abro un Récord mediante bucle de AL -> si pasa
mis filtros manuales, lo guardo -> actualizo mi total", estás ejecutando muchísimos ciclos del
procesador y memoria RAM (con SetFilter y FindSet()). Esto destruirá las
instancias del servidor a escala.
Una Query toma todo lo que le has definido (unas 5 o 6 tablas a unir simultáneamente) y compacta la petición de información en *1 sola y gigante orden SQL nativa*. Se la encarga al motor y SQL retorna las tablas trituradas y pre-calculadas infinitamente más rápido en 0.2 segundos.
Funciones Analíticas (Agrupación)
La mayor ventaja es definir que *ciertas columnas las sume SQL solito* (`Method = Sum;`) mientras agrupa el desglose en un método inigualable en AL, como por ejemplo: "Quiero saber cuánto se ha vendido pero devuélvemelo agrupado por Mes y dentro del mes por el Código del Vendedor." BC es incapaz en lenguaje procedimental de hacer sumas bidimensionales en un microsegundo, pero las Queries lo hacen de facto.
query 50100 "Ventas Por Almacen"
{
elements
{
dataitem(Venta; "Sales Invoice Header")
{
// ¡Agrúpalo por aquí!
column(Location_Code; "Location Code") { }
column(TotalEuros; "Amount")
{
// Esta magia pide a SQL que suma, evitando el bucle loop de AL en RAM.
Method = Sum;
}
}
}
}