Diferencia entre dos filas

Un usuario Pregunto ✅

SSS

Hola,

Necesito ayuda para resolver un problema tratando de calcular las diferencias entre dos filas en Power BI.

Mis tablas se ven como:

Índice de pedidos de fecha

01/01/2017 8501 1

02/01/2017 8345 2
03/01/2017 7985 3
04/01/2017 8134 4

Necesitaría realizar la diferencia entre las filas de Orden para obtener algo como:

Diferencia

156 (del 8501 al 8345)

360 (del 8345 al 7985)

-149 (desde 7985-8134)

Intenté agregar una columna con:

=Pedidos{Índice}-Pedidos{Índice+1}

Pero no funciona.

Agradeceré cualquier ayuda. Gracias

Zubair_Muhammad

En respuesta a Marcel Beug

Hola @SSS

Usando DAX puede agregar esta columna calculada para obtener los resultados deseados

=
VAR NextIndex = Table1[Index] + 1
RETURN
    Table1[Orders]
        - CALCULATE (
            VALUES ( Table1[Orders] ),
            FILTER ( ALL ( Table1 ), Table1[Index] = NextIndex )
        )

ratán

Hola chicos,

Tengo la misma pregunta sobre cómo encontrar la diferencia entre dos filas de la columna fechada. A continuación se muestra cómo se ve mi tabla.

Fecha Cantidad diferencia
01/06/2020 1
02/06/2020 3 2
03/06/2020 6 3

Solo quiero la diferencia entre la columna de cantidad. He intentado varias consultas, pero funciona bien en el modo de importación, pero el mío es el modo de consulta directa. Parece que hay muchas limitaciones en Direct Query. ¿Podría alguien ayudarme a dar alguna orientación con respecto a esto para DIrect Query?

Gracias por adelantado.

Ashish_Mathur

En respuesta a ratán

Hola,

Debe tener una Tabla de calendario con una relación desde la columna Fecha de su Tabla de datos hasta la columna Fecha de su Tabla de calendario. A su objeto visual, arrastre la columna Fecha desde la Tabla de calendario. Escribe estas medidas:

Cantidad = suma (datos[Number])

Cantidad el día anterior = calcular([quantity],día anterior(calendario[date]))

Diferencia en cantidad = [quantity]-[Quantity on previous day]

Espero que esto ayude.

ratán

En respuesta a Ashish_Mathur

Gracias. Funcionó

Ashish_Mathur

En respuesta a ratán

De nada. Si mi respuesta te ayudó, por favor márcala como Respuesta.

tomislav_mi

Hola chicos,

Encontré un problema que simplemente no puedo resolver. Si alguien me puede ayudar se lo agradeceria mucho!

Quiero calcular la diferencia entre dos filas, pero después de importar datos al modelo de datos, el orden de clasificación se confunde (consulte a continuación: Fecha del informe y Nombre de cuenta), por lo que una de mis fórmulas podría funcionar si el orden de clasificación es correcto. no funciona

La tabla se ve así y la columna Cambiar así es mi objetivo.

Nombre de la cuenta MRR Fecha del informe Cambio
a 100 31/01/2017 0:00 100
a 100 28/02/2017 0:00 0
a 150 30/04/2017 0:00 -30
a 100 31/05/2017 0:00 -50
B 13 31/7/2019 0:00 13
B 13 31/08/2019 0:00 0
C 5 31/7/2019 0:00 5
a 100 30/6/2017 0:00 0
a 100 31/7/2017 0:00 0
a 100 31/08/2017 0:00 0
a 100 30/09/2017 0:00 0
a 100 31/10/2017 0:00 0
a 180 31/03/2017 0:00 80

Puede notar que la cuenta tampoco tiene el orden correcto para la fecha del informe.

Si hay alguna forma de resolverlo (¿tal vez como una medida? ¿O tal vez hay una forma de importar datos correctamente?)
estaría tan agradecido.

Todo lo mejor,

Tomislav

Ashish_Mathur

En respuesta a tomislav_mi

Hola,

Puede descargar mi archivo PBI desde aquí.

Espero que esto ayude.

Sin título.png

mbelal

En respuesta a Ashish_Mathur

Hola, tengo casi los mismos datos pero la columna MRR incluye espacios en blanco, agradezco su consejo para hacerme saber cómo se verá la fórmula. Si el valor de la columna está en blanco, necesito tomar el valor más antiguo encontrado en lugar de calcular en base a ceros en lugar de balnks. Gracias.

Ashish_Mathur

En respuesta a mbelal

Hola,

Consulte la columna 1 de la imagen. Verá que el resultado en la quinta fila no es 100-0=100 sino 100-180=-80. Puede descargar mi archivo PBI desde aquí.

Espero que esto ayude.

Sin título.png

mbelal

En respuesta a Ashish_Mathur

Hola Ashish, gracias por tu apoyo. apreciado.

