Codea Blog  

Blog Details

Análisis comparativo de DAX y SQL en Power BI

INTRODUCCION

 

Muchos profesionales experimentados de informes de BI tienen experiencia con SQL. Pueden haber usado SQL en sus primeras etapas de carrera como desarrolladores de bases de datos, escribiendo procedimientos almacenados. O pueden haber usado SQL como parte de su rol de creación de informes de BI para generar informes.

 

A medida que estos profesionales pasan a usar Power BI para crear informes y paneles, se les presenta DAX. Pueden sentirse abrumados al decidir cuándo usar SQL, DAX o en todo caso Power Query.

 

DAX y SQL son dos lenguajes de programación de bases de datos diferentes con diferentes propósitos. DAX es un lenguaje de análisis de datos que se utiliza para crear visualizaciones y analizar datos en Power BI. SQL es un lenguaje de consulta de bases de datos que se utiliza para acceder y manipular datos en una base de datos.


DAX

 

DAX es un lenguaje de análisis de datos que se utiliza para crear visualizaciones y analizar datos en Power BI. DAX se creó específicamente para Power BI, y está diseñado para ser utilizado por analistas de negocios que no son desarrolladores de software. DAX tiene una sintaxis sencilla y fácil de aprender, y ofrece una amplia gama de funciones para crear visualizaciones y analizar datos.

 

Power BI es una herramienta de visualización de datos que es fácil de usar y permite a los usuarios finales crear informes y paneles con una interfaz de arrastrar y soltar. Sin embargo, si desea crear informes más avanzados que muestren métricas financieras, cálculos de crecimiento y tendencias a lo largo del tiempo, debe usar el lenguaje de fórmulas DAX.

 

¿CUÁNDO USAR DAX POR ENCIMA DE SQL?

DAX representa un lenguaje más reciente en comparación con SQL, y es importante señalar que no resulta directamente comparable. En términos de generación de informes, la interactividad en tiempo real suele ser limitada cuando se usa SQL. Sin embargo, al combinar SQL con Power BI Desktop, es posible lograr una interactividad en tiempo real, permitiendo que diversos elementos visuales interaccionen instantáneamente entre sí. Con Power BI, se puede realizar tareas complejas que, en el caso de SQL, requerirían mucho código y complejidad en comparación con DAX.


SQL

 

Lenguaje de consulta estructurada (SQL) es un lenguaje de programación diseñado para el almacenamiento y procesamiento de datos en bases de datos relacionales. En un sistema de bases de datos relacional, los datos se organizan en forma de tablas con filas y columnas que representan diversos atributos y las relaciones entre los valores. Las instrucciones SQL se utilizan para diversas acciones como almacenar, actualizar, eliminar, buscar y recuperar información de la base de datos. Además, SQL también se emplea para el mantenimiento y la optimización del rendimiento de la base de datos. (¿Qué es SQL? - Explicación de Lenguaje de consulta estructurado (SQL) - AWS, s. f.)

 

Las compañías estructuran los datos y luego generalmente la almacenan en sistemas de Bases de Datos. Por otro lado, en los proyectos de ciencia de datos, la información que se emplea suele estar mayoritariamente en formato SQL, siendo el SQL Server una opción común. Es por esto la necesidad de aprender y dominar el uso de SQL como base de datos y Power BI como herramienta de visualización interactiva de datos en proyectos de ciencia de datos.

 

¿CUÁNDO USAR SQL POR ENCIMA DE DAX?

Cuando nuestros datos encuentran su lugar en sistemas de bases de datos con estructuras definidas como SQL Server Management Studio, MySQL u otros similares, la necesidad de extraer datos almacenados nos lleva a emplear SQL. Comparar directamente SQL con DAX no resulta sencillo debido a que la elección depende del objetivo que persigamos. En determinadas situaciones, es necesario preparar datos para futuras aplicaciones, como la creación de paneles interactivos en Power BI o la generación de modelos de datos tabulares. En el contexto del modelado de datos, es de suma importancia la alimentacion de datos a estos modelos, y es por eso que tenemos que usar SQL para preparar los datos para futuras transformaciones.


LENGUAJE DAX VS LENGUAJE SQL

 

Haremos esto ilustrando inicialmente las diferencias de sintaxis entre DAX y T-SQL usando consultas muy simples y básicas. 

Por ejemplo a continuación hay una muestra cómo seleccionar datos de la tabla DimProduct en ambas bases de datos con SQL y DAX.

Figura 1. Seleccionar datos de la tabla DimProduct

 

El codigo anterior muestra el siguiente resultado:

Figura 2. Resultados

 

Como podemos ver en las figuras anteriores, tanto SQL como DAX devuelven resultados similares.

