DAX: suma de valores identificados por un período en una tabla de calendario

Un usuario Pregunto ✅

Ormesome

Tengo una tabla de calendario vinculada a mi tabla de tráfico web en el campo de fecha.

Me gustaría sumar las páginas vistas de la semana más reciente. Si los datos están obsoletos, es posible que esta no sea la semana actual.

Calculo la semana que contiene la fecha más reciente con datos así:
_current_week_number = CALCULATE (MAX (‘Calendario'[Week Number]), ‘Todos los datos del sitio web'[Date])

¿Alguien puede explicar por qué esto me da 58 (correcto)
_current_week_pageviews = CALCULATE (SUM (‘Todos los datos del sitio web'[Pageviews]), FILTRO (‘Calendario’,[Week Number] = 43))

pero esto me da 792 (la suma de todos los hits, no solo esta semana)?
_current_week_pageviews = CALCULATE (SUM (‘Todos los datos del sitio web'[Pageviews]), FILTRO (‘Calendario’,[Week Number] = ‘Todos los datos del sitio web'[_current_week_number]))

¿Cómo corrijo esa fórmula DAX sin usar WEEKNUM (‘Todos los datos del sitio web'[Date])? Hay otras medidas que necesito calcular, como quincena_vistas de página.

Hola @Ormesome

Su idea de utilizar la medida provisional «_current_week_number « es bueno !

Pero el uso de una medida dentro de una función de filtro activa transición de contexto.

En su caso particular, en la función de filtro de esta medida:

CALCULATE (SUM (‘Todos los datos del sitio web'[Pageviews]),FILTRO (‘Calendario’,[Week Number] = ‘Todos los datos del sitio web'[_current_week_number]))

Está iterando sobre cada fecha en su tabla ‘Calendario’ (contexto de fila). Porque estas usando [_current_week_number] (que es una medida, por lo que tiene una instrucción Calculate envuelta en ella) como parte de la condición de filtro, este contexto de fila se transforma en un contexto de filtro equivalente (transición de contexto). Tu medida [_current_week_number] siempre devuelve el valor de la fecha iterada. Como resultado, su condición de filtro es siempre cierto y nada se filtra.

Aquí están mis sugerencias:

Siempre utilizar medidas provisionales en el 1er argumento de Calcular ( [expression] argumento): hace que la sintaxis sea más clara y nunca tiene ningún impacto en el rendimiento / resultados.

Solamente use medidas dentro de los argumentos de filtro cuando realmente lo desee transición de contexto que suceda.

Así que aquí Si esta usando Power Pivot en Excel 2016 o Power BI Desktop, puedes aprovechar Variables DAX:

[CurrentWeekPageViews] =

VAR CurrentWeekNumber= CALCULAR (MAX (‘Calendario'[Week Number]), ‘Todos los datos del sitio web'[Date]) REGRESO

CALCULATE (SUM (‘Todos los datos del sitio web'[Pageviews]), Calendario[Week Number] = CurrentWeekNumber )

Debe haber una mejor manera de calcular su CurrentweekNumber, pero necesitaría ver su modelo y lo que espera para optimizar el cálculo de la variable.

Hay muchos profesionales que utilizan Variables DAX. No se trata solo de medir legibilidad pero también rendimiento.


los pros Veo usando variables :
(i) La fórmula es menor, más fácil leer y mantener. Los usuarios pueden comprender mejor el papel de cada componente.
(ii) Le impide el error clásico para olvidar su función «Todo» en el argumento Tabla de su función de filtro.

(iii) El rendimiento es un poquito mejor ya que la variable solo se evalúa una vez.

(iv) También es muy conveniente cuando desee filtrar una columna según el valor de una medida pero no quieres que se aplique la transición de contexto (como hicimos aquí almacenando el valor filtrado deseado en una variable).

Espero haber sido claro Smiley feliz y te ayuda!

Hola @Ormesome

Su idea de utilizar la medida provisional «_current_week_number « es bueno !

Pero el uso de una medida dentro de una función de filtro activa transición de contexto.

En su caso particular, en la función de filtro de esta medida:

CALCULATE (SUM (‘Todos los datos del sitio web'[Pageviews]),FILTRO (‘Calendario’,[Week Number] = ‘Todos los datos del sitio web'[_current_week_number]))

Está iterando sobre cada fecha en su tabla ‘Calendario’ (contexto de fila). Porque estas usando [_current_week_number] (que es una medida, por lo que tiene una instrucción Calculate envuelta en ella) como parte de la condición de filtro, este contexto de fila se transforma en un contexto de filtro equivalente (transición de contexto). Tu medida [_current_week_number] siempre devuelve el valor de la fecha iterada. Como resultado, su condición de filtro es siempre cierto y nada se filtra.

Aquí están mis sugerencias:

Siempre utilizar medidas provisionales en el 1er argumento de Calcular ( [expression] argumento): hace que la sintaxis sea más clara y nunca tiene ningún impacto en el rendimiento / resultados.

Solamente use medidas dentro de los argumentos de filtro cuando realmente lo desee transición de contexto que suceda.

Así que aquí Si esta usando Power Pivot en Excel 2016 o Power BI Desktop, puedes aprovechar Variables DAX:

[CurrentWeekPageViews] =

VAR CurrentWeekNumber= CALCULAR (MAX (‘Calendario'[Week Number]), ‘Todos los datos del sitio web'[Date]) REGRESO

CALCULATE (SUM (‘Todos los datos del sitio web'[Pageviews]), Calendario[Week Number] = CurrentWeekNumber )

Debe haber una mejor manera de calcular su CurrentweekNumber, pero necesitaría ver su modelo y lo que espera para optimizar el cálculo de la variable.

Hay muchos profesionales que utilizan Variables DAX. No se trata solo de medir legibilidad pero también rendimiento.


los pros Veo usando variables :
(i) La fórmula es menor, más fácil leer y mantener. Los usuarios pueden comprender mejor el papel de cada componente.
(ii) Le impide el error clásico para olvidar su función «Todo» en el argumento Tabla de su función de filtro.

(iii) El rendimiento es un poquito mejor ya que la variable solo se evalúa una vez.

(iv) También es muy conveniente cuando desee filtrar una columna según el valor de una medida pero no quieres que se aplique la transición de contexto (como hicimos aquí almacenando el valor filtrado deseado en una variable).

Espero haber sido claro Smiley feliz y te ayuda!

Ormesome

En respuesta a Datatouille

Gracias. Este era exactamente el tipo de solución bien razonada y explicada que buscaba.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *