Cómo obtener valores Wow continuos del conjunto de datos de formato alto

Un usuario Pregunto ✅

Anónimo

Articulo Semana Conductor Puntaje Resp.
1 551 D0 6 98
1 551 D1 6.87 189
1 551 D2 6.67 63
1 551 D3 5.3 70
1 552 D0 6.92 182
1 552 D1 7.24 133
1 552 D2 4.57 49
1 552 D3 6.25 70
3 551 D0 7.8 196
3 551 D1 7.32 77
3 551 D2 4.97 105
3 551 D3 5.07 161
3 552 D0 5.31 112
3 552 D1 11.3 70
3 552 D2 5.83 42
3 552 D3 5.55 133
4 551 D0 4.4 70
4 551 D1 5.04 91
4 551 D2 8.27 469
4 551 D3 3.1 70
4 552 D0 3.86 49
4 552 D1 15 35
4 552 D2 8.71 133
4 552 D3 6.21 49
7 551 D0 8.63 119
7 551 D1 10.89 7
7 551 D2 4.57 49
7 551 D3 10.69 35
7 552 D0 6 98
7 552 D1 6.87 189
7 552 D2 6.67 63
7 552 D3 5.3 70

Hola a todos,

Quiero calcular los valores de WoW del controlador a nivel de elemento.

Los valores deben estar en una tabla cruzada como se muestra a continuación:

ít D0 Guau D1 Guau D2 Guau D3 Guau
1 9.1 8.76 8.1 9.4
3 9.3 9.04 8.8 9.6
4 9.4 9.18 9.15 9.7
7 9.6 9.46 9.85 10.2

Si selecciono la semana 552 del filtro, la columna D0..D3 en la tabla 2 debería mostrar la suma ponderada de la puntuación y las respuestas y las columnas de WoW deberían mostrar la suma ponderada de la semana 551.

El desafío aquí es que si selecciono las semanas 553 y 554, espero que la columna de WoW muestre la media ponderada de 551 y 552. Mis datos son de 52 semanas. De manera similar, seleccionar 3 semanas consecutivas debería darme la media ponderada de las 3 semanas anteriores correspondientes al elemento y al controlador (D0..D3) y así sucesivamente.

¿Alguien puede ayudarme en esto?

@Anónimo @PowBi @parry2k @jdbuchanan71 @Greg_Deckler @Cmcmahan

cmmahan

En respuesta a Anónimo

Ahh, ahora ESTO tiene sentido. Suponiendo que tiene una medida para el período de tiempo actual [Weighted Mean] como esto:

Weighted Mean = SUMX('Table', [Score] * [Resp]) / SUM('Table'[Resp])

La forma básica del DAX para el valor WoW de una sola semana sería:

WoW Mean = [Weighted Mean] - CALCULATE( [Weighted Mean], FILTER( ALL('Table'[Week]), 'Table'[Week] = SELECTEDVALUE('Table'[Week])-1))

Ya que solo quieres la diferencia entre el actual [Weighted Mean] y el [Weighted Mean] con un conjunto diferente de semanas, puede hacerlo con la sintaxis CALCULATE para cambiar el contexto de parte de la medida.

Sin embargo, ha ido un paso más allá y ha agregado el requisito de que si hay varias semanas disponibles a través del filtro/segmentación, debe usar la misma cantidad de semanas anteriores. Todavía es factible, solo necesitamos ser más complicados en la forma en que seleccionamos el período de tiempo anterior.

WoW Mean (Multiweek) =
// VAR numWeeks = DISTINCTCOUNT('Table'[Week]) // Selected weeks may not necessarily be continuous, or there may be a week with no data
VAR numWeeks =  // Better formula for figuring out the timespan, though will still give weird results if you skip a week in slicer (e.g. Week 5,6,8 will compare data from weeks 5,6, and 8 to data from weeks 1-4)
    MAX ( 'Table'[Week] ) - MIN ( 'Table'[Week] ) + 1
RETURN
    [Weighted Mean]
        - CALCULATE (
            [Weighted Mean],
            FILTER (
                ALL ( 'Table'[Week] ),
                'Table'[Week]
                    IN GENERATESERIES ( MIN ( 'Table'[Week] ) - numWeeks, MIN ( 'Table'[Week] ) - 1 )
            )
        )

