URGENTE: Informe de Variación

Un usuario Pregunto ✅

Anónimo

Necesito ayuda para resolver este cálculo en Power BI. Es fácil en Tableau con parámetros de fecha, pero no estoy seguro de cómo hacerlo en Power BI.

Las reglas de cálculo son las siguientes:

  1. Inicio y parada del cliente. Esta categoría tiene dos subcategorías: (a) nuevos inicios de clientes y (b) paradas de clientes.
    • Cliente comienza. Esto está determinado por cuando un cliente se registra como una nueva cuenta, un campo de datos. Conceptualmente, si un cliente se registra/crea una cuenta en los últimos 12 meses (o 365 días), es un «cliente nuevo» y la variación del volumen cae en este grupo. Por definición, hubo algunas ventas en el período actual pero cero ventas en el período anterior (si no hubo ventas en el período actual ni ventas en el período anterior, entonces no existe variación). Si no es un cliente nuevo, la variación cae en otra categoría a continuación.
    • Paradas de clientes. Esto es para un cliente que se registró (creó una cuenta) antes de el último período de 12 meses, no compró nada del artículo en el período actual pero sí compró el artículo durante el período de 12 meses anterior.
    • Los inicios y paradas del cliente se compensan para producir la variación «Inicio y parada del cliente».
  1. Inicio y parada parciales. Esta categoría tiene dos subcategorías:
    • Parte comienza. Cuando el cliente se registró/creó una cuenta antes de los últimos 12 meses, compró el artículo (volumen) en el período actual pero no tuvo volumen en el período anterior. Si hubo volumen para el período anterior, entonces la variación cae en la categoría 2(b) o (3) a continuación.
    • Paradas parciales. Cuando el cliente se registró/creó una cuenta antes de los últimos 12 meses, el cliente no compró el artículo (sin volumen) en el período actual, pero compró algo de volumen en el período anterior. Si hubo volumen en el período actual y en el último período, entonces la variación cae en la categoría (3) a continuación.
    • Los inicios y paradas parciales se compensan para producir la variación «Inicio y parada parcial».
  1. Variación de precio = (Precio actual = Precio Anterior) x Volumen actual
  2. Variación de volumen = (Volumen actual – Volumen anterior) x Precio anterior

Intenté hacer dos tablas diferentes, unidas en la clave del artículo, porque los cálculos de variación solo buscan las transacciones relevantes del artículo del cliente, pero eso falla al calcular el inicio y la parada del cliente y el inicio y la parada del producto porque no hay datos en el anterior tabla.

El objetivo sería usar tablas de datos para filtrar los datos en las tablas actuales y anteriores, pero parece que no puedo hacer que funcionen en el medio. Cualquier ayuda sería muy apreciada.

Esta es una necesidad urgente ya que el cliente la necesita lo antes posible, y pasé horas tratando de encontrar una solución en Power BI que reproduzca Tableau.

https://drive.google.com/file/d/1EEpP1HkAQc5P0MkazTu7-J6raLocjEbl/view?usp=sharing

mfelix

En respuesta a Anónimo

Hola @Anónimo,

La pregunta aquí es sobre el período seleccionado en el Período actual y la granularidad.

Lo que hice para hacer cambios en sus dos medidas:

Previous Avg Price =
CALCULATE (
    SUMX (
        SUMMARIZE (
            'Invoice Variance',
            'Invoice Variance'[item],
            "CurAvgPrice",
                DIVIDE (
                    SUM ( 'Invoice Variance'[ext_price] ),
                    SUM ( 'Invoice Variance'[volume] ),
                    0
                )
        ),
        [CurAvgPrice]
    ),
    FILTER (
        ALL ( 'Invoice Variance'[inv_date] ),
        'Invoice Variance'[inv_date]
            <= MAX ( 'Current'[Date] ) - 365
            && 'Invoice Variance'[inv_date]
                >= MIN ( 'Current'[Date] ) - 365
    )
)



Current Avg Price =
CALCULATE (
    SUMX (
        SUMMARIZE (
            'Invoice Variance',
            'Invoice Variance'[item],
            "CurAvgPrice",
                DIVIDE (
                    SUM ( 'Invoice Variance'[ext_price] ),
                    SUM ( 'Invoice Variance'[volume] ),
                    0
                )
        ),
        [CurAvgPrice]
    ),
    FILTER (
        ALL ( 'Invoice Variance'[inv_date] ),
        'Invoice Variance'[inv_date] <= MAX ( 'Current'[Date] )
            && 'Invoice Variance'[inv_date] >= MIN ( 'Current'[Date] )
    )
)

Puede ver debajo de las líneas a las que hace referencia que están recogiendo los valores:

