¿Alguien puede traducir lo que me está pasando?

Un usuario Pregunto ✅

talleslessa

Bastante nuevo en DAX todavía no entiendo todos los conceptos, cómo funciona el filtrado exacto, lo que hacen el filtro cruzado y la relación de uso … entonces, ¿alguien podría explicar como si fuera 5 lo que está sucediendo en la fórmula a continuación:
DELTA PMV =
IF (‘produto_espelho'[cod_target]= EN BLANCO (), EN BLANCO (), – (
CALCULAR(
SUM (Venda[venda bruta]) / SUM (Venda[venda_quantidade]),
USERELATIONSHIP (‘produto_espelho'[cod_target], Produto[id interno produto]),
CROSSFILTER (‘produto_espelho'[cod_target], Produto[id interno produto],Ambos),
FILTRO (Venda, Venda[data]= FECHA (AÑO (HOY ()), MES (HOY ()) – 1,01))
)
CALCULAR(
SUM (Venda[venda bruta]) / SUM (Venda[venda_quantidade]),
USERELATIONSHIP (‘produto_espelho'[mp_cod], Produto[id interno produto]),
CROSSFILTER (‘produto_espelho'[mp_cod], Produto[id interno produto],Ambos),
FILTRO (Venda, Venda[data]= FECHA (AÑO (HOY ()), MES (HOY ()) – 1,01))

)))
Aquí está la estructura de datos de las tablas involucradas. para el contexto.
Estructura de datosEstructura de datos
Muy apreciado.

mahoneypat

Esta es una expresión de columna DAX en lo que parece no ser un buen modelo (su imagen muestra un filtrado bidireccional, lo cual no es una buena práctica). A continuación se muestra el código reformateado con comentarios para explicar algunos pasos. Es probable que su modelo deba rehacerse correctamente, lo que luego requeriría que se reescribiera esta expresión.

DELTA PMV =
SI (
‘produto_espelho'[cod_target]
= BLANCO (),
// verifica si el valor en esa columna está en blanco
BLANCO (),
// si es así, regrese en blanco; si no, devuelve la siguiente expresión compleja
(
// tomar valor negativo
CALCULAR (
SUMA ( Venda[venda bruta] )
/ SUMA ( Venda[venda_quantidade] ),
// divide las sumas de estas dos columnas
USUARIO ( ‘produto_espelho'[cod_target], Produto[id interno produto] ),
// activar una relación inactiva entre estas dos columnas
CROSSFILTER ( ‘produto_espelho'[cod_target], Produto[id interno produto], AMBOS ),
// establece el comportamiento de filtrado de esa relación en ambos sentidos
FILTRAR (
Venda,
Venda[data]
= FECHA ( AÑO (
HOY DIA ()
), MES (
HOY DIA ()
)1, 01 )
)
) // antes del cálculo, filtrar los datos a la fecha del 1 ° del mes anterior
CALCULAR (
// hacer el mismo cálculo pero con una relación diferente activada
SUMA ( Venda[venda bruta] )
/ SUMA ( Venda[venda_quantidade] ),
USUARIO ( ‘produto_espelho'[mp_cod], Produto[id interno produto] ),
CROSSFILTER ( ‘produto_espelho'[mp_cod], Produto[id interno produto], AMBOS ),
FILTRAR (
Venda,
Venda[data]
= FECHA ( AÑO (
HOY DIA ()
), MES (
HOY DIA ()
)1, 01 )
)
)
)
)

Palmadita

mahoneypat

Aquí hay un artículo / video que explica las preocupaciones con las relaciones bi-di.

Relaciones bidireccionales y ambigüedad en DAX – SQLBI

Si el modelo funciona por ahora, no es necesario reconstruirlo. Si hay más adiciones planeadas para ese informe, debería considerar mejorar el modelo (pero eso no es necesariamente fácil).

Palmadita

mahoneypat

Esta es una expresión de columna DAX en lo que parece no ser un buen modelo (su imagen muestra un filtrado bidireccional, lo cual no es una buena práctica). A continuación se muestra el código reformateado con comentarios para explicar algunos pasos. Es probable que su modelo deba rehacerse correctamente, lo que luego requeriría que esta expresión sea reescrito.

DELTA PMV =
SI (
‘produto_espelho'[cod_target]
= BLANCO (),
// verifica si el valor en esa columna está en blanco
BLANCO (),
// si es así, regrese en blanco; si no, devuelve la siguiente expresión compleja
(
// tomar valor negativo
CALCULAR (
SUMA ( Venda[venda bruta] )
/ SUMA ( Venda[venda_quantidade] ),
// divide las sumas de estas dos columnas
USUARIO ( ‘produto_espelho'[cod_target], Produto[id interno produto] ),
// activar una relación inactiva entre estas dos columnas
CROSSFILTER ( ‘produto_espelho'[cod_target], Produto[id interno produto], AMBOS ),
// establece el comportamiento de filtrado de esa relación en ambos sentidos
FILTRAR (
Venda,
Venda[data]
= FECHA ( AÑO (
HOY DIA ()
), MES (
HOY DIA ()
)1, 01 )
)
) // antes del cálculo, filtrar los datos a la fecha del 1 ° del mes anterior
CALCULAR (
// hacer el mismo cálculo pero con una relación diferente activada
SUMA ( Venda[venda bruta] )
/ SUMA ( Venda[venda_quantidade] ),
USUARIO ( ‘produto_espelho'[mp_cod], Produto[id interno produto] ),
CROSSFILTER ( ‘produto_espelho'[mp_cod], Produto[id interno produto], AMBOS ),
FILTRAR (
Venda,
Venda[data]
= FECHA ( AÑO (
HOY DIA ()
), MES (
HOY DIA ()
)1, 01 )
)
)
)
)

Palmadita

talleslessa

En respuesta a mahoneypat

¡Muchas gracias por la explicación detallada!

No tomé este modelo, así que realmente no sé por qué se hizo de esta manera.

¿Cuáles son las desventajas de usar un filtro bidireccional? En realidad, no puedo comprender el concepto de un filtro bidireccional, por lo que entiendo, un filtro direccional tomará un valor de una tabla A y lo aplicará como un filtro de la tabla B relacionada a través de su dirección de filtro. Entonces, en el caso de uno bidireccional, entonces cualquier filtro aplicado a A se aplicaría primero a B y luego nuestra selección en B se volvería a aplicar a la tabla A.

¿Existe una manera fácil de evitar (o reelaborar esto) y obtener los mismos resultados?

Deja un comentario

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