JTwohig
Tengo una tabla que contiene una instantánea diaria de una cantidad. Puedo obtener la cantidad al final de cada mes con esta fórmula:
Saldo final: = CALCULATE (Sum (FactTable[AmountToDate]), LASTDATE (FactTable[Date]))
Necesito el saldo al final del mes anterior para poder restar y obtener el cambio en el mes. Probé la siguiente fórmula:
Cierre del último mes: = CALCULATE ([Closing Balance], PREVIOUSMONTH (LASTDATE (FactTable[Date])))
Esto me da el saldo de cierre correcto para el último mes del año, pero todos los demás meses están en blanco. Los resultados se muestran a continuación. He probado muchas formas diferentes pero siempre obtengo lo mismo. ¿Qué me estoy perdiendo?
Valores | |||
Año del calendario | MonthName | Balance de cierre | Cierre del mes pasado |
2016 | marcha | 59.791.699,31 | |
abril | 62.596.269,14 | ||
Mayo | 51.852.607,79 | ||
junio | 53.945.802,67 | ||
julio | 53.729.133,16 | ||
agosto | 57.174.277,35 | ||
septiembre | 56,780,543.07 | ||
octubre | 57.852.783,08 | ||
noviembre | 55.973.021,78 | ||
diciembre | 57.976.571,96 | ||
Total 2016 | 57.976.571,96 | 55.973.021,78 | |
2017 | enero | 55.479.645,44 | |
febrero | 50.214.362,52 | ||
marcha | 44.361.759,05 | ||
abril | 46.053.405,57 | ||
Mayo | 48.841.553,83 | ||
junio | 52.345.876,41 | ||
julio | 56.329.590,12 | ||
agosto | 55.859.204,39 | ||
Total 2017 | 55.859.204,39 | 56.329.590,12 | |
Gran total | 55.859.204,39 |
56.329.590,12 |
Vvelarde
En respuesta a JTwohig
@JTwohig
Hola, si siempre terminaste a fin de mes. esto puede ayudarte
ClosingBalance-1month-Alt = VAR EndofPrevMonth = PREVIOUSMONTH ( Table1[Date] ) RETURN CALCULATE ( SUM ( Table1[Amount] ), FILTER ( ALL ( Table1 ), Table1[Date] = EndofPrevMonth ) )
También puede revisar estas funciones de DAX:
APERTURA BALANCE MES
MES DE CLAUSURA
Saludos
Víctor
Lima, Perú
fhill
En respuesta a JTwohig
¡¡¡¡FINALMENTE!!!! Lo tengo … ¡Este enlace ayudó!
https://community.powerbi.com/t5/Desktop/Help-using-Earlier-in-New-Measure/td-p/55799
EndofPriorMonth = CALCULATE (SUM (Table1[Balance]), FILTRO (TODOS (Tabla1), SUMX (FILTRO (Tabla1, ANTERIORES (Tabla1)[Date]) = ÚLTIMA FECHA (ANTERIORMES (Tabla1[Date])) ), Tabla 1[Balance])))
** Qué hace esto … .Sum Blance,
Mire TODAS las filas, (Filtrar TODAS)
SUMX (Sumas para cada fila de ….)
Filtrar de nuevo (no estoy seguro de por qué)
Compare la ‘fila anterior’ (ANTES) con la última fecha del mes anterior
Cuando lo encuentre, devuelva el saldo.
EndOfMonth = CALCULATE (SUM (Table1[Balance]), ENDOFMONTH (Tabla1[Date]))
Cambiar = [EndOfMonth] – [EndofPriorMonth]
JTwohig
Pensé que publicaría esto en caso de que alguien más esté tratando de hacer lo mismo que yo.
Aquí se sugirieron dos soluciones que funcionaron cuando miré toda la tabla. Sin embargo, cuando traté de filtrar los resultados por cliente o alguna otra dimensión, el saldo de cierre del último mes seguía siendo el saldo del último mes para todo. No fue filtrado.
Lo que funcionó fue eliminar solo el filtro de la fecha en lugar de toda la tabla. Si entiendo la terminología, eso significa que mantiene el contexto para todo lo demás, pero no para las fechas.
en lugar de usar FILTER (All (FactTable),
Usé Filter (All (FactTable[CalendarYear], FactTable[MonthName], FactTable[Date]),
De esa manera obtuve los equilibrios correctos, ya sea que mirara toda la tabla o solo mirara ciertas dimensiones.
nickchobotar
En respuesta a JTwohig
@JTwohig
Antes de que se cierre esta publicación. ¿Qué pasa si usas FILTRO (ALLSELECTED (FactTable)) en lugar de
Filter (All (FactTable[CalendarYear], FactTable[MonthName], FactTable[Date]),?
Además, considere agregar una dimensión de fecha a su modelo.
JTwohig
En respuesta a nickchobotar
Eso funcionó también. Me gusta mucho más porque es más sencillo. Gracias.
Tengo una dimensión de fecha, junto con varias otras. Mi modelo usa datos de dos tablas de hechos, por lo que la única forma de obtener los datos correctos de cada tabla de hechos es usar dimensiones separadas.
nickchobotar
En respuesta a JTwohig
Hola @JTwohig
¡Excelente! Me alegra escuchar el TODOS SELECCIONADOS () funcionó para usted.
Si te entendí correctamente, estás usando dos dimensiones separadas que juegan el mismo papel para filtrar tus dos tablas de hechos. Si es así, hay un espacio para optimizar su modelo para que pueda usar solo una dimensión de Fecha. Si está interesado, publique una imagen del diagrama de su modelo.
NORTE-
JTwohig
En respuesta a nickchobotar
No, son dimensiones diferentes. Tengo una dimensión de fecha más unas para cliente, proyecto y unidad de negocio.
nickchobotar
En respuesta a JTwohig
@JTwohig
Veo. En ese caso, ¿cómo es que no está usando su dimensión Fecha para este cálculo de tiempo, sino que usa su tabla de hechos?
JTwohig
En respuesta a nickchobotar
Utilizo la dimensión de fecha para los cálculos, pero cuando publiqué el ejemplo, estaba solucionando problemas y eliminé todas las demás tablas para tratar de simplificar tanto como sea posible. Quería estar seguro de que el problema no provenía de una combinación incorrecta. También simplifiqué el cálculo. Realmente no estoy obteniendo solo un saldo inicial. Estoy haciendo cálculos con varios saldos de apertura y cierre.
Cuando soluciono problemas, me gusta llegar a la situación más simple posible en la que obtengo el error para identificar exactamente qué está fallando.
Todo finalmente funcionó bien. Implementé el modelo en SSAS, creé mi informe de Power BI y lo publiqué en un elemento web en SharePoint. Se actualiza desde una base de datos de SQL Server todas las noches.
nickchobotar
En respuesta a JTwohig
@JTwohig
¡Excelente! Ahora está claro. Marque esta publicación como resuelta.
N –
nickchobotar
@JTwohig
Estabas en el camino correcto con tu fórmula de cierre del último mes. Solo necesita tener su LASTDATE () al frente porque PREVIOUSMONTH () nos da una SUMA de todo el mes y con LASTDATE () filtra hasta la última fecha del mes. Usar LASTDATE en una variable aquí es una exageración, creo.
Closing Blance Prev Month = CALCULATE( [Sales Amount], LASTDATE(PREVIOUSMONTH('Date'[Date])) )
Nick –
JTwohig
En respuesta a nickchobotar
Mella
Eso no funcionó para mí. Lo cambié a Sum ([Sales Amount]) porque decía que no se podía determinar un solo valor. Sin embargo, incluso entonces, me dio espacios en blanco para todos los meses.
No entiendo por qué, pero, incluso cuando lo intenté de varias maneras diferentes, parece haber algo en el uso de la variable que lo hace funcionar.
nickchobotar
En respuesta a JTwohig
@JTwohig
Lo mas Lo importante es que tenga una solución que funcione.
Veo que solo hace referencia a una tabla (Tabla1) tanto para fechas como para hechos, lo que me hace suponer que no está utilizando una dimensión de Fecha separada, por eso mi solución no funcionó para usted. Mi recomendación sería incluir una dimensión de fecha, ya que está haciendo cosas de inteligencia de tiempo.
NORTE-
JTwohig
En respuesta a nickchobotar
Estás en lo correcto. Tengo una dimensión de fecha separada, pero lo puse todo en una tabla mientras soluciono problemas para intentar hacerlo lo más simple posible.
Gracias
fhill
En respuesta a JTwohig
¡¡¡¡FINALMENTE!!!! Lo tengo … ¡Este enlace ayudó!
https://community.powerbi.com/t5/Desktop/Help-using-Earlier-in-New-Measure/td-p/55799
EndofPriorMonth = CALCULATE (SUM (Table1[Balance]), FILTRO (TODOS (Tabla1), SUMX (FILTRO (Tabla1, ANTERIORES (Tabla1)[Date]) = ÚLTIMA FECHA (ANTERIORMES (Tabla1[Date])) ), Tabla 1[Balance])))
** Qué hace esto … .Sum Blance,
Mire TODAS las filas, (Filtrar TODAS)
SUMX (Sumas para cada fila de ….)
Filtrar de nuevo (no estoy seguro de por qué)
Compare la ‘fila anterior’ (ANTES) con la última fecha del mes anterior
Cuando lo encuentre, devuelva el saldo.
EndOfMonth = CALCULATE (SUM (Table1[Balance]), ENDOFMONTH (Tabla1[Date]))
Cambiar = [EndOfMonth] – [EndofPriorMonth]
JTwohig
En respuesta a fhill
Eso también funciona.
Gracias
fhill
¡Power BI / DAX tiene excelentes características para esto! ** Agosto a continuación muestra 7000 dos veces b / c. Todavía no tengo un EOD para AUG en mi tabla, en su lugar, tomará la fecha más alta de ese mes. **
StartofMonth = CALCULATE (SUM (Table1[Balance]), STARTOFMONTH (Tabla1[Date]))
EndOfMonth = CALCULATE (SUM (Table1[Balance]), ENDOFMONTH (Tabla1[Date]))
Cambiar = [EndOfMonth] – [StartofMonth]
JTwohig
En respuesta a fhill
Gracias por la sugerencia, pero no está del todo ahí, un día libre.
Necesito saber el cambio de un mes a otro. Su ejemplo muestra que el cambio fue de 5500 en julio, pero en realidad fue de 5600. Aumentó en 100 (de 400 a 500) el 1 de julio.
Me gusta más la función ENDOFMONTH que la que había usado.
No puedo evitar pensar que me falta algo simple al no poder obtener el saldo al final del mes anterior.
Vvelarde
En respuesta a JTwohig
@JTwohig
Hola, si siempre terminaste a fin de mes. esto puede ayudarte
ClosingBalance-1month-Alt = VAR EndofPrevMonth = PREVIOUSMONTH ( Table1[Date] ) RETURN CALCULATE ( SUM ( Table1[Amount] ), FILTER ( ALL ( Table1 ), Table1[Date] = EndofPrevMonth ) )
También puede revisar estas funciones de DAX:
APERTURA BALANCE MES
MES DE CLAUSURA
Saludos
Víctor
Lima, Perú
JTwohig
En respuesta a Vvelarde
Gracias Victor
Tuve que hacer un cambio. Agregué el LASTDATE:
ClosingBalance-1month-Alt = VAR EndofPrevMonth = LASTDATE (PREVIOUSMONTH (Table1[Date] )) RETORNO CALCULAR (SUMA (Tabla1[Amount] ), FILTRO (TODOS (Tabla1), Tabla1[Date] = EndofPrevMonth))
He estado intentando que esto funcione durante un tiempo. Agradezco la ayuda.
fhill
En respuesta a JTwohig
He estado tratando de lanzar un ‘DateAdd (….., – 1, Month) en alguna parte, pero no me gustan los cambios de meses … tendré que probar más por la mañana.
Para descanso