MFelix_1-1621507237074.png

Todos los demás tienen un solo valor anterior o actual. Esto se ve afectado por una segmentación con las fechas actuales con fechas de 2021.

Lo que pasa es que como estabas usando la tabla de fechas completa cuando comparas la fecha actual 2020 con el año anterior 2019 no obtienes valores porque tus datos comienzan en 2020, por otro y para los valores actuales cuando buscas el actual valor en 2021 no está obteniendo valores porque sus datos son de 2020 … (no estoy seguro si lo dejé en claro)

Compruebe el archivo adjunto PBIX.

mfelix

Hola @Anónimo,

Por lo que puedo ver en su modelo, las dos tablas son exactamente iguales, la única diferencia son las últimas 3 columnas que calculó en dax.

Cree que puedes hacer los cálculos basados ​​en una sola tabla que luego se filtra por las fechas de los parámetros que creaste.

Otra pregunta es sobre el período anterior, ¿también desea seleccionar ese período de la cortadora de datos, o son los 12 meses anteriores?

¿Además, no entiende la pregunta sobre las dos subcategorías en las que desea colocar a los clientes en categorías?

Anónimo

En respuesta a mfelix

Puedo replicar fácilmente el precio promedio total y la variación, pero el problema es que lo necesitan SOLO para los artículos en los que el cliente ordenó el mismo producto en los dos períodos de tiempo. Por ejemplo, este es un artículo hecho en enero.

Longhorn2009_0-1621393682801.png

Tengo los valores 4.04 y 3.84 pero el número real es solo para 1198 cuando aparece en la selección de fecha actual y la selección anterior que es actual -365

Usé los cálculos para obtener el número principal, pero no sé cómo obtener la coincidencia:

