¿Cómo obtener el valor del mismo período del año pasado, el período no es contiguo?

Un usuario Pregunto ✅

AiolosZhao

Hola a todos,

Tengo una columna llamada «Año-Mes», y lo que debo hacer es:

1. Cuando elijo 2019-01, la medida muestra la suma (valor) de 2018-01

2. Cuando elijo 2019-01 y 2019-02, la medida muestra la suma (valor) de 2018-01 y 2018-02

3. Cuando elijo 2019-01 y 2019-03, la medida muestra la suma (valor) de 2018-01 y 2018-03

Creo que es fácil hacer el 1. y el 2., el problema es el 3.

Lo que hice ahora:

1. Crear una medida:

measure1 = sum(value)

2. Crear medida 2:

measure 2 = CALCULATE([measure],FILTER(ALL([Year-Month]),[Year-Month] in {"""" & SUBSTITUTE(CONCATENATEX(DISTINCT([Year-Month]),[Year-Month],""","""),YEAR(TODAY()),YEAR(TODAY())-1) & """"}))

no funciona No sé por qué, ¿podría ayudarme por favor?

Gracias.

Aiolos Zhao

wcai

En respuesta a AiolosZhao

@AiolosZhao –

Creo que la razón por la que faltaba la suma de la tabla (así como la razón por la que la muestra proporcionada por amitchandak funciona cuando se agregó una columna de fecha adicional) fue que SELECTEDVALUE devuelve el valor del mes solo cuando se selecciona un valor distinto:

consulte la documentación aquí: https://docs.microsoft.com/en-us/dax/selectedvalue-function

En su caso donde se aplican varios meses, VALOR SELECCIONADO(‘Fecha'[Format Month]) devuelve BLANK() y finalmente terminó con un espacio en blanco.

Sugeriría probar lo siguiente (supongo que debería funcionar aunque aún no lo he probado), donde concateno todos los meses fiscales del año anterior en una cadena al principio y en la expresión de filtro verifiqué si la cadena contiene el específico valor que buscamos

Last year same months Sales = (
var _month_in_selection = CONCATENATEX(
ADDCOLUMNS(
SUMMARIZE('Date','Date'[Format Month]),"New Column Name",SUBSTITUTE(_sel_val,RIGHT([Format Month],4),(RIGHT([Format Month],4)-1)&"")
),
[New Column Name],";"
) Return CALCULATE(SUM(Sales[Sales Amount]),all(Sales[Sales Date]),CONTAINSSTRING(_month_in_selection,'Date'[Format Month])) )

amichandak

Si puede mes Inicio o fin de mes en la tabla tiene mes año

puedes obtenerlo fácilmente usando

Var _endDate= Maxx(ALLSELECTED('Date'[Date Filer]),DATEADD(ENDOFMONTH('Date'[Date Filer]),-12,MONTH)))
Var   _start_date= minx(ALLSELECTED('Date'[Date Filer]),DATEADD(STARTOFMONTH('Date'[Date Filer]),-12,MONTH))


return
calculate(sum(Sales[Sales Amount]),Sales[Sales Date] >= _start_date && Sales[Sales Date] <= _endDate)

AiolosZhao

En respuesta a amichandak

No puedo usar el método de inicio y finalización, consulte mi solicitud.

Cuando elijo 2019-01 y 2019-03, lo que quiero mostrar es la suma (valor) de 2018-01 y 2018-03, no 2018-02.

Por eso no encontré la forma de solucionarlo.

Aiolos Zhao

wcai

En respuesta a AiolosZhao

Si la columna está en formato de fecha, pruebe la siguiente fórmula:

Medida2 = CALCULAR(
[Measure],
MISMO PERIODO ULTIMO AÑO (NombreTabla[Date])
)

AiolosZhao

En respuesta a wcai

Probé la función SAMEPERIODYYEAR, pero la función no admite las selecciones discontinuas.

Gracias.

Aiolos Zhao

amichandak

En respuesta a AiolosZhao

Tratar

Last year same months Sales = ( 
var _sel_val = SELECTEDVALUE('Date'[Format Month])
var _sel_val_1=SUBSTITUTE(_sel_val,RIGHT(_sel_val,4),(RIGHT(_sel_val,4)-1)&"")
return
calculate(sum(Sales[Sales Amount]),'Date'[Format Month] = _sel_val_1)
)

Necesita usar izquierda y 4 ya que tiene año al inicio

AiolosZhao

En respuesta a amichandak

Gracias por responder, lo probé, pero parece que no funciona cuando selecciono 01 y 03.

Por cierto, si solo elijo 01, funciona.

Como sacar el valor del mismo periodo del año pasado, el periodo no es contigo.PNG

Mi medida:

Measure = ( 
var _sel_val = SELECTEDVALUE([Year-Month])
var _sel_val_1=SUBSTITUTE(_sel_val,LEFT(_sel_val,4),(LEFT(_sel_val,4)-1)&"")
return
calculate([Amount],[Year-Month] = _sel_val_1)
)

Aiolos Zhao

amichandak

En respuesta a AiolosZhao

Funcionó para mí durante varios meses. La única diferencia es que tengo de la tabla Fecha, marcada como una tabla de fechas en Power BI.

Captura de pantalla 2019-09-19 15.33.31.png

Intenta agregar un filtro para todos

Last year same months Sales = ( 
var _sel_val = SELECTEDVALUE('Date'[Format Month])
var _sel_val_1=SUBSTITUTE(_sel_val,RIGHT(_sel_val,4),(RIGHT(_sel_val,4)-1)&"")
return
calculate(sum(Sales[Sales Amount]),all(Sales[Sales Date]),'Date'[Format Month] = _sel_val_1)
)

AiolosZhao

En respuesta a amichandak

Hola @amitchandak,

Realmente gracias por su muestra, si agrego la dimensión Año-Mes, también funciona para mí.

Pero el problema no es total.

¿Cómo sumo el total de esta medida?

Trato de usar sumx(selectcolumns…..),..)

Pero no funciona.

¿Podrías ayudarme con eso?

Gracias.

Aiolos Zhao

wcai

En respuesta a AiolosZhao

@AiolosZhao –

Creo que la razón por la que faltaba la suma de la tabla (así como la razón por la que la muestra proporcionada por amitchandak funciona cuando se agregó una columna de fecha adicional) fue que SELECTEDVALUE devuelve el valor del mes solo cuando se selecciona un valor distinto:

consulte la documentación aquí: https://docs.microsoft.com/en-us/dax/selectedvalue-function

En su caso donde se aplican varios meses, VALOR SELECCIONADO(‘Fecha'[Format Month]) devuelve BLANK() y finalmente terminó con un espacio en blanco.

Sugeriría probar lo siguiente (supongo que debería funcionar aunque aún no lo he probado), donde concateno todos los meses fiscales del año anterior en una cadena al principio y en la expresión de filtro verifiqué si la cadena contiene el específico valor que buscamos

Last year same months Sales = (
var _month_in_selection = CONCATENATEX(
ADDCOLUMNS(
SUMMARIZE('Date','Date'[Format Month]),"New Column Name",SUBSTITUTE(_sel_val,RIGHT([Format Month],4),(RIGHT([Format Month],4)-1)&"")
),
[New Column Name],";"
) Return CALCULATE(SUM(Sales[Sales Amount]),all(Sales[Sales Date]),CONTAINSSTRING(_month_in_selection,'Date'[Format Month])) )

AiolosZhao

En respuesta a wcai

Hola @wcai,

¡Eso es realmente genial! Esto funciona para mi. Realmente muchas gracias.

La medida final es:

Measure 3 = (
var _month_in_selection = CONCATENATEX(
    ADDCOLUMNS(
        SUMMARIZE([Year-Month]),"New Column Name",SUBSTITUTE([Year-Month],YEAR(TODAY()),YEAR(TODAY()) - 1&"")
    ),[New Column Name],",")
Return
    CALCULATE([Amount],all([Year-Month]),CONTAINSSTRING(_month_in_selection,[Year-Month])
)
)

Cambio un poco para mi versión:

Measure = VAR test = CONCATENATEX(DISTINCT([Year-Month]),[Year-Month],",")
            RETURN CALCULATE([Amount],ALL([Year-Month]),CONTAINSSTRING(SUBSTITUTE(test,YEAR(TODAY()),YEAR(TODAY())-1 & ""),[Year-Month]))

Creo que la parte sorprendente de tu idea es usar CONTAINSSTRING(_month_in_selection,[Year-Month])

pero no CONTIENECADENA([Year-Month],_month_in_selection) — Esto no funcionará.

Para ser honesto, no estoy seguro de por qué son diferentes, creo que tal vez en la función CONTAINSSTRING (dentro del texto, buscar texto).

El «dentro del texto» es diferente de «buscar texto».

Y el «texto de búsqueda» no puede ser una variable o el resultado de una función si el resultado o la variable devuelve más de 1 valor.

Entonces, necesitamos usar una columna para «buscar texto», pero «dentro del texto» puede ser una variable.

¿Podrías explicarlo?

Gracias de nuevo.

Aiolos Zhao

Deja un comentario

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