codextero
Así que este es un problema que me ha estado desconcertado por un tiempo.
La tarea consiste en calcular los ingresos totales y luego calcular otras cuentas como porcentaje de los ingresos.
Toma este conjunto de datos ficticios
Saldos de tabla
Cuenta | Año | Mes | Valor |
1 | 2010 | 1 | 8 |
1 | 2010 | 2 | 7 |
2 | 2010 | 1 | 6 |
2 | 2010 | 2 | 5 |
3 | 2010 | 1 | 4 |
3 | 2010 | 2 | 3 |
4 | 2010 | 1 | 2 |
4 | 2010 | 2 | 1 |
Tabla Chart_of_Accounts
Cuenta | Nivel 1 | Nivel 2 |
1 | Ingresos | Limonada |
2 | Ingresos | Paletas de hielo |
3 | Gastos | Limones |
4 | Gastos | Hielo |
Poner estos datos en una tabla dinámica es lo suficientemente limpio.
Los ingresos de cualquier mes serían la suma de las cuentas 1 y 2, ya que tienen el filtro de nivel 1 de «Ingresos».
Pensé que una medida sería la mejor manera de calcular una cuenta como porcentaje de los ingresos, así que escribí una medida para ese propósito.
Percent_of_Revenue = DIVIDE (CALCULATE (sum (Saldos[Value])), CALCULAR (suma (Saldos[Value]),Catálogo de cuentas[Level 1]= «Ingresos»))
La idea es que sume todas las entradas de cuenta que tengan un nivel 1 de «ingresos» y divida el valor por los ingresos para obtener el porcentaje de los ingresos. Sin embargo, la medida no funcionó de esa manera.
De esto se desprende claramente que la medida filtra por nivel de informe, por lo que la parte de «ingresos totales» de la medida nunca calcula realmente los ingresos totales, sino solo para ese resultado de filtro específico.
Creo que esto se puede corregir usando ALLEXCEPT en la medida, pero no he podido hacerlo funcionar.
Editar: no se puede adjuntar un .pbix a esta publicación, la cuenta probablemente sea demasiado nueva.
parry2k
En respuesta a Moscuba
¿Es esto lo que esperas que sea el resultado?
parry2k
En respuesta a codextero
así que prácticamente lo que publiqué fue el resultado correcto y eso es lo que estás buscando
aquí está mi expresión dax, me gusta romperlas en piezas más pequeñas para facilitar la lectura
Total Value = SUM ( Data[Value] ) Total Revenue = CALCULATE( [Total Value], FILTER ( ALLSELECTED( Chart ), Chart[Level 1] = "Revenue" ) ) % of Revenue = DIVIDE( [Total Value], [Total Revenue], 0 )
Moscuba
Utilice ALLSELECTED.
Aquí está mi fórmula que funciona (SalesSUM es una medida que es la suma de las ventas):
Porcentaje del total = «Order_Line_Invoice»[SalesSUM]/ CALCULATE (sum (‘Order_Line_Invoice’ [Sales]), TODOS SELECCIONADOS ())
Inyectando lo que creo que son tus campos:
Porcentaje del total = «suma (Saldos«[Value]/ CALCULATE (sum (‘Saldos’ [Value]), TODOS SELECCIONADOS ())
Espero que funcione.
codextero
En respuesta a Moscuba
Creo que estoy en el camino correcto, con un filtro agregado a la medida, pude obtener parte de lo que quería.
Percentage_Of_Total_mod1 = sum (‘Saldos'[Value]) / CALCULATE (sum (‘Saldos'[Value]), TODOS SELECCIONADOS (),Catálogo de cuentas[Level 1]= «Ingresos»)
Las subcategorías se dividen correctamente por los ingresos.
Sin embargo, ALLSELECTED elimina los filtros de año y mes, por lo que los datos solo son correctos en el nivel más alto y, si profundiza, los números se dividen por los ingresos totales de todos los meses en lugar de por los ingresos mensuales. Estoy pensando que la implementación correcta implica una forma de que la medida ignore los niveles de informes, pero manteniendo todos los demás filtros (por ejemplo, mes / año).
Moscuba
En respuesta a codextero
El cálculo que publiqué funciona con filtros.
Recomiendo hacer una medida de la suma de ingresos y usarla en lugar de los datos raíz. En eso pondría el filtro de criterios de «Plan de cuentas». Puede que sea por eso que la fórmula no le está funcionando.
Las medidas que pre-suman números de uso común funcionan bien y ahorran trabajo futuro.
codextero
En respuesta a codextero
Lo tengo.
Percentage_Of_Total_mod1 = sum (‘Saldos'[Value]) / CALCULATE (sum (‘Saldos'[Value]), TODOS (Chart_of_accounts[Level 1],Catálogo de cuentas[Level 2]),Catálogo de cuentas[Level 1]= «Ingresos»)
devuelve los resultados correctos.
parry2k
En respuesta a codextero
así que prácticamente lo que publiqué fue el resultado correcto y eso es lo que estás buscando
aquí está mi expresión dax, me gusta romperlas en piezas más pequeñas para facilitar la lectura
Total Value = SUM ( Data[Value] ) Total Revenue = CALCULATE( [Total Value], FILTER ( ALLSELECTED( Chart ), Chart[Level 1] = "Revenue" ) ) % of Revenue = DIVIDE( [Total Value], [Total Revenue], 0 )
parry2k
En respuesta a codextero
@codextero si puede confirmar que la imagen que publiqué es el resultado que espera y que será útil para obtener la solución.
codextero
En respuesta a parry2k
Sí, eso es exactamente lo que estaba buscando. Encontré mi propia solución al problema, pero me interesaría ver la tuya.
parry2k
En respuesta a Moscuba
¿Es esto lo que esperas que sea el resultado?