SSDT 16.4 – Workspace integrado

Microsoft ha liberado una nueva version del SSDT, la versión  16.4, esta agrega una capacidad muy útil para aquellos que trabajan con SSAS Tabular, un Workspace integrado, es decir, nos evitar la necesidad de tener un servidor de SSAS para utilizar como Workspace.

Para cambiar un proyecto existente de manera que utilice Workspace integrado tenemos una nueva opción en las propiedades del proyecto.

ssdt-16_4_1

Cuando pasamos a este modo, debemos observar que la propiedad “Workspace Server” muestra el puerto por el que atiende este SSAS Tabular.

En opciones del SSDT para la sección del diseñador del SSAS tenemos una nueva opción para indicar el valor de workspace por defecto.

ssdt-16_4_2

SSDT – 16.3 – Tabular Model Explorer

Microsoft liberó una nueva actualización del SSDT, la versión 16.3 incorporando una funcionalidad muy útil para los desarrolladores de modelos Tabulares.

Este explorador es una ventana adicional que nos permite navegar de forma ordenada el modelo tabular en edición, siendo de utilidad en modelos con cierta complejidad por su cantidad de componentes, lease tablas, métricas, kpis, etc.

ssdt-16_3_1

Muy util para aquellos que le dedicamos muchas horas a este producto

ssdt-16_3_2

DAX – Función SUMMARIZECOLUMNS (parte 1)

La versión 2016 de SSAS (Analysis Services) ha incorporado muchas funciones DAX, entre ellas SUMMARIZECOLUMNS, función que podemos encontrar en Power Pivot de Excel 2016 y Power BI.

Es una función que en aplicaciones reales la he encontrado mejores tiempos de respuestas que la combinación CALCULATETABLE + ADDCOLUMNS + SUMMARIZE.

Es muy util cuando usamos DAX como lenguaje de consulta o para armar una tabla dentro de SSAS Tabular, funcionalidad disponible en SSAS 2016 en modo de compatibilidad 1200, en Power BI y Power Pivot de Excel 2016, pero esto de tablas es para otro día…

Cuando podríamos usar esta función, cuando armamos reportes con Reporting Services, ya sea en reportes paginados, reportes móviles o KPIs, estos dos últimos antes conocidos como Datazen e incorporados en SSAS 2016 EE.

Esta function retorna una tabla, y posee la siguiente sintaxis

SUMMARIZECOLUMNS
( 
 <groupBy_columnName>[, < groupBy_columnName >]…, 
 [<filterTable>]…
 [, <name>, <expression>]…
) 

La función posee tres areas o tipos de parámetros principales:

  • Campos de agrupación
  • Condiciones de filtro
  • Expresiones o cálculos

He aqui algunos ejemplos sencillos para empezar

Ejemplo 1:

EVALUATE
SUMMARIZECOLUMNS ( Product[Color] )

Este ejemplo inicial nos devuelve todos los diferentes valores de la columna Color de la tabla Product

summarizecolumns_1

Ejemplo 2:

EVALUATE
SUMMARIZECOLUMNS ( Product[Color], "Total Units", [Internet Total Units] )

Este segundo ejemplo nos devuelve una tabla con totales por color, como podemos ver la funcion solo retorna los valores con datos, es decir, usa las expresiones para determianr si mostrar un registro o no.

summarizecolumns_2

Ejemplo 3

EVALUATE
SUMMARIZECOLUMNS (
 Product[Color],
 "Total Units", IGNORE( [Internet Total Units])
)

En este ejemplo usamos la funcion IGNORE que nos permite indicar a la funcion SUMMARIZECOLUMNS que no use esa expresion para determinar la existencia o no de datos.

summarizecolumns_3

Ejemplo 4

 EVALUATE
 SUMMARIZECOLUMNS (
     Product[Color],
     FILTER( Geography, Geography[Country Region Name] = "Germany" ),
     "Total Units", [Internet Total Units]
 )

En este ejemplo agregamos una condición de filtro, que no necesariamente debe ser sobre un campo o tabla que estemos utilizando en los campos de GROUP BY pero si debe estar afectado a la expression.

summarizecolumns_4

SSRS + Mobile Reports + DAX (parte 1)

Con SQL Server 2016, Microsoft integro la “Datazen” dentro de Reporting Services con la denominación de Reportes Móviles.

Si nuestra solución de DW/BI utiliza SSAS (Analysis Services), especialmente la versión Tabular, como capa semántica, es interesante evaluar a DAX como language de consulta, y evitar pensar en DAX en los modelos y MDX en las consultas.

También puede ser una opción interesante tener SSAS Tabular detrás de nuestros reportes móviles, para mejorar tiempos de respuestas o aprovechar el poder de cálculo de DAX, reduciendo la complejidad en los reportes.

Los reportes móviles requieren acceder a los datos a través de “Shared Datasets”, estos pueden normalmente construirse con Report Builder o SSDT.

Para trabajar con DAX, vamos a necesitar trabajar los “Shared Datasets” con SSDT.

Los pasos para un reporte sencillo serían:

1- Definir conexión

dax-ssrs-mobile_1

2- Crear un “Shared Dataset”

Para trabajar con DAX debemos configurar el Dataset para comandos DMX de manera de ingresar el comando DAX.

dax-ssrs-mobile_2

Esto nos permite ingresar la sentencia DAX, y si necesitamos trabajar con parámetros, para este ejemplo inicial, ingresamos un DAX sencillo sin parámetros.

EVALUATE
SUMMARIZECOLUMNS (
     Product[Color],
     Geography[Country Region Name],
     'Product Category'[Product Category Name],
     "Total Sales", [Internet Total Sales],
     "Total Units", [Internet Total Units]
 )

dax-ssrs-mobile_3

Creado el Dataset debemos desplegarlo en el servidor de reportes.

dax-ssrs-mobile_4

3- Crear Reporte móvil

Para crear el reporte debemos utilizar la aplicación “Mobile Report Publisher”, e incorporar el Dataset construido con la sentencia DAX

dax-ssrs-mobile_5

Luego procedemos a construir el reporte, pudiendo quedar algo asi:

DAX-SSRS-MOBILE_6.PNG

 

 

 

 

 

DAX – ALLSELECTED – Porcentaje de…

DAX es un language de funciones, como tal tenemos muchas funciones interesantes, y como son tantas algunas pueden pasar o muchas, sin que sepamos como podemos utilizarlas.

En este caso voy a mostrarles una utilidad sencilla de la function ALLSELECTED, si bien es un función que requiere mirar en detalle, si les interesa pueden leer el excelente articulo de Alberto Ferrari en el link.

Dada una métrica sencilla de cantidad de Clientes que posee la siguiente sintaxis:

Customers:=CALCULATE( DISTINCTCOUNT( [CustomerKey] ))

genero una segunda medida que la denomino Customers %, y que me muestra el % de Clientes… Ahora que %?, bien ahí está lo interesante…

Customers %:=
DIVIDE
( 
  [Customers], 
  CALCULATE([Customers], ALLSELECTED())
)

Utilizando la función ALLSELECTED estamos indicando que elimine el contexto de filtro de las filas y columnas pero manteniendo los demás contextos de filtros y filtros explícitos.

Si seleccionamos estas métricas por ejemplo en una tabla de PowerBI veríamos lo siguiente

dax-allselected-1

Es decir, el total de clientes y como % el valor 100. Si agregamos columnas o filas que modifiquen el contexto veremos como funciona este ejemplo

dax-allselected-2

DAX ALLSELECTED 3.PNG