Desde el fondo de SQL, si escucha consultas, su primera inclinación es algo parecido:

 

SELECT lo que sea ...

 

 

Entonces, ¿qué está ocurriendo en el contexto de DAX aquí? Lamentablemente, SQL se caracteriza como un lenguaje de naturaleza declarativa, mientras que DAX se distingue por ser un lenguaje de índole completamente funcional. Con SQL, es posible establecer qué se necesita mediante instrucciones SELECT y JOIN, definiendo así el conjunto de datos que se desea obtener, sin preocuparse por los detalles de cómo el motor de búsqueda lleva a cabo la recuperación de la información. Por contraste, DAX opera como un lenguaje funcional en el que cada expresión adopta la forma de una llamada a una función. En DAX, los parámetros de las funciones pueden, a su vez, consistir en otras llamadas a funciones:

 

Function2(Function1())

 

 

Con este conocimiento, vamos a tener una idea de las consultas DAX y estas cosas funcionales.


ANÁLISIS COMPARATIVO

 

COMPARACIÓN DE CADENAS

Al comparar cadenas utilizando operadores comunes, la sensibilidad a mayúsculas y minúsculas puede variar según la configuración de intercalación. Aunque funciones como FIND y SUBSTITUTE siempre distinguen las diferencias de mayúsculas y minúsculas, SEARCH diferencia automáticamente y FIND puede ser más rápido en un 10% al hacerlo. Las versiones recientes de DAX han simplificado esto con CONTAINSSTRING y CONTAINSSTRINGEXACT, proporcionando funcionalidades similares a SEARCH y FIND respectivamente.

SQL

SELECT * FROM dbo.table WHERE name LIKE '%sqlbi%';

DAX

COUNTROWS FILTER ( table, CONTAINSSTRING ( table[name], "sqlbi" ) ) )

Ambos códigos realizan la misma operación: seleccionar todas las filas de la tabla donde el valor en la columna "name" contiene la subcadena "sqlbi". En DAX, se utiliza la función FILTER con CONTAINSSTRING para lograr esto, mientras que en SQL se utiliza la cláusula WHERE con el operador LIKE.

 

Un problema que se puede tener si proviene del ámbito de SQL es el uso de un operador distinto que deba aplicarse de manera análoga a una expresión regular. De hecho, los operadores LIKE en SQL cuentan con un equivalente con características parecidas en DAX: la función SEARCH tiene una semántica ligeramente diferente porque devuelve la posición encontrada en lugar de un valor True/False.. Asimismo, esta función emplea caracteres comodín diferentes.

 

FILTRADO DE DATOS

La condición WHERE de una instrucción SQL tiene dos homólogos en DAX: FILTER y CALCULATETABLE. 

Usando como ejemplo la siguientes consultas:

SQL

SELECT * FROM table WHERE Color = ''Red'

DAX

FILTER ( table, table[Color] = 'Red' )

o tambien:

CALCULATETABLE ( table, table[Color] = 'Red' )

 

No asuma que CALCULATETABLE es bueno y FILTER es malo. Cada CALCULATETABLE incorpora internamente uno o varios FILTER, y el rendimiento generalmente está determinado por la granularidad de cada FILTER (incluso si el motor DAX puede realizar una optimización adicional).

SQL

SELECT FROM table WHERE Color = "Red" OR Weight > 100

DAX

FILTER ( table, table[Color] = "Red" || table[Weight] > 100 )

o tambien:

CALCULATETABLE ( table, table[Color] = "Red" || table[Weight] > 100 )

 

AGRUPACIÓN DE DATOS

La condición GROUP BY de una instrucción SQL se implementa de forma nativa mediante SUMMARIZE en DAX.

Supongamos que tenemos una tabla llamada "Ventas" con las columnas "Producto", "Categoría", "Fecha" y "Monto". Queremos calcular el total de ventas por categoría para un año específico, digamos el año 2023.

SQL

SELECT Categoría, SUM(Monto) AS TotalVentas
FROM Ventas
WHERE YEAR(Fecha) = 2023
GROUP BY Categoría;

DAX

SUMMARIZE ( Ventas, Ventas[Categoría], "TotalVentas"SUM ( Ventas[Monto] ) )

El resultado que se obtiene sería algo así:

CATEGORIA TOTAL VENTAS
A 15000
B 22000
C 18000

 

 

 

 

UNIR TABLAS

El lenguaje SQL ofrece los siguientes tipos de JOIN:

  • UNIÓN INTERNA
  • UNIÓN EXTERIOR
  • UNIÓN CRUZADA

El resultado de un JOIN no depende de la presencia de una relación en el modelo de datos. Puede utilizar cualquier columna de una tabla en una condición JOIN.

En DAX hay dos formas de obtener un comportamiento JOIN. En primer lugar, puede aprovechar las relaciones existentes en el modelo de datos para consultar los datos incluidos en  diferentes tablas, del mismo modo que escribió las condiciones JOIN correspondientes en la consulta DAX. En segundo lugar, puede escribir expresiones DAX que produzcan un resultado equivalente a ciertos tipos de JOIN. En cualquier caso, no todas las operaciones JOIN disponibles en SQL son compatibles con DAX.

 

1.  Uso de relaciones en un modelado de datos

El enfoque común para obtener un comportamiento JOIN en DAX es usar implícitamente las relaciones existentes. Por ejemplo, considere un modelo simple con las tablas Ventas, Producto y Fecha. Existe una relación entre Ventas y cada una de las otras tres tablas. Si desea ver la cantidad de ventas dividida por año y color del producto, puede escribir:

SQL

SELECT

    [Date].[YearAS Year,
    Product.[Color],
    SUM(Sales.[Quantity]) AS [Total Quantity]
FROM Sales
JOIN [Date] ON Sales.[DateKey] = [Date].[DateKey]
GROUP BY [Date].[Year], Product.[Color];

DAX

ADDCOLUMNS (
    SUMMARIZE ( Sales, 'Date'[Year], Product[Color] ),
    "Total Quantity"CALCULATE ( SUM ( Sales[Quantity] ) )
)

Las tres tablas se unen automáticamente mediante una COMBINACION IZQUIERDA entre la tabla Ventas (utilizada en la expresión para la columna Cantidad total) y las otras dos tablas, Fecha y Producto.

 

2.  Unir tablas sin relaciones en DAX

Se puede realizar usando CROSSJOIN:

SQL

SELECT *
FROM Tabla1
CROSS JOIN Tabla2;

DAX

CROSSJOIN (Tabla1, Tabla2)

 

En DAX, la mejor manera y recomendable de combinar tablas es aprovechar las relaciones físicas presentes en el modelo de datos. Esto resulta en un código DAX más sencillo y rápido. Aunque existen varias técnicas disponibles en DAX para unir tablas, es bueno tener en cuenta que estas técnicas pueden ser valiosas en la generación de tablas calculadas o tablas reducidas en expresiones complejas, las cuales se emplean en medidas y columnas calculadas.


CONCLUSIONES

 

Siempre es un enfoque mejor y recomendable transformar los datos lo más cerca posible de la fuente de datos. Por ejemplo, el origen de datos es una base de datos relacional; entonces, es mejor ir con SQL. Al ser un producto estrella de Microsoft, SQL Server ha pasado por muchas mejoras en las últimas tres décadas, con mejoras de rendimiento que tienen la máxima prioridad. Por lo tanto, solo es mejor aprovechar la habilidad en SQL que ha aprendido y aprovechar el rendimiento de SQL Server.

 

En el caso de que los datos provengan de archivos planos (.csv) u hojas de cálculo de Excel, es posible que surja cierta complejidad. Sin embargo, hablando de Power Query, ésta ofrece la solución al ayudar a moldear y transformar los datos de manera automática.

 

La elección entre DAX y SQL en Power BI depende en gran medida de la naturaleza, la complejidad de código y la fuente de los datos proveniente, así como de los objetivos del análisis. DAX es muy útil para cálculos y medidas personalizadas, así como para trabajar con modelos de datos enriquecidos. por otra parte SQL es muy usado en la manipulación eficiente de datos en la fase de extracción y transformación.


REFERENCIAS

 

  1. ¿Qué es SQL? - Explicación de Lenguaje de consulta estructurado (SQL) - AWS. (s. f.). Amazon Web Services, Inc. https://aws.amazon.com/es/what-is/sql/

  2. Alexandre. (2022, 28 noviembre). DAX Power BI : Saber todo sobre el lenguaje de programación de consultas. Formation Data Science | DataScientest.com. https://datascientest.com/es/saber-todo-dax-power-bi

  3. DAX Functions - Learn DAX. (2023, 29 enero). Learn DAX. https://www.learndax.com/dax-functions/

  4. Admin. (2023, 27 junio). Uso de parámetros en consulta SQL Nativa - Power Bi University. Power Bi University. https://powerbiuniversity.com/uso-parametros-consulta-sql-nativa/

Comentarios

Registrate o Inicia Sesión para comentar y obtener Cursos de pago gratis

function loadurl(){ var val1 = document.getElementById("valor3").value; console.log(val1); if(val1){ window.location = "/comunidad/blog/filtrar/"+val1+"/"} }