Precio promedio actual =
var ÚltimaFechaActual = MAX(‘Actual'[Date])
var CurFirstDate = MIN(‘Actual'[Date])
regreso
calcular (
SUMX(
RESUMEN(‘Variación de la factura’,’Variación de la factura'[item],
«PrecioPromedioCur»,DIVIDE(SUMA(‘Variación de Factura'[ext_price]),SUM(‘Variación de la factura'[volume]),0)),[CurAvgPrice]),
KEEPFILTERS( ‘Variación de la factura'[inv_date] <= CurLastDate && 'Variación de la factura'[inv_date] >= PrimeraFechaActual)
)
Volumen actual =
var ÚltimaFechaActual = MAX(‘Actual'[Date])
var CurFirstDate = MIN(‘Actual'[Date])
regreso
calcular (
sum ( ‘Variación de la factura'[volume] ),
KEEPFILTERS( ‘Variación de la factura'[inv_date] <= CurLastDate && 'Variación de la factura'[inv_date] >= PrimeraFechaActual)
)
Precio medio anterior =
var PrevLastDate = MAX(‘Actual'[Date])-365
var PrevFirstDate = MIN(‘Actual'[Date])-365
regreso
calcular (
SUMX(
RESUMEN(‘Variación de la factura’,’Variación de la factura'[item],
«PrevAvgPrice»,DIVIDE(SUM(‘Variación de la factura'[ext_price]),SUM(‘Variación de la factura'[volume]),0)),[PrevAvgPrice]),
KEEPFILTERS( ‘Variación de la factura'[inv_date] <= PrevLastDate && 'Variación de la factura'[inv_date] >= PrimeraFechaAnterior)
)

Anónimo

En respuesta a Anónimo

¿Cómo obtendría solo los valores donde coinciden la clave actual y la clave anterior? (por ejemplo, 1189-1)

Longhorn2009_0-1621396078026.png

mfelix

En respuesta a Anónimo

Hola @Anónimo,

Lo siento, pero todavía no entiendo cómo está filtrando la información, no puedo filtrar la información de la misma manera que la tiene y tengo muchas más líneas que usted en los cálculos.

Las fórmulas que presenta en la captura de pantalla son correctas según lo que puedo ver, por lo que lo que debe hacer es un cálculo por artículo y recoger los precios ACTUALES y PROMEDIO.

Debería ser algo similar a:

SUMX(VALUES(Table[Item], [Current] - [Average])

Esto le daría la diferencia entre los dos valores, esto es solo una suposición y puede necesitar algunos cambios ya que dije que no entiendo el contexto del filtro de su visualización.

Con respecto a la segunda parte, la sintaxis de COUNTROWS se realiza sobre una tabla, por lo que debe cambiar la forma en que tiene su fórmula:

MEASURE =
CALCULATE (
    COUNTROWS ( FILTER ( 'Invoice Variance', [Current KEY] = [Previous KEY] ) )
)

Anónimo

En respuesta a mfelix

Hola miguel,

A continuación se muestra el enlace al nuevo archivo que utiliza la captura de pantalla anterior:

https://drive.google.com/file/d/1MCzeCEaGFjLriaQExEdD4TV_0RGH5J7d/view?usp=sharing

REALMENTE aprecio su ayuda con esto, ya que este informe ha estado en curso durante un año. Entonces tiene razón, creo que tengo los cálculos correctos para obtener el precio promedio actual, el volumen actual y el precio promedio anterior.

Mi problema es obtener el cálculo de la varianza que es

(Precio Promedio Actual – Precio Promedio Anterior) * Volumen Actual

— Pero solo para filas donde la clave de licencia es la misma. Entonces, en la tabla a continuación, solo necesito las filas donde coinciden las claves. azul contra rojo

Longhorn2009_0-1621431565622.png

Aquí hay un archivo de Excel con el resultado correcto en verde:

https://drive.google.com/file/d/1y4f0n2O4SLsKdMM-H5hi65gXT-0xKvAF/view?usp=sharing

No tienes idea de lo mucho que significa tu ayuda para mí en esta etapa. Estoy listo para no estar despierto toda la noche intentando cosas diferentes.

mfelix

En respuesta a Anónimo

Hola @Anónimo,

Esta es una pregunta sobre el contexto, si quita la fecha de su configuración y agrega la siguiente medida:

Variance = ([Current Avg Price] - [Previous Avg Price]) * [Current Volume]

Obtienes el resultado a continuación:

MFelix_1-1621432568962.png

Si puede ver que el valor resaltado está de acuerdo con su archivo de Excel, la pregunta en este caso son los valores totales si desea que se calculen de la misma manera o tiene una SUMA de todos los valores anteriores.

Verifique el archivo PBIX adjunto y comuníquese conmigo para saber qué es correcto o incorrecto en el cálculo.

Anónimo

En respuesta a mfelix

El cálculo es correcto, pero necesito que se incluya la fecha porque están tratando de obtener un gráfico de barras con otras 4 variables (esa cosa de inicio y parada del cliente mencionada anteriormente). Entonces, en este ejemplo, mientras que 5.57 es correcto, las otras filas deberían ser 0 ya que no tenían un valor coincidente. Aquí es donde estaba tratando de usar Count Rows tal vez, pero no pude encontrar la manera de hacerlo correctamente:

Longhorn2009_0-1621433590345.png

mfelix

En respuesta a Anónimo

Hola @Anónimo,

La pregunta aquí es sobre el período seleccionado en el Período actual y la granularidad.

Lo que hice para hacer cambios en sus dos medidas:

Previous Avg Price =
CALCULATE (
    SUMX (
        SUMMARIZE (
            'Invoice Variance',
            'Invoice Variance'[item],
            "CurAvgPrice",
                DIVIDE (
                    SUM ( 'Invoice Variance'[ext_price] ),
                    SUM ( 'Invoice Variance'[volume] ),
                    0
                )
        ),
        [CurAvgPrice]
    ),
    FILTER (
        ALL ( 'Invoice Variance'[inv_date] ),
        'Invoice Variance'[inv_date]
            <= MAX ( 'Current'[Date] ) - 365
            && 'Invoice Variance'[inv_date]
                >= MIN ( 'Current'[Date] ) - 365
    )
)



Current Avg Price =
CALCULATE (
    SUMX (
        SUMMARIZE (
            'Invoice Variance',
            'Invoice Variance'[item],
            "CurAvgPrice",
                DIVIDE (
                    SUM ( 'Invoice Variance'[ext_price] ),
                    SUM ( 'Invoice Variance'[volume] ),
                    0
                )
        ),
        [CurAvgPrice]
    ),
    FILTER (
        ALL ( 'Invoice Variance'[inv_date] ),
        'Invoice Variance'[inv_date] <= MAX ( 'Current'[Date] )
            && 'Invoice Variance'[inv_date] >= MIN ( 'Current'[Date] )
    )
)

Puede ver debajo de las líneas a las que hace referencia que están recogiendo los valores:

MFelix_1-1621507237074.png

Todos los demás tienen un solo valor anterior o actual. Esto se ve afectado por una segmentación con las fechas actuales con fechas de 2021.

Lo que pasa es que como estabas usando la tabla de fechas completa cuando comparas la fecha actual 2020 con el año anterior 2019 no obtienes valores porque tus datos comienzan en 2020, por otro y para los valores actuales cuando buscas el actual valor en 2021 no está obteniendo valores porque sus datos son de 2020 … (no estoy seguro si lo dejé en claro)

Compruebe el archivo adjunto PBIX.

Deja un comentario

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