rdurkin
Una medida común que probablemente le resulte útil en los modelos tabulares de PowerPivot o SSAS es encontrar totales acumulados. Por ejemplo, es posible que desee ver las ventas totales de un producto a medida que se acumulan a lo largo del tiempo o, para los modelos de inventario, el total disponible en un momento determinado. Puede encontrar más consejos y trucos en mi blog, www.bipatterns.com.
Comencemos con una medida base en una tabla dinámica muy simple.
Ventas totales: =
CALCULAR ( SUMA ( FactSales[SalesAmount] ) )
Ahora hagamos nuestro primer intento de calcular un total acumulado. Esta es la fórmula más intuitiva, pero tiene un error común que no es necesariamente fácil de ver de inmediato.
Ventas totales acumuladas: =
CALCULAR (
[Total Sales],
FILTRAR (
TODO ( DimDate[Datekey] ),
DimDate[Datekey] <= MAX ( ( DimDate[Datekey] ) )
)
)
Partes clave de la fórmula: el uso de ALL (DimDate[DateKey]) da como resultado que se ignore el contexto actual, por lo que se analizarán las fechas fuera del contexto de la fila dinámica actual. El segundo paso clave es la comparación de DimDate[Datekey] <= MAX ( ( DimDate[Datekey] ). Esto significa que se calcularán todas las fechas en la columna DateKey que están antes del contexto de fila de la tabla dinámica actual.
Si ponemos esta medida en una tabla, obtendremos los números correctos, pero tendremos un problema restante.
La fórmula devuelve un número para las fechas que no tienen ventas. Necesitamos agregar algo de manejo de errores, que se describe a continuación.
Ventas acumuladas (correcto): =
SI (
CUENTAS ( FactSales ) > 0,
CALCULAR (
[Total Sales],
FILTRAR (
TODO ( DimDate[Datekey] ),
DimDate[Datekey] <= MAX ( ( DimDate[Datekey] ) )
)
),
BLANCO ()
)
La función SI comprueba para asegurarse de que hay ventas en el contexto seleccionado actual, de lo contrario, devuelve en blanco. Puede ver la diferencia entre las dos medidas a continuación:
Si tiene alguna pregunta para mí, puede comunicarse conmigo a través de LinkedIn o en el Comunidad PowerBI.
rdurkin
En respuesta a sdjensen
@sdjensen
Prueba lo siguiente:
Ventas acumuladas: = SI (MIN (DimDate[Datekey]) <= CALCULATE (MAX (FactSales[DateKey]), TODOS (FactSales)), CALCULAR ([Total Sales], FILTRO (Todo (DimDate[Datekey]), DimDate[Datekey]<= MAX ((DimDate[Datekey])))),BLANCO())
Márquelo como una solución o dé un kudo si funciona para usted; de lo contrario, avíseme si tiene un problema y haré todo lo posible para ayudarlo.
Gracias,
Ryan Durkin
james_m
Best solution:
Total corriente =
Luddish
Quiero hacer un gráfico para mostrar «pedidos entregados con retraso / pedidos entregados» a lo largo del tiempo.
El objetivo de nuestra empresa es llegar al 95% en 30 minutos desde el tiempo de entrega planificado.
% 30 = 1- ([SumLate]/[SumDelivered]) funciona bien cuando no miramos en un momento específico.
El problema que tengo es que el porcentaje actual que se muestra es solo en ese momento específico y no el total hasta ese momento.
yo tengo [SumLate] cual es
«SumLate = CALCULATE (COUNT (‘Pedido de comercio electrónico'[Order id]); FILTER (‘Pedido de comercio electrónico’; ‘Pedido de comercio electrónico'[Order status]= «Entregado» && [LateDelivery]> 30)) «
[LateDelivery] es ‘Pedido de comercio electrónico'[Actual Delivery Time] – ‘Pedido de comercio electrónico'[Planned Delivery Time]
Y yo tengo [SumDelivered]
SumDelivered = CALCULATE (COUNT (‘Pedido de comercio electrónico'[Order id]); FILTER (‘Pedido de comercio electrónico’; ‘Pedido de comercio electrónico'[Order status]= «Entregado»))
Quiero hacer que esto funcione como un gráfico de líneas, pero no estoy seguro de cómo aplicar la función de filtro de fecha, ya que solo estoy mirando las horas del día actual.
yeszone
¡Súper artículo! Gracias.
Anónimo
Hola,
gracias por esta solución. Pero el total acumulado comienza desde el primer día de la base de datos y sigue totalizando hasta el último día.
¿Sería posible reiniciar el totalizado cada año o incluso mes para poder hacer comparaciones totales acumulativas frente al año anterior?
Saludos
Marcos
yeszone
En respuesta a Anónimo
Hola @Anónimo,
¿Ha intentado utilizar un filtro de nivel visual durante el período de tiempo que desea? Espero que funcione.
Por ejemplo: si está mostrando datos en un elemento visual de ‘Tabla’ o ‘LineChart’, agregue un ‘filtro de nivel visual’ para el período de tiempo requerido, es decir, el mes actual, los últimos 3 meses, los próximos 3 meses, etc.
sdjensen
¿Tiene una solución alternativa en lugar de usar IF (COUNTROWS (FactSales)> 0? Digamos que profundiza hasta el nivel de día y algunos días no tienen filas en su hecho, entonces no se calculará un valor para estos días.
IF ( COUNTROWS ( FactSales ) > 0, ... ... ... BLANK() )
rdurkin
En respuesta a sdjensen
@sdjensen
Prueba lo siguiente:
Ventas acumuladas: = SI (MIN (DimDate[Datekey]) <= CALCULATE (MAX (FactSales[DateKey]), TODOS (FactSales)), CALCULAR ([Total Sales], FILTRO (Todo (DimDate[Datekey]), DimDate[Datekey]<= MAX ((DimDate[Datekey])))),BLANCO())
Márquelo como una solución o dé un kudo si funciona para usted; de lo contrario, avíseme si tiene un problema y haré todo lo posible para ayudarlo.
Gracias,
Ryan Durkin
Anónimo
En respuesta a rdurkin
Esta sugerencia me ha acercado. ¡Gracias!
En lugar de Blank () usé 0, sin embargo, dado que es un recuento acumulativo que estoy buscando, estoy pensando en lugar de cero que realmente necesitaría mostrar el valor antes. De modo que 0 más el último valor. ¿Alguna idea sobre cómo obtener eso para la parte verdadera de esta declaración IF?
Ventas acumuladas (correcto): =
SI (
CUENTAS ( FactSales ) > 0,
CALCULAR (
[Total Sales],
FILTRAR (
TODO ( DimDate[Datekey] ),
DimDate[Datekey] <= MAX ( ( DimDate[Datekey] ) )
)
),
BLANCO ()
)