su solución funciona bien para los datos de importación, pero tengo datos de consulta directa, por lo que no puedo agregar una columna personalizada para hacer lo que me aconsejó, creo que necesito la misma fórmula en la consulta de energía. Aprecio tu apoyo. Gracias.

Ashish_Mathur

En respuesta a mbelal

De nada. Alguien más te ayudará con eso.

tomislav_mi

En respuesta a Ashish_Mathur

¡Gracias @Ashish_Mathur!

¡Funciona increíble!

Muchas gracias.

¡Todo lo mejor desde Croacia!

Tomislav

Ashish_Mathur

En respuesta a tomislav_mi

De nada.

SSS

¡¡Gracias chicos!! ¡Realmente ayudó!

Ashish_Mathur

Hola @SSS,

Si tiene una tabla de calendario y existe una relación entre la columna de fecha de su tabla de datos base y la columna de fecha de la tabla de calendario, entonces puede usar esta fórmula de campo calculado

=CALCULAR(SUMA(Datos[Orders]),DÍA ANTERIOR(Calendario{Fecha]))-SUMA(Datos[Orders])

Zubair_Muhammad

En respuesta a Ashish_Mathur

@Anónimo

Puedes usar uno de estos… creo

Days from Next Date =
VAR Next_Date =
    MINX (
        TOPN (
            1,
            FILTER ( Table1, [Key] = EARLIER ( [Key] ) && [Date] > EARLIER ( [Date] ) ),
            [Date], ASC
        ),
        [Date]
    )
RETURN
    DATEDIFF ( [Date], Next_Date, DAY )

O

Days from Previous Date =
VAR Previous_Date =
    MINX (
        TOPN (
            1,
            FILTER ( Table1, [Key] = EARLIER ( [Key] ) && [Date] < EARLIER ( [Date] ) ),
            [Date], DESC
        ),
        [Date]
    )
RETURN
    DATEDIFF ( Previous_Date, [Date], DAY )

Anónimo

En respuesta a Zubair_Muhammad

Hola @Zubair_Muhammad,

¡Muchas gracias!

El primero da como resultado una columna extraña, pero el segundo funciona cuando lo comparo con el resultado de Excel.

Ahora, procederé a las pruebas accediendo a datos reales de la base de datos.

Dax tiene algunos misterios para mí, todavía. No conocía el concepto de VAR ni la posibilidad de llamar registros anteriores o siguientes en una instrucción.

Muchas gracias de nuevo.

pxg08680

@SSS

Captura.PNG

Anónimo

En respuesta a pxg08680

@pxg08680

Tengo un caso similar y usaré el mismo ejemplo. Digamos que hay otra columna llamada «Tienda» con los valores ‘Tienda1’, ‘Tienda2’ y
‘Tienda3’. ¿Es posible seguir usando DAX y tener 1 tabla insertada de 3? Como ejemplo actual, en algunos puntos me da una diferencia de orden entre ‘Store1’
y ‘Tienda2’.

Marcel Beug

¿Parece que está buscando una solución en Power Query?

En general, si desea comparar valores de diferentes filas, puede agregar 2 columnas de índice, una que comienza con 0 y la otra con 1.

Luego fusiona la consulta consigo misma, usando las columnas de índice como columnas de fusión.

Si desea que los datos de la fila anterior estén en la fila actual, debe combinarlos en el índice 0 y el índice 1 (en esta secuencia);

si desea que los datos de la siguiente fila estén en la fila actual, debe combinarlos en el índice 1 y el índice 0.

Después de fusionar, ajuste el código generado y nombre su columna «Anterior» o «Siguiente».

Exoand, usando el nombre de la columna original como prefijo,

Después de expandir la ordenación en uno de los índices originales columnas

A continuación el código para su caso.

let
    Source = Table1,
    #"Added Index" = Table.AddIndexColumn(Source, "Index.0", 0, 1),
    #"Merged Queries" = Table.NestedJoin(#"Added Index",{"Index"},#"Added Index",{"Index.0"},"Next",JoinKind.LeftOuter),
    #"Expanded Next" = Table.ExpandTableColumn(#"Merged Queries", "Next", {"Orders"}, {"Next.Orders"}),
    #"Sorted Rows" = Table.Sort(#"Expanded Next",{{"Index", Order.Ascending}}),
    #"Added Custom" = Table.AddColumn(#"Sorted Rows", "Difference", each [Orders] - [Next.Orders]),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Index.0", "Next.Orders"})
in
    #"Removed Columns"

TorbenKirkWolf

En respuesta a Marcel Beug

Bueno, eso es un buen truco! Este hilo apareció en una búsqueda de Google, y es exactamente lo que necesitaba. Así que solo quiero que sepas que tu respuesta sigue viva y ayuda a las personas. 🙂

Nunca pensé en fusionar una tabla consigo misma en diferentes índices, pero ahora que lo mencionas, es una solución tan obvia como elegante. Nunca se me hubiera ocurrido esto, ¡así que muchas gracias de mi parte!

Deja un comentario

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