He adjuntado un .pbix que usé. agregué al azar [Score] datos para las semanas 53/54, pero mantuvo [Resp] lo mismo por pereza.

Tenga en cuenta que hay muchas maneras de hacer este filtro en lugar de usar la sintaxis de estilo IN GENERATESERIES.

Mi primer pensamiento fue usar IN ADDCOLUMNS(VALUES(‘Table'[Week]), «Semana anterior», ‘Tabla'[Week]-numWeeks)) sintaxis de estilo, pero creo que I GENERATESERIES es una forma más fácil/clara de hacerlo. Esta versión también tenía el mismo problema de manejo de semanas sin datos/datos filtrados de manera deficiente.

También puedes usar ‘Tabla'[Week] >= MIN(‘Tabla'[Week])-numSemanas && ‘Tabla'[Week]

El punto es hacer que la instrucción FILTER funcione para los datos del período de tiempo anterior. Una vez que haga eso para cambiar el contexto correctamente, el resto debería encajar.

hola @anonimo

me podrias decir como se calcula la columna D0..D3 en la tabla 2 que debe mostrar la suma ponderada de la puntuación y las respuestas si selecciono la semana 552 del filtro?

Atentamente
Maggie

Equipo de apoyo comunitario _ Maggie Li
Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución. para ayudar a los otros miembros a encontrarlo más rápidamente.

Anónimo

En respuesta a v-juanli-msft

hola @v-juanli-msft,

Gracias por responder

El método para calcular la media ponderada es a través de una consulta DAX.

La consulta es: SUMX(tabla, puntuación*respuestas)/sum(respuesta).

Esta es la forma de calcular D0..D3 para cada artículo y el D0-WoW..D3-Wow también se calcula de la misma manera, solo para las semanas anteriores.

¿Es esto lo que estabas preguntando?

Gracias

cmmahan

En respuesta a Anónimo

Sinceramente, no tengo ni idea de por dónde empezar para que podamos hablar usando un diccionario compartido. Los datos que compartió son MUY útiles como punto de partida, pero parece que no puedo replicar la segunda tabla que compartió que muestra sus resultados actuales. No tengo idea de cómo se llega a un valor de 9,1 para el artículo 1, D0. O cualquiera de los otros números en esa tabla utilizando los datos proporcionados.

Además, tengo ni idea qué es un «Valor WoW» o cómo calcularlo. Y eso es antes de que añadamos el hecho de que quieres un laminación Valor WoW. Parece que desea algún tipo de promedio ponderado, pero ¿cómo determina el peso? Dices que quieres WoW para semanas anteriores, pero ¿cuántas semanas anteriores? ¿Debería D0-WoW tener el mismo valor que D0, pero para la semana anterior o algo así?

Adjunté el archivo .pbix con el que jugué para intentar replicar sus resultados, para que pueda ver dónde me he quedado atascado. Con suerte, si puede explicar lo que me estoy perdiendo, podemos obtener su valor de WoW.

Anónimo

En respuesta a cmmahan

Hola, @Cmcmahan Gracias por su apoyo,

Aquí, la respuesta a su primera pregunta es que estamos calculando el valor 9.1 como

SUMX (Puntuación * Resp) / SUM (Resp) al igual que las puntuaciones ponderadas, que es simplemente decir Valor XYZ. 9.1 no es el valor correcto, son solo valores ficticios.

La segunda columna tiene los valores con WoW, es decir, el cambio de semana a semana.

WoW se calcula como el XYZ de la semana actual (o la semana que seleccione) – el valor XYZ de la semana anterior.

El problema al que me enfrento es que si selecciono varias semanas, debería tener el valor de WoW como XYZ de las semanas seleccionadas actuales y restarlo de XYZ del mismo número anterior de semanas.

Digamos que calculo el XYZ para un artículo en la columna D0 para la semana 552 (que se selecciona desde el filtro de nivel de página), la columna WoW debe contener el valor para la semana 551 en el mismo artículo.

Pero, si selecciono la semana 553 y 554 para el mismo procedimiento, el D0 tendría los valores para 553 y 554 pero el WoW debería contener los valores para 551 y 552.

