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:
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.
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.
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