The ultimate Fabric, Power BI, SQL, and AI community-led learning event. Save €200 with code FABCOMM.
Get registeredEnhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.
Hola a todos
Tengo los datos 'Tabla'
El aspecto visual de la matriz básica es el siguiente (la fila va con 2 categorías de nivel: Version_date -> Producto)
Por favor, ayude a crear una medida agregando filas para la diferencia entre las 2 últimas Version_date. La diferencia será para 2 niveles de fila: Version_date, Producto. Mi expectativa sería:
Gracias a todos.
Probé un poco de var y medida de retorno, pero puede dar diferencia solo para Version_date nivel.
Diff =
var _max=CALCULATE(MAX('Table'[Version_date]),ALLSELECTED('Table'))
var _min=CALCULATE(MAX('Table'[Version_date]),FILTER(ALLSELECTED('Table'),[Version_date]<_max))
return
IF(ISINSCOPE('Table'[Version_date]),
sum('Table'[Amount]),
CALCULATE(sum('Table'[Amount]),FILTER('Table','Table'[Version_date]=_max))-CALCULATE(sum('Table'[Amount]),FILTER('Table','Table'[Version_date]=_min)))
Haga un seguimiento para ver si su consulta se resuelve y si alguna de las respuestas ayudó.
Si necesita más ayuda, no dude en ponerse en contacto con nosotros.
Gracias.
Hola @navafolk ,
Queríamos tener la amabilidad de hacer un seguimiento de su consulta. Si aún no se ha resuelto y necesita más ayuda, comuníquese con nosotros.
Gracias.
Gracias por publicar en la comunidad de mIcrosoft Fabric y compartir el requisito detallado.
Para obtener la matriz exactamente como la describió, incluida la fila debajo de la versión y el desglose del producto, utilicé una tabla calculada.
La tabla calculada (DeltaTable) compara los dos valores de Version_date más recientes y crea filas que representan la diferencia en el importe de cada producto y mes. Luego combiné esto con la mesa original.
Este es el DAX de la tabla calculada (DeltaTable):
DeltaTable =
VAR AllVersions = VALUES(Data[Version_date])
VAR MaxVersion = CALCULATE(MAX(Data[Version_date]), ALL(Data))
VAR PrevVersion = CALCULATE(
MAX(Data[Version_date]),
FILTER(ALL(Data[Version_date]), Data[Version_date] < MaxVersion)
)
VAR V1 = FILTER(Data, Data[Version_date] = PrevVersion)
VAR V2 = FILTER(Data, Data[Version_date] = MaxVersion)
RETURN
SELECTCOLUMNS(
ADDCOLUMNS(
GENERATE(
SUMMARIZE(V2, Data[Product], Data[Date]),
VAR p = [Product]
VAR d = [Date]
VAR amtV1 = CALCULATE(SUM(Data[Amount]), V1, Data[Product] = p, Data[Date] = d)
VAR amtV2 = CALCULATE(SUM(Data[Amount]), V2, Data[Product] = p, Data[Date] = d)
RETURN ROW("Product1", p, "Date1", d, "DeltaAmount", amtV2 - amtV1)
),
"Month", FORMAT([Date], "MMMM")
),
"Version", "Total",
"Product", [Product],
"Month", [Month],
"Amount", [DeltaAmount]
)
A continuación, combínalo con la tabla original utilizando:
CombinedTable =
UNION (
SELECTCOLUMNS(
Data,
"Version", FORMAT([Version_date], "dd-MM-yyyy"),
"Product", [Product],
"Month", FORMAT([Date], "MMMM"),
"Amount", [Amount]
),
DeltaTable
)
Se usó este objeto CombinedTable en el objeto visual de la matriz colocando:
Versión y producto en filas
Mes en columnas
TotalAmount1 en valores
Esta configuración dio la estructura exacta que mostró en su ejemplo. Las filas se actualizan automáticamente en función de las dos últimas fechas de versión de los datos.
Espero que esto ayude. Póngase en contacto con nosotros para obtener más ayuda.
Considere marcar la respuesta útil como Solución aceptada para ayudar a otros con problemas similares.
Por favor, encuentre el archivo .pbix adjunto como referencia.
Además, gracias a @Elena_Kalina por su respuesta y acercamiento.
Hola @navafolk ,
Solo quería comprobar si las respuestas proporcionadas fueron útiles. En caso afirmativo, considere marcar la respuesta útil como "Solución aceptada" para ayudar a otros con consultas similares. Si necesita más ayuda, comuníquese con nosotros.
Gracias.
En función de sus requisitos, necesita una medida que calcule las diferencias entre las dos fechas de la versión más reciente tanto en el nivel de Version_date como en el nivel de producto. Pruebe esta solución:
Amount Diff = VAR CurrentVersion = SELECTEDVALUE('Table'[Version_date]) VAR CurrentProduct = SELECTEDVALUE('Table'[Product]) // Get the two most recent version dates in context VAR AllVersions = CALCULATETABLE(VALUES('Table'[Version_date]), ALLSELECTED('Table')) VAR MaxVersion = MAXX(AllVersions, [Version_date]) VAR PreviousVersion = MAXX(FILTER(AllVersions, [Version_date] < MaxVersion), [Version_date]) // Calculate amounts for current context VAR CurrentAmount = SUM('Table'[Amount]) // Calculate amounts for max and previous versions VAR MaxVersionAmount = CALCULATE( SUM('Table'[Amount]), FILTER( ALLSELECTED('Table'), 'Table'[Version_date] = MaxVersion && (ISBLANK(CurrentProduct) || 'Table'[Product] = CurrentProduct) ) VAR PreviousVersionAmount = CALCULATE( SUM('Table'[Amount]), FILTER( ALLSELECTED('Table'), 'Table'[Version_date] = PreviousVersion && (ISBLANK(CurrentProduct) || 'Table'[Product] = CurrentProduct) ) // Determine what to return based on context RETURN IF( ISINSCOPE('Table'[Version_date]), // If at Version_date level, show regular amount or difference IF( COUNTROWS(AllVersions) >= 2 && CurrentVersion = MaxVersion, CurrentAmount - PreviousVersionAmount, CurrentAmount ), // If at Product level or total, show difference IF( COUNTROWS(AllVersions) >= 2, MaxVersionAmount - PreviousVersionAmount, BLANK() ) )
He estado probando diferentes formas de hacer que esta matriz se vea exactamente como quieres, pero me estoy encontrando con un obstáculo. No importa lo que intente, la "Diferencia Total" sigue apareciendo varias veces en los subtotales, lo que deja extraños espacios vacíos y hace que todo se vea desordenado.
Lo más cerca que he llegado es hacer una matriz separada con solo esas tres filas clave que necesita (como en su captura de pantalla de ejemplo). No es perfecto, pero como solución rápida, tal vez podríamos pegar esta versión simplificada junto a su mesa original.
Total Amount = SUM('Table'[Amount])
Product Difference =
VAR CurrentProduct = SELECTEDVALUE('Table'[Product]) VAR Sum07Jun = CALCULATE( [Total Amount], 'Table'[Version_date] = DATE(2025,6,7), 'Table'[Product] = CurrentProduct ) VAR Sum01Jun = CALCULATE( [Total Amount], 'Table'[Version_date] = DATE(2025,6,1), 'Table'[Product] = CurrentProduct ) // For the "Total" row VAR TotalSum07Jun = CALCULATE( [Total Amount], 'Table'[Version_date] = DATE(2025,6,7) ) VAR TotalSum01Jun = CALCULATE( [Total Amount], 'Table'[Version_date] = DATE(2025,6,1) ) RETURN IF( ISINSCOPE('Table'[Product]), // Difference for products A/B Sum07Jun - Sum01Jun, // Difference for the "Total" row TotalSum07Jun - TotalSum01Jun )
Quizás te sea útil a las fórmulas que utilicé para esto
Lo siento, es mi culpa. Voy a revisar mi solución.