Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Syndicate_Admin
Administrator
Administrator

DAX: Excluir negativos en totales en jerarquías superiores en matriz, pero mostrarlos en nivel inferior

Hola a todos,

(. Archivo PBIX incluido.)

Tengo una matriz con una medida SUMX dentro de que en un cierto nivel en la jerarquía (es decir: Año-Mes-Planta-Material-Ubicación) todo lo que está por debajo de cero se redondea a 0.

Esta medida muestra los valores correctos cuando la matriz se enrolla, sin embargo, cuando despliego la matriz a su nivel más bajo, veo que todos los registros negativos se redondean a 0. Solo deben redondear hasta 0 en un nivel superior.

A continuación muestro en verde muestro qué medida es la correcta:

  • [Closing Stock] es correcto cuando se despliega la matriz.
  • [Cierre de > 0] es correcto cuando la matriz está enrollada.

Titatovenaar2_0-1641228332003.png

La medida que utilizo actualmente para ignorar los valores negativos en el nivel de Año-Mes-Planta-Material-Ubicación

Closing Stock > 0 = 
SUMX(
    SUMMARIZE('Fact Inventory', 
        'DIM Calendar'[YearMonth]
        ,'Fact Inventory'[Plant]
        ,'Fact Inventory'[Material]
        ,'Fact Inventory'[Location]
    )
    ,IF(
         [Closing Stock] < 0
        ,0
        ,[Closing Stock]
    )
)

La medida que muestra los valores que nos gustaría ver en el nivel de YearMonth-Plant-Material-Location-Batch (el nivel más profundo de la jerarquía)

Closing Stock = 
SUM('Fact Inventory'[Stock])

El conjunto de datos en el que utilizamos estas medidas es la siguiente tabla:

AñoMensoBudat_dtmPlantaMaterialUbicaciónLoteMovement_GroupAcción
2021-012021-01-04AUB111352 NULOR-1150.750
2021-012021-01-31AUB1113521000R000022425C-638.323
2021-012021-01-04AUB1113521000R000022425C-271.887
2021-012021-01-26AUB1113521000R000022425C-66.654
2021-012021-01-19AUB1113521000R000022425R648.900
2021-012021-01-12AUB111352 NULOR-525.550
2021-012021-01-03AUB1113521000R000022425C-896.953
2021-012021-01-12AUB1113521000R000022425R525.550
2021-012021-01-08AUB1113521000R000022425R559.250
2021-012021-01-09AUB1113521000R000022425C-404.594
2021-012021-01-07AUB1113521000R000022425C-232.933
2021-012021-01-18AUB1113521000R000022425C-222.433
2021-012021-01-06AUB1113521000R000022425C-231.428
2021-012021-01-08AUB111352 R000022425S525.550
2021-012021-01-05AUB1113521000R000022425C-269.349
2021-012021-01-20AUB1113521000R000022425C-218.707
2021-012021-01-12AUB111352 R000022425S724.250
2021-012021-01-18AUB111352 NULOR-724.250
2021-012021-01-22AUB1113521000R000022425R1001.100
2021-012021-01-24AUB1113521000R000022425C-724.731
2021-012021-01-21AUB1113521000R000022425C-146.519
2021-012021-01-03AUB1113521000R000022425C60.000
2021-012021-01-08AUB111352 NULOR-559.250
2021-012021-01-18AUB111352 R000022425S1001.100
2021-012021-01-25AUB1113521000R000022425C-249.267
2021-012021-01-13AUB111352 R000022425S648.900
2021-012021-01-22AUB111352 NULOR-1001.100
2021-012021-01-04AUB1113521000R000022425R1150.750
2021-012021-01-04AUB111352 R000022425S559.250
2021-012021-01-19AUB111352 NULOR-648.900
2021-012021-01-19AUB1113521000R000022425C-226.384
2021-012021-01-18AUB1113521000R000022425R724.250
2021-012021-01-01AUB1113521000R000022425OPENINGSTOCK1413.971
2021-012021-01-01AUB111352 R000022425OPENINGSTOCK1150.750
2021-012021-01-01AUB1140019999R000033331R4000
2021-012021-01-01AUB1140019999R000033332S-5000
2021-012021-01-01AUB1170055000R000066000R4000
2021-012021-01-01AUB1170053000R000066000S-5000

Estamos tratando con alrededor de 100 millones de discos, por lo que performance también es algo a tener en cuenta.

¿Hay alguna manera de revelar negativos en el nivel más profundo de una matriz, mientras se redondea hacia arriba en un nivel diferente?

Atentamente

Igor

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

@Titatovenaar2 debe la función ISINSCOPE para averiguar en qué nivel se encuentra y luego envolver su medida alrededor de él.

Closing Stock > 0 = 
IF ( ISINSCOPE ( YourTable[Product] ), //you are at product level
   [Closing Stock],

SUMX(
    SUMMARIZE('Fact Inventory', 
        'DIM Calendar'[YearMonth]
        ,'Fact Inventory'[Plant]
        ,'Fact Inventory'[Material]
        ,'Fact Inventory'[Location]
    )
    ,IF(
         [Closing Stock] < 0
        ,0
        ,[Closing Stock]
    )
)
)

Puede cambiar arriba si la condición que mejor le parezca.

Síguenos en LinkedIn (en inglés) y suscríbete a nuestro YouTube (en inglés) canal

Más información sobre el formato condicional en Microsoft Reactor

Mi última entrada de blog El poder de usar grupos de cálculo con relaciones inactivas (Parte 1) (perytus.com) Yo lo haría Elogios si mi solución ayudó. 👉 Si puede dedicar tiempo a publicar la pregunta, también puede hacer esfuerzos para felicitar a quien ayudó a resolver su problema. ¡Es una muestra de agradecimiento!

Visítenos en https://perytus.com, su ventanilla única para proyectos/formación/consultoría relacionados con Power BI.

View solution in original post

4 REPLIES 4
Syndicate_Admin
Administrator
Administrator

¿@Titatovenaar2

¿Qué tal si lo mantienes simple?

aj1973_0-1641232086583.png

Syndicate_Admin
Administrator
Administrator

@Titatovenaar2 Genial. Me alegro de que haya funcionado, suscríbete a mi canal de YouTube donde publicaré consejos y trucos poco comunes. ¡¡Bien!!

Síguenos en LinkedIn (en inglés) y suscríbete a nuestro YouTube (en inglés) canal

Más información sobre el formato condicional en Microsoft Reactor

Mi última entrada de blog El poder de usar grupos de cálculo con relaciones inactivas (Parte 1) (perytus.com) Yo lo haría Elogios si mi solución ayudó. 👉 Si puede dedicar tiempo a publicar la pregunta, también puede hacer esfuerzos para felicitar a quien ayudó a resolver su problema. ¡Es una muestra de agradecimiento!

Visítenos en https://perytus.com, su ventanilla única para proyectos/formación/consultoría relacionados con Power BI.

Syndicate_Admin
Administrator
Administrator

Funciona a las mil maravillas. Funcionalidad épica que aún no conocía. ¡Gracias por la rápida respuesta también!

Syndicate_Admin
Administrator
Administrator

@Titatovenaar2 debe la función ISINSCOPE para averiguar en qué nivel se encuentra y luego envolver su medida alrededor de él.

Closing Stock > 0 = 
IF ( ISINSCOPE ( YourTable[Product] ), //you are at product level
   [Closing Stock],

SUMX(
    SUMMARIZE('Fact Inventory', 
        'DIM Calendar'[YearMonth]
        ,'Fact Inventory'[Plant]
        ,'Fact Inventory'[Material]
        ,'Fact Inventory'[Location]
    )
    ,IF(
         [Closing Stock] < 0
        ,0
        ,[Closing Stock]
    )
)
)

Puede cambiar arriba si la condición que mejor le parezca.

Síguenos en LinkedIn (en inglés) y suscríbete a nuestro YouTube (en inglés) canal

Más información sobre el formato condicional en Microsoft Reactor

Mi última entrada de blog El poder de usar grupos de cálculo con relaciones inactivas (Parte 1) (perytus.com) Yo lo haría Elogios si mi solución ayudó. 👉 Si puede dedicar tiempo a publicar la pregunta, también puede hacer esfuerzos para felicitar a quien ayudó a resolver su problema. ¡Es una muestra de agradecimiento!

Visítenos en https://perytus.com, su ventanilla única para proyectos/formación/consultoría relacionados con Power BI.

Helpful resources

Announcements
PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.