Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Enhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.

Reply
Syndicate_Admin
Administrator
Administrator

Función DAX para comparar las ventas netas / unidades completas del año pasado frente a las ventas netas / unidades de este año

hola amigos,

Sería realmente útil si pudieras ayudarme con la siguiente consulta. Puede sonar simple, pero aún así se atascó un poco.

Estoy haciendo un informe de precios en Power BI y la comparación de los precios se basa en el mismo cliente / mismo artículo vendido. La comparación de la línea de base se basa en todo el precio / unidad del año pasado frente al mes seleccionado para el año en curso. Principalmente porque no todos los artículos se compran y compran todos los meses igual que LY.

En ese sentido, cuál es la función dax de fecha correcta que me gustaría usar. Muy cualquier comentario / consejo.

SM

6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

muchas gracias amit por su respuesta tamizada. Creo que la que me sería útil es la función del año anterior. Solo para darte un ejemplo, este es mi objetivo final.

1. Precio AVG CY_ mes (Ene'22) - 50

2. AVG Price LY (ene'21 - dic'21) - 42

Desviación de precios (50/(42-1))

La línea base 2 siempre seguirá siendo la misma durante todo el año, sin importar qué mes esté comparando en 2022.

¿Crees que el dax del año anterior es el adecuado para esto?

Syndicate_Admin
Administrator
Administrator

@sandeep_me, pocas medidas utilizando la inteligencia del tiempo que, puedes probar

Ventas YTD = CALCULATE(SUM(Sales[Sales Amount]),DATESYTD('Date'[Date],"12/31"))
Últimas ventas YTD = CALCULATE(SUM(Sales[Sales Amount]),DATESYTD(dateadd('Date'[Date],-1,Year),"12/31"))
Este año Ventas = CALCULATE(SUM(Sales[Sales Amount]),DATESYTD(ENDOFYEAR('Date'[Date]),"12/31"))
Ventas del año pasado = CALCULATE(SUM(Sales[Sales Amount]),DATESYTD(ENDOFYEAR(dateadd('Date'[Date],-1,Year)),"12/31"))
Últimas a las últimas ventas de YTD = CALCULATE(SUM(Sales[Sales Amount]),DATESYTD(dateadd('Date'[Date],-2,Year),"12/31"))
Año detrás de las ventas = CALCULATE(SUM(Sales[Sales Amount]),dateadd('Date'[Date],-1,Year))

Año detrás de las ventas = CALCULATE(SUM(Sales[Sales Amount]),SAMEPERIODLASTYEAR('Date'[Date]))
ventas del año pasado = CALCULATE(SUM(Sales[Sales Amount]),previousyear('Date'[Date]))
PY promedio = IF([Average CY]=0,BLANK(),CALCULATE([Average CY],SAMEPERIODLASTYEAR("dCalendar"[Date])))

Solo año vs año, no un nivel por debajo

Este año = CALCULATE(sum('Table'[Qty]),filter(ALL('Date'),'Date'[Year]=max('Date'[Year])))
Último año = CALCULATE(sum('Table'[Qty]),filter(ALL('Date'),'Date'[Year]=max('Date'[Year])-1))

Power BI: año tras año con o sin inteligencia de tiempo
https://medium.com/@amitchandak.1978/power-bi-ytd-questions-time-intelligence-1-5-e3174b39f38a
https://www.youtube.com/watch?v=km41KfM_0uA

Muchas gracias amit. Tengo un dilema relacionado con esto. Tratará de explicarlo lo máximo posible para que quede claro.

Entonces, lo que estoy tratando de hacer es comparar este año el valor de ventas de MTD vendido al mismo cliente y el mismo artículo frente al valor de ventas de todo el año LY vendido al mismo cliente y artículo. Si el mismo artículo se vende al mismo cliente en ambos períodos de tiempo, entonces quiero devolver el valor de ventas para el MTD del año en curso. A continuación se muestra la lógica de Excel

sandeep_me_1-1643379549943.png

Aquí está mi función DAX para esto, pero no parece que obtenga el mismo valor que la versión de Excel (que es la lógica correcta). Pensé que podrías tener algún consejo.

MTD de ventas para clientes /Artículos vendidos ambos años =

VAR ItemTable =
CALCULABLE (
ADDCOLUMNS (
VALORES ( Atributos[Elemento] ),
"Ventas dos años", CALCULAR (
IF ( AND ( [Sales LY]>0 , AND([Sales MTD]> 0,AND([Sales Qty LY] > 0,[Sales Qty MTD] > 0))), TRUE, FALSE )
)
),
ALL ( 'Fecha' ),DATESMTD('Fecha'[Día])
)

VAR Customertable =
CALCULABLE (
ADDCOLUMNS (
VALORES ( Atributos[Cliente] ),
"Ventas Dos Años Cliente", CALCULAR (
IF ( AND ( [Sales LY]>0 , AND([Sales MTD]> 0,AND([Sales Qty LY] > 0,[Sales Qty MTD] > 0))), TRUE, FALSE )
)
),
ALL ( 'Fecha' ),DATESMTD('Fecha'[Día])
)

VAR CALC =
CALCULATE([Sales MTD], FILTER ( ItemTable, [Sales Two Years] = TRUE ), FILTER(Customertable, [Sales Two Years Customer] = TRUE ))
DEVOLUCIÓN
CALC

@sandeep_me ,

De acuerdo con su código, sé que creará dos tablas virtuales ItemTable y Customertable y luego calculará [Sales MTD] en función de estas tablas. Creo que usas la función ALL en tablas virtuales. Por lo tanto, agregue algún filtro en el último calcualte para filtrar las tablas virtuales por tabla de hechos.

Pruebe este código.

Sales MTD for Customers/Items sold both Years =
VAR ItemTable =
    CALCULATETABLE (
        ADDCOLUMNS (
            VALUES ( Attributes[Item] ),
            "Sales Two Years",
                CALCULATE (
                    IF (
                        AND (
                            [Sales LY] > 0,
                            AND ( [Sales MTD] > 0, AND ( [Sales Qty LY] > 0, [Sales Qty MTD] > 0 ) )
                        ),
                        TRUE,
                        FALSE
                    )
                )
        ),
        ALL ( 'Date' ),
        DATESMTD ( 'Date'[Day] )
    )
VAR Customertable =
    CALCULATETABLE (
        ADDCOLUMNS (
            VALUES ( Attributes[Customer] ),
            "Sales Two Years Customer",
                CALCULATE (
                    IF (
                        AND (
                            [Sales LY] > 0,
                            AND ( [Sales MTD] > 0, AND ( [Sales Qty LY] > 0, [Sales Qty MTD] > 0 ) )
                        ),
                        TRUE,
                        FALSE
                    )
                )
        ),
        ALL ( 'Date' ),
        DATESMTD ( 'Date'[Day] )
    )
VAR CALC =
    CALCULATE (
        [Sales MTD],
        FILTER (
            ItemTable,
            AND ( [Sales Two Years] = TRUE, [Item] = MAX ( Attributes[Item] ) )
        ),
        FILTER (
            Customertable,
            AND (
                [Sales Two Years Customer] = TRUE,
                [Customer] = MAX ( Attributes[Customer] )
            )
        )
    )
RETURN
    CALC

Saludos
Rico Zhou

Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

Gracias Rico, fue servicial. Mi fórmula inicial parece estar funcionando.

Me tenía la consulta mutua. El cálculo de MTD anterior (que compartí primero) parece estar funcionando y me gustaría usar la misma fórmula para hacer el cálculo de YTD. A continuación se muestra el cálculo actual de YTD

Ventas YTD para Clientes/Artículos vendidos ambos Años =

VAR ItemTable =
CALCULABLE (
ADDCOLUMNS (
VALORES ( Atributos[Elemento] ),
"Ventas dos años", CALCULAR (
IF ( AND ( [Sales LYTD]>0 , AND([Sales YTD]> 0,AND([Sales Qty LYTD] > 0,[Sales Qty YTD] > 0))), TRUE, FALSE )
)
),
ALL ( 'Fecha' ),DATESYTD('Fecha'[Día])
)

VAR Customertable =
CALCULABLE (
ADDCOLUMNS (
VALORES ( Atributos[Cliente] ),
"Ventas Dos Años Cliente", CALCULAR (
IF ( AND ( [Sales LYTD]>0 , AND([Sales YTD]> 0,AND([Sales Qty LYTD] > 0,[Sales Qty YTD] > 0))), TRUE, FALSE )
)
),
ALL ( 'Fecha' ),DATESYTD('Fecha'[Día])
)

VAR CALC =
CALCULATE([Sales YTD], FILTER ( ItemTable, [Sales Two Years] = TRUE ), FILTER(Customertable, [Sales Two Years Customer] = TRUE ))
DEVOLUCIÓN
CALC
A continuación se muestra lo que he intentado convertir en base a la fórmula MTD. La lógica tanto en el MTD como en el YTD, excepto la comparación de la línea de base para YTD, es YTD el año anterior y la de MTD es el promedio de todo el año anterior. Así que para la mejor práctica me gustaría utilizar el mismo tipo de fórmula.
Ventas YTD para Clientes/Artículos vendidos ambos Years_test =

Tabla VAR1 =
CALCULABLE (
ADDCOLUMNS (
RESUMIR ( Atributos, Atributos[Cliente], Atributos[Elemento]),
"SalesQty", [Cantidad de ventas YTD],
"SalesQtyLY", [Cantidad de ventas LYTD],
"Sales_", [Ventas YTD],
"SalesLY", [Ventas LYTD]
),
ALL('Fecha'),DATESYTD('Fecha'[Día])
)
Tabla VAR2 =
ADDCOLUMNS (
tabla1,
"Incluir",
SI (
ISBLANK ( [SalesQty] ) || ISBLANK ( [SalesQtyLY] )
|| ISBLANK ( [Ventas] )
|| ISBLANK ( [Sales_] )
|| [SalesQty] <= 0
|| [SalesQtyLY] < = 0
|| [SalesLy] <= 0
|| [Sales_] < = 0,
FALSO
VERDADERO
)
)
Tabla VAR3 =
ADDCOLUMNS (
tabla2,
"Resultado",
IF ( [Include] = TRUE, [Sales_],0)
)

VAR SalesForItemCustomerBothPeriods= SUMX ( FILTER ( tabla3, [Include] = TRUE ), [Resultado] )
DEVOLUCIÓN
SalesForItemCustomerBodos
Por alguna razón estoy encontrando un poco de discrepancias entre estas dos fórmulas. Creo que hay algún problema de filtro de All(date),DatesYTD(date[day]). Cualquier consejo sería muy útil
KR
Sandeep

Muchas gracias amit. Tengo un dilema relacionado con esto. Tratará de explicarlo lo máximo posible para que quede claro.

Entonces, lo que estoy tratando de hacer es comparar este año el valor de ventas de MTD vendido al mismo cliente y el mismo artículo frente al valor de ventas de todo el año LY vendido al mismo cliente y artículo. Si el mismo artículo se vende al mismo cliente en ambos períodos de tiempo, entonces quiero devolver el valor de ventas para el MTD del año en curso. A continuación se muestra la lógica de Excel

sandeep_me_0-1643379373144.png

Aquí está mi función DAX para esto, pero no parece que obtenga el mismo valor que la versión de Excel (que es la lógica correcta). Pensé que podrías tener algún consejo.

MTD de ventas para clientes /Artículos vendidos ambos años =

VAR ItemTable =
CALCULABLE (
ADDCOLUMNS (
VALORES ( Atributos[Elemento] ),
"Ventas dos años", CALCULAR (
IF ( AND ( [Sales LY]>0 , AND([Sales MTD]> 0,AND([Sales Qty LY] > 0,[Sales Qty MTD] > 0))), TRUE, FALSE )
)
),
ALL ( 'Fecha' ),DATESMTD('Fecha'[Día])
)

VAR Customertable =
CALCULABLE (
ADDCOLUMNS (
VALORES ( Atributos[Cliente] ),
"Ventas Dos Años Cliente", CALCULAR (
IF ( AND ( [Sales LY]>0 , AND([Sales MTD]> 0,AND([Sales Qty LY] > 0,[Sales Qty MTD] > 0))), TRUE, FALSE )
)
),
ALL ( 'Fecha' ),DATESMTD('Fecha'[Día])
)

VAR CALC =
CALCULATE([Sales MTD], FILTER ( ItemTable, [Sales Two Years] = TRUE ), FILTER(Customertable, [Sales Two Years Customer] = TRUE ))
DEVOLUCIÓN
CALC

Helpful resources

Announcements
July 2025 community update carousel

Fabric Community Update - July 2025

Find out what's new and trending in the Fabric community.

July PBI25 Carousel

Power BI Monthly Update - July 2025

Check out the July 2025 Power BI update to learn about new features.

Top Solution Authors
Top Kudoed Authors