De manera similar, el número de semanas seleccionadas, la columna D0 tendría la media ponderada (XYZ) para esos meses y la columna WoW mostraría los valores para el mismo número de semanas (anteriores a la semana mínima seleccionada).

La forma en que ha calculado los valores es la correcta, pero la columna de WoW debería tener los valores de las semanas anteriores.

Entonces, ¿cómo podré resolverlo a partir de expresiones DAX?

cmmahan

En respuesta a Anónimo

Ahh, ahora ESTO tiene sentido. Suponiendo que tiene una medida para el período de tiempo actual [Weighted Mean] como esto:

Weighted Mean = SUMX('Table', [Score] * [Resp]) / SUM('Table'[Resp])

La forma básica del DAX para el valor WoW de una sola semana sería:

WoW Mean = [Weighted Mean] - CALCULATE( [Weighted Mean], FILTER( ALL('Table'[Week]), 'Table'[Week] = SELECTEDVALUE('Table'[Week])-1))

Ya que solo quieres la diferencia entre el actual [Weighted Mean] y el [Weighted Mean] con un conjunto diferente de semanas, puede hacerlo con la sintaxis CALCULATE para cambiar el contexto de parte de la medida.

Sin embargo, ha ido un paso más allá y ha agregado el requisito de que si hay varias semanas disponibles a través del filtro/segmentación, debe usar la misma cantidad de semanas anteriores. Todavía es factible, solo necesitamos ser más complicados en la forma en que seleccionamos el período de tiempo anterior.

WoW Mean (Multiweek) =
// VAR numWeeks = DISTINCTCOUNT('Table'[Week]) // Selected weeks may not necessarily be continuous, or there may be a week with no data
VAR numWeeks =  // Better formula for figuring out the timespan, though will still give weird results if you skip a week in slicer (e.g. Week 5,6,8 will compare data from weeks 5,6, and 8 to data from weeks 1-4)
    MAX ( 'Table'[Week] ) - MIN ( 'Table'[Week] ) + 1
RETURN
    [Weighted Mean]
        - CALCULATE (
            [Weighted Mean],
            FILTER (
                ALL ( 'Table'[Week] ),
                'Table'[Week]
                    IN GENERATESERIES ( MIN ( 'Table'[Week] ) - numWeeks, MIN ( 'Table'[Week] ) - 1 )
            )
        )

He adjuntado un .pbix que usé. agregué al azar [Score] datos para las semanas 53/54, pero mantuvo [Resp] lo mismo por pereza.

Tenga en cuenta que hay muchas maneras de hacer este filtro en lugar de usar la sintaxis de estilo IN GENERATESERIES.

Mi primer pensamiento fue usar IN ADDCOLUMNS(VALUES(‘Table'[Week]), «Semana anterior», ‘Tabla'[Week]-numWeeks)) sintaxis de estilo, pero creo que I GENERATESERIES es una forma más fácil/clara de hacerlo. Esta versión también tenía el mismo problema de manejo de semanas sin datos/datos filtrados de manera deficiente.

También puedes usar ‘Tabla'[Week] >= MIN(‘Tabla'[Week])-numSemanas && ‘Tabla'[Week]

El punto es hacer que la instrucción FILTER funcione para los datos del período de tiempo anterior. Una vez que haga eso para cambiar el contexto correctamente, el resto debería encajar.

Anónimo

En respuesta a cmmahan

Hola @Cmcmahan

Gracias por publicar una forma tan elaborada de lograr el resultado. Anteriormente, estaba tratando de usar esta misma expresión DAX pero con &&, pero no funciona porque da el resultado en una ecuación booleana y no en números enteros, por lo tanto, no da el resultado.

Si tiene alguna sugerencia sobre cómo usar con &&, responda. Pero, el problema se resuelve con Generateseries. Funcionó a las mil maravillas.

Gracias de nuevo por vuestro apoyo.

Cubas Dhruv

cmmahan

En respuesta a Anónimo

No hay problema. Era un problema interesante de resolver. Lo hacemos todo por las felicitaciones y las respuestas aceptadas.

¿En qué parte estabas usando el &&? ¿El filtro?

En cuanto al uso de la sintaxis de estilo (valor > MIN(otro valor) && (valor < MAX(último valor))) para filtrar, probablemente necesite envolver eso en un FILTRO(tabla, ) configurado para trabajar.

Deja un comentario

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