Forum Discussion
Subtotal visual de Matrix incorrecto
Hay @ck1995 ,
¿Hay dos tablas 'Datos' y 'Datatable' en su medida? Veo que en var defaultmonth usas 'Data' y en los códigos de abajo usas 'Datatable'. Y no pude encontrar [Mes actual] en su muestra. Veo que obtienes resultado por función IF, si quieres obtener el subtotal correcto en visual, hay dos formas.
1. Calcule en función de la medida directamente.
Material Overrun with correct total =
SUMX(VALUES(Table[Column in matrix Rows]),[Material Overrun])
2. Cree una tabla virtual al crear la medida.
Material Overrun =
VAR _VIRTUAL_TABLE =
SUMMARIZE (
ALL ( TABLE ),
TABLE[COLUMN IN MATRIX ROWS],
"Material Overrun",
VAR defaultmonth =
VALUE (
MAX ( Data[File date].[Year] ) & FORMAT ( EOMONTH ( TODAY (), -1 ), "mm" )
)
VAR _max =
CALCULATE (
MAX ( Datatable[Current Month] ),
ALLSELECTED ( Datatable[Current Month] )
)
VAR _EPdefault =
SUMX (
FILTER ( Datatable, Datatable[Current Month] = defaultmonth ),
SUM ( 'Datatable'[Diff in EP & AP (MAT)] )
)
VAR _EPmax =
SUMX (
FILTER ( Datatable, Datatable[Current Month] IN { _max } ),
SUM ( 'Datatable'[Diff in EP & AP (MAT)] )
)
VAR EPAP =
SUMX (
Datatable,
IF ( ISFILTERED ( Datatable[Current Month] ), _EPmax, _EPdefault )
)
VAR defmonth =
VALUE (
MAX ( Datatable[File date].[Year] ) & FORMAT ( EOMONTH ( TODAY (), -2 ), "mm" )
)
VAR _minmnth =
IF (
ISFILTERED ( Datatable[Current Month] ),
CALCULATE (
MIN ( ( Datatable[Current Month] ) ),
ALLSELECTED ( Datatable[Current Month] )
),
defmonth
)
VAR __BASELINE_VALUE =
SUMX (
FILTER ( Datatable, Datatable[Current Month] IN { _minmnth } ),
SUM ( 'Datatable'[Actual cost] )
)
VAR _maxmnth =
IF ( ISFILTERED ( Datatable[Current Month] ), _max, defaultmonth )
VAR __MEASURE_VALUE =
SUMX (
FILTER ( Datatable, Datatable[Current Month] IN { _maxmnth } ),
SUM ( 'Datatable'[Actual cost] )
)
VAR changeinmat = __MEASURE_VALUE - __BASELINE_VALUE
RETURN
IF (
VALUE ( EPAP ) > 0,
0,
IF (
VALUE ( changeinmat ) < 0,
0,
IF (
VALUE ( 0 - changeinmat )
> ( VALUE ( EPAP ) ),
VALUE ( 0 - changeinmat ),
VALUE ( EPAP )
)
)
)
)
RETURN
SUMX ( _VIRTUAL_TABLE, [Material Overrun] )
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.
- Syndicate_Admin4 years agoAdministrator
@RicoZhou Perdón por la confusión entre datatable y data, es la misma tabla, ese fue mi error tipográfico. También la columna del mes actual es "Archivo de datos mes y año".
Probé la solución, pero el valor devuelto es 0 en toda la tabla.
- Syndicate_Admin4 years agoAdministrator
Hay @ck1995 ,
Creo una muestra como la tuya, me encuentro con otro problema es que creo que estás creando una matriz, ¿qué columna está en el campo de fila de matriz? He probado [Número de serie] o [Fecha del archivo]. Parece que [Material Overrun] siempre devolverá 0 en todas las filas.
Material Overrun = VAR _defaultmonth = VALUE ( YEAR ( MAX ( 'Datatable'[File date] ) ) & FORMAT ( EOMONTH ( TODAY (), -1 ), "mm" ) ) VAR _max = CALCULATE ( MAX ( ( 'Datatable'[Data file month&year] ) ), ALLSELECTED ( 'Datatable'[Data file month&year] ) ) VAR _EPdefault = SUMX ( FILTER ( 'Datatable', 'Datatable'[Data file month&year] = _defaultmonth ), SUM ( 'Datatable'[Diff in EP & AP (MAT)] ) ) VAR _EPmax = SUMX ( FILTER ( 'Datatable', 'Datatable'[Data file month&year] IN { _max } ), SUM ( 'Datatable'[Diff in EP & AP (MAT)] ) ) VAR EPAP = SUMX ( 'Datatable', IF ( ISFILTERED ( 'Datatable'[Data file month&year] ), _EPmax, _EPdefault ) ) VAR defmonth = VALUE ( YEAR ( MAX ( 'Datatable'[File date] ) ) & FORMAT ( EOMONTH ( TODAY (), -2 ), "mm" ) ) VAR _minmnth = IF ( ISFILTERED ( 'Datatable'[Data file month&year] ), CALCULATE ( MIN ( ( 'Datatable'[Data file month&year] ) ), ALLSELECTED ( 'Datatable'[Data file month&year] ) ), defmonth ) VAR __BASELINE_VALUE = SUMX ( FILTER ( 'Datatable', 'Datatable'[Data file month&year] IN { _minmnth } ), SUM ( 'Datatable'[Actual cost(AP)] ) ) VAR _maxmnth = IF ( ISFILTERED ( 'Datatable'[Data file month&year] ), _max, _defaultmonth ) VAR __MEASURE_VALUE = SUMX ( FILTER ( 'Datatable', 'Datatable'[Data file month&year] IN { _maxmnth } ), SUM ( 'Datatable'[Actual cost(AP)] ) ) VAR changeinmat = __MEASURE_VALUE - __BASELINE_VALUE RETURN IF ( VALUE ( EPAP ) > 0, 0, IF ( VALUE ( changeinmat ) < 0, 0, IF ( VALUE ( 0 - changeinmat ) > ( VALUE ( EPAP ) ), VALUE ( 0 - changeinmat ), VALUE ( EPAP ) ) ) )El resultado es el siguiente. Si todas las filas devuelven 0, el subtotal también mostrará 0.
Asegúrese de que [Exceso de material] devuelva los resultados correctos en otras filas. Me muestras más detalles sobre qué resultado quieres.
Saludos
Rico ZhouSi esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.
- Syndicate_Admin4 years agoAdministrator
Hola @RicoZhou número de serie está en las filas. ¿Hay alguna forma de que nos conectemos para poder elaborar ya que el conjunto de datos es un archivo grande y esta es una réplica del conjunto de datos en el que estoy trabajando y no se puede compartir?