Relaciones entre tablas en DAX – USERELATIONSHIP – Parte 2

Hoy vamos a dar solución a las problemáticas planteadas en la entrada anterior.

Vamos a crear para ello medidas que nos ayuden a ilustrar este ejemplo. Lo primero será crear las ventas según la Fecha Activa. Vamos a utilizar una función, que puede ser conocida de otras herramientas BI, TOTALYTD().

TotalFechaActiva:=TOTALYTD(SUM(Orden[Total]);Fecha[Fecha])

Luego, vamos a indicar el rango de fecha según la columna que queremos calcular.

TotalFechaOrden:=TOTALYTD(SUM(Orden[Total]);Orden[FechaOrden])

TotalFechaProducción:=TOTALYTD(SUM(Orden[Total]);Orden[FechaProducción])

TotalFechaEntrega:=TOTALYTD(SUM(Orden[Total]);Orden[FechaEntrega])

Visto desde la tabla dinámica el resultado es el siguiente:

La medida TotalFechaProduccion es la que coincide con FechaActiva, el resto de los datos parece estar correcto indicando cada una de las medidas los datos que le corresponden.

Si nos vamos al análisis por trimestres, vemos un extraño comportamiento de la función TOTALYTD(), sabemos que esta función lo que va creando es el Total Acumulado hasta la fecha, si la fecha corresponde a un año pasado, pues al finalizar el año es el mismo dato que la suma. Como vemos, sólo es correcto para la medida que utiliza la columna Fecha, el resto en lugar de acumular, muestra el dato de la suma para cada período, sin acumular. Ni siquiera nos ha funcionado bien para la FechaProducción, que es la columna que tiene la relación activa con Fecha.

Por tanto, necesitamos que el segundo parámetro de la función TOTALYTD() sea Fecha[Fecha] y necesitamos ver a la vez los datos por las fechas de orden, producción y entrega, ¿será mucho pedir? Pues no, se puede gracias a la nueva función USERELATIONSHIP().

Así es que reescribimos nuestras medidas que devuelven el dato incorrecto.

TotalFechaActiva:=TOTALYTD(SUM(Orden[Total]);Fecha[Fecha])

La función USERELATIONSHIP() pasa a convertirse en dato de entrada para el parámetro filtro.

TotalFechaOrdenOK:=TOTALYTD(CALCULATE(SUM(Orden[Total]);USERELATIONSHIP(Orden[FechaOrden]; Fecha[Fecha])); Fecha[Fecha])

TotalFechaProducciónOK:=TOTALYTD(CALCULATE(SUM(Orden[Total]);USERELATIONSHIP(Orden[FechaProducción]; Fecha[Fecha])); Fecha[Fecha])

TotalFechaEntregaOK:=TOTALYTD(CALCULATE(SUM(Orden[Total]);USERELATIONSHIP(Orden[FechaEntrega]; Fecha[Fecha])); Fecha[Fecha])

El resultado que se muestra ahora es diferente.

Regresando a la tabla dinámica, ahora podemos ver que se corresponde con la realidad de cada trimestre.

   

De esta forma, vamos a hacer una pausa en este tema para dedicarnos un poco a comentar las Novedades de MS Office Excel 2013, luego, desde Excel 2013 seguimos hablando de DAX lo retomamos, OK?

3 pensamientos en “Relaciones entre tablas en DAX – USERELATIONSHIP – Parte 2

    1. anabisbe Autor de la entrada

      Hola Juan Luis

      La esencia de YTD es que comienza el primer día hasta la fecha actual.
      Por lo que entiendo, se ajusta más algo como Moving Annual Total (MAT), sobre lo que recomiendo ver en:
      https://www.microsoftpressstore.com/articles/article.aspx?p=2228441&seqNum=2
      http://www.daxpatterns.com/time-patterns/
      http://www.edv-buchversand.de/productinfo.php?replace=false&cnt=productinfo&mode=2&type=2&id=mp-5818&index=2&nr=0&sid=9c9aac428f67d55fdb38ac1b895c20e4

      Saludos,

      Ana

      Me gusta

      Responder

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.