Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Anonymous
Not applicable

Limitaciones de bases de datos SQL, cómo desglosar consultas más pequeñas y combinar datos

Hola a todos,

Estoy intentando recuperar datos de prueba de SQL Server mediante una consulta a continuación (simplificada un poco, la consulta real utiliza más filtros). La tabla SQL contiene millones de filas

let
 Source = Sql.Database("DATABASE", "DATABASE",
Query="SELECT 
TEST.STATION,
TEST.START_DATE_TIME,
TEST.DATA
FROM TEST
WHERE TEST.STATION = '"&Station&"'
AND TEST.START_DATE_TIME >= DATEADD(day, -"&DaysStart&", GETDATE())
AND TEST.START_DATE_TIME < DATEADD(day, -"&DaysEnd&", GETDATE())"])
in
    Source

Sin embargo, es que selecciono el intervalo de fechas a un valor más alto, la consulta se bloquea al evaluar el estado. Esto puede ser una limitación de memoria del servidor.

Puedo resolver este problema creando varias consultas más pequeñas con intervalos de fechas menores y anexándolas. También puedo crear una consulta con varias instrucciones SELECT y UNION ALL entre ellas. Ambas opciones funcionan, pero el código de consulta se vuelve realmente grande y no es fácil de editar.

¿Hay alguna manera de recorrer en bucle la consulta, iterar el parámetro date en cada paso y anexar todos los datos? No pude encontrar una manera sencilla tanto en M como en SQL para esto. Espero que puedas ayudarme.

3 REPLIES 3
Anonymous
Not applicable

Una base de datos es una pieza de software que se ejecuta en un ordenador y está sujeta a las mismas limitaciones que todo el software: solo puede procesar tanta información como su hardware es capaz de manejar. La forma de hacer que una consulta se ejecute más rápido es reducir el número de cálculos que el software (y por lo tanto el hardware) debe realizar. Para ello, necesitará una comprensión de cómo SQL realiza cálculos. En primer lugar, vamos a abordar algunas de las cosas de alto nivel que afectarán al número de cálculos que necesita realizar y, por lo tanto, el tiempo de ejecución de las consultas:

  • Tamaño de tabla: si la consulta llega a una o más tablas con millones de filas o más, podría afectar al rendimiento.
  • Combinaciones: si la consulta combina dos tablas de una manera que aumenta sustancialmente el número de filas del conjunto de resultados, es probable que la consulta sea lenta. Hay un ejemplo de esto en la lección de subconsultas.
  • Agregaciones: combinar varias filas para producir un resultado requiere más cálculo que simplemente recuperar esas filas.

El tiempo de ejecución de las consultas también depende de algunas cosas que realmente no se pueden controlar relacionadas con la propia base de datos:

  • Otros usuarios que ejecutan consultas: cuantas más consultas se ejecuten simultáneamente en una base de datos, más debe procesar la base de datos en un momento dado y más lento se ejecutará todo. Puede ser especialmente malo si otros ejecutan consultas que consumen muchos recursos que cumplen algunos de los criterios anteriores.
  • Software de base de datos y optimización: Esto es algo que probablemente no pueda controlar, pero si conoce el sistema que está utilizando, puede trabajar dentro de sus límites para que sus consultas sean más eficientes.
Anonymous
Not applicable

Soy consciente de las limitaciones del servidor, así que estoy tratando de reducir los cálculos del servidor necesarios para las consultas.

Como dije antes me gustaría hacer un bucle de la consulta, iterar el parámetro date en cada paso y anexar todos los datos. ¿Cómo podría lograrse esto mediante power BI?

Anonymous
Not applicable

Encontré una solución yo solo. Creé una función:

let Loaddata= (Days as text) =>
let
 Source = Sql.Database("DATABASE", "DATABASE",
Query="SELECT 
TEST.STATION,
TEST.START_DATE_TIME,
TEST.DATA
FROM TEST
WHERE TEST.STATION = '"&Station&"'
AND TEST.START_DATE_TIME >= DATEADD(day, -"&Days&", GETDATE())
AND TEST.START_DATE_TIME < DATEADD(day, -"&Days&"+1, GETDATE())"])
in
    Source
in Loaddata

Y lo usó como una columna personalizada para la lista. Después de expandirlo obtuve el resultado deseado

pbix.JPG

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.