Analysis Services DirectQuery Mode , la solucion a requerimientos de analisis en tiempo real.

Juan Alvarado — Juanbizzz
SQL y Power BI en español
5 min readApr 24, 2017

Siempre las empresas han tenido diversos requerimientos sobre análisis de información. Para esto Microsoft ha tenido desde hace varias versiones la posibilidad de usar Analysis Services o para algunos llamados cubos de información.

Estos facilitan el análisis de datos ya que están implementados pensando en resumir la información y tenerla pre calculada, de tal forma que se descarga de esa actividad tan pesada a los sistemas transaccionales.

La primera forma y mas común que se tiene para resolver estos requerimientos es construir cubos de información en una base de datos de Analysis Services Multi dimensional.

Arquitectura de solucion de analisis usando cubos

Esta solucion ha sido tradicionalmente la mas usada, sin embargo dentro de sus deficiencias, se encuentra que depende de un ETL o interfaz de carga que debe ser ejecutada cada cierto tiempo, ademas de consumir muchos recursos toma tiempo. Ademas los cubos de información deben de ser procesados, lo cual dependiendo de la cantidad de datos igualmente toma tiempo.

Los usuarios actuales buscan soluciones que estén mas de la mano de aparte de ágiles y fáciles de usar, casi estén presentando datos al momento en que ingresan a los sistemas operacionales. Esto pone el reto a los desarrolladores de aplicaciones analíticas en como llevar esto acabo en una forma eficiente.

Para esto Microsoft saco también algo llamado Analysis Services Tabular, el cual en su primera versión lo que hacia era cargar la información de tablas hacia memoria de un servidor, esto era mas eficiente porque ya no debíamos procesar el cubo, sino únicamente cargas su información. Sin embargo otra vez cargar la información dependiendo de la cantidad podía consumir mucho tiempo y no era un análisis en tiempo real.

Para resolver este problema desde SQL Server 2012 , Microsoft incluyo el modo DirectQuery dentro de las bases de datos tabulares, las cuales lo que hacen realmente es dejar la información en la base de datos de SQL Server y crear indices columnares dentro de la base de datos para ser mucho mas eficiente y rápido, de tal forma que no mas entren los datos a las tablas se reflejen automáticamente en el modelo , no carga de datos , no proceso de cubo.

Con esta nueva forma de analizar la oferta de Microsoft con respecto a analizar información con Analysis services queda así:

Arquitectura de modos de Analysis Services

Con el modo DirectQuery las soluciones no tiene que ni cargar la información ni procesar el cubo.

Modo DirectQuery

Como se realizar este modo , lo primero es que debemos construir un modelo tabular en Analysis services Tabular. Esto por medio de los Data tools que nos provee Microsoft.

Después realizamos el modelo como lo hacemos en PowerPivot o en Power BI, de igual manera. Lo que si debemos tener en cuenta es que únicamente puede salir de una base de datos SQL u Oracle, una sola conexión, no múltiples fuentes de datos.

unica conexion a un SQL u Oracle

Desde Data Tools de SQL Server se modifica la propiedad del modelo recién creado llamada DirectQuery Mode a Yes, esto le indicara que vamos usar este modo dentro de nuestra base de datos tabular.

Modificacion de la propiedad de DirectQuery dentro del modelo tabular

Ya con esto le podemos dar deployment a nuestra base de datos y como se observa no carga datos al servidor

Solo carga el modelo y no datos a SSAS Tabular

Si ud. ya tiene creado un modelo tabular y lo desea cambiar a modo DirectQuery lo puede realizar por medio de SQL Management Studio en las propiedades del modelo

Cambio de modo a base de datos tabular en Management Studio

Es de hacer notar que se recomienda hacer este cambio sin los datos cargados, ya que al realizar el cambio se pierden los datos que tenemos en nuestro modelo de modo in memory.

Ya después con cualquier herramienta que puede ser Excel, Power BI o cualquier que accede los cubos de información podremos usar este nuevo modelo.

En el caso de Power BI lo optimo es usar un Live Connection hacia el modelo para aprovechar 100% la velocidad y el tiempo real dentro de modelo tabular

Acceso via Power BI a modelo tabular con DirectQuery

En el anterior vídeo como podemos ver el acceso es rápido y muy natural como un cubo normal multidimensional, sin embargo realmente esta accesando las tablas que se encuentran en un SQL Server. Allí mismo en el video realice una modificación a la cantidad de items que compraron en una factura, y al darle refrescar en Power BI se puede observar que re refleja inmediatamente. No carga de información , no proceso de cubo. Análisis en tiempo Real.

En SQL 2016 se obtuvieron muchas mejoras en DirectQuery tales como:

  • Mejoras en rendimiento, ya que en 2014 o 2012 era lento el filtrado de datos
  • Soporte para herramientas que manejen MDX para accesar la información, es decir cualquier que accede cubos multidimensionales debe accesar modelos con DirectQuery
  • Uso de cálculos en columnas
  • Fuentes de tablas de directQuery ademas de SQL Server , pueden ser Oracle, Teradata o APS

Donde lo puede aplicar? Casi en cualquier caso que necesite información casi al minuto, reportes de ventas que incluyan ventas del dia, inventarios del día, etc. Cualquier caso donde necesite rapidez de información y que casi sea en el momento.

Si quieren profundizar en este modo de base de datos tabular, recomiendo bajar el siguiente WhitePaper

Este contiene suficiente material sobre este modo en SQL 2016, super recomendable.

Comentario bienvenidos

--

--

Juan Alvarado — Juanbizzz
SQL y Power BI en español

MVP Data Platform, Consultor en SQL Server , Power BI, SSRS, SSAS, Azure, Dynamics 365, AX tunning, Project, AX BI , SAP ASE, Replication Server y Hana