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

Grow your Fabric skills and prepare for the DP-600 certification exam by completing the latest Microsoft Fabric challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Filtrar una tabla para obtener productos con poco inventario

Tengo tres tablas:

1. Maestro de artículos. Tengo los códigos de los artículos y el stock de seguridad, p. ej.

ArtículoStock de seguridad
A100
B200
C125

2. Inventario a nivel de almacén

AlmacénProductoInventario
W1A75
W1B50
W1C100
W2A20
W2B100
W2C50
W3A10
W3B10

3. Última tabla que podría anular el stock de seguridad en la tabla Maestro de artículos.

ArtículoAlmacénStock de seguridad
AW350
CW3300
BW1100

Si no filtro el almacén el resultado sería
Un producto es bueno cuando el inventario es superior a 100 (105)
B El producto es bajo porque el inventario es de 150 en comparación con 200
C El producto es bueno 150 vs 125

Si filtro por W3
A es baja porque 10 < 50
B no se muestra porque no hay stock de seguridad para W3
C es bajo porque hay 0 y necesitamos 300

Espero que todos los datos y la explicación hayan sido buenos y puedan ayudarme.

¡¡Gracias!!

4 REPLIES 4
Syndicate_Admin
Administrator
Administrator

Hola, @मार्टाइप1

Gracias por la respuesta de @Wilson_ , permítanme proporcionar otra idea:

En primer lugar, tengo un par de preguntas, tengo una discrepancia en mi comprensión de estos valores a continuación, por favor dame algunos consejos sobre estos valores. (Ahora me baso en los datos que me proporcionaste la primera vez).

En primer lugar, en el primer gráfico entiendo que los valores del grupo B se suman, por lo que en ese caso debería tener un valor de 160, pero lo que has proporcionado es 150.

vlinyulumsft_0-1713435249410.png

El valor seguro de C en el segundo gráfico debe ser 300 para satisfacer la primera solicitud, pero proporcionó un valor de 100:

vlinyulumsft_1-1713435278801.png

¿Puedo preguntar si hay algo malo en mi comprensión? Si es así, espero que puedas darme algún consejo.

Con respecto a la cuestión que planteaste, mi solución es la siguiente:

1.En función de los requisitos de la tabla que proporcionó, he creado las siguientes tres tablas, el nombre de la tabla "Item Master" y el nombre de la tabla "WAREHOUSE" como tablas estándar y el nombre de la tabla "Iventory at Warehouse Level" para los valores reales que proporcionó, las vistas de la tabla son las siguientes:

vlinyulumsft_2-1713435300797.png

vlinyulumsft_3-1713435300797.png

vlinyulumsft_0-1713436651180.png

2.En base a su solicitud, creé cuatro medidas y mi función DAX es la siguiente:

True1 = 
var _sum1=
SUMX(
    FILTER(ALL('Iventory at Warehouse Level'),
    'Iventory at Warehouse Level'[Product]=MAX('Iventory at Warehouse Level'[Product])),[Inventory])
var _sum2=
SUMX(
    FILTER(ALL('Item Master'),
    'Item Master'[items]=MAX('Iventory at Warehouse Level'[Product])),[safety stock])
var _select=SELECTEDVALUE('WAREHOUSE'[Warehouse])
var _column=SELECTCOLUMNS(FILTER(ALL('WAREHOUSE'),'WAREHOUSE'[Warehouse]=_select),"test",[items])
var _if=
IF(
    MAX('Iventory at Warehouse Level'[Product]) in _column,
    SUMX(
        FILTER(ALL('Iventory at Warehouse Level'),'Iventory at Warehouse Level'[Product]=MAX('Iventory at Warehouse Level'[Product])&&
        'Iventory at Warehouse Level'[Warehouse]=_select),[Inventory]),BLANK())
var _if2=
    IF(
        _if=BLANK()&&MAX('Iventory at Warehouse Level'[Product]) in _column,0,_if)
return
IF(
    NOT(ISFILTERED('WAREHOUSE'[Warehouse])),
    _sum1-_sum2,
_if2
    )
True2 = 
var _sum1=
SUMX(
    FILTER(ALL('Iventory at Warehouse Level'),
    'Iventory at Warehouse Level'[Product]=MAX('Iventory at Warehouse Level'[Product])),[Inventory])
var _sum2=
SUMX(
    FILTER(ALL('Item Master'),
    'Item Master'[items]=MAX('Iventory at Warehouse Level'[Product])),[safety stock])
var _select=SELECTEDVALUE('WAREHOUSE'[Warehouse])
var _column=SELECTCOLUMNS(FILTER(ALL('WAREHOUSE'),'WAREHOUSE'[Warehouse]=_select),"test",[items])
var _value=
SUMX(FILTER(ALL('WAREHOUSE'),
'WAREHOUSE'[items]=MAX('Iventory at Warehouse Level'[Product])&&'WAREHOUSE'[Warehouse]=_select),[Safety Stock])
return
IF(
    NOT(ISFILTERED('WAREHOUSE'[Warehouse])),
    _sum1-_sum2,
_value
    )
Missing Inventory123 = 
[True1]-[True2]

El objetivo principal de la marca de medida es mostrar una diferencia negativa incluso si no hay ninguna selección.

Flag = 
IF(
    NOT(ISFILTERED('WAREHOUSE'[Warehouse]))&&[True1]<0,1,
    IF(
        ISFILTERED('WAREHOUSE'[Warehouse])&&[Missing Inventory123]<0,1,0))

Aquí puede agregar su falg como medida al cuadro de opción Filtro.

vlinyulumsft_0-1713436860552.png

3. Aquí está mi resultado final, que espero cumpla con sus requisitos.

vlinyulumsft_1-1713436877132.png

vlinyulumsft_2-1713436891318.png

vlinyulumsft_4-1713436929952.png

Saludos

Leroy Lu

Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Gracias por tu detallada respuesta, Leroy.

Probablemente debería haber comenzado con la relación de la tabla y la lógica de mis filtros.

T1 = Maestro de elementos
T2 = Inventario a nivel de almacén
T3 = Excepción por almacén-producto

La relación T1-T2 es de uno a varios por código de artículo
La relación T3-T2 es de uno a muchos por itemcode-warehouse

Mi lógica es primero mirar si hay una restricción en T3 y usar ese valor para el stock de seguridad, si no hay restricción (valor nulo) usar el stock de seguridad de T1.

Si mi comprensión es correcta, cuando uso AMBOS para la dirección del filtro cruzado es como tener una tabla que combina los dos, por lo tanto, si obtengo una clave de almacén de artículos en T2, debería obtener una especie de valor nulo para el stock de seguridad en T3 y luego debería buscar el valor del stock de seguridad en T1.

Espero que mi lógica tenga sentido para ti.

Ahora volvamos a sus preguntas.

martipe1_0-1713447459354.png

Tienes razón, mi mala

"El valor seguro de C en el segundo gráfico debe ser 300 para satisfacer la primera solicitud, pero proporcionó un valor de 100:"

Hay una excepción a nivel de almacén.

martipe1_1-1713447652837.png

Tengo que usar la excepción para esa clave de almacén de código de artículo, y tienes razón de nuevo, debería mostrar 300 en lugar de 100.

Con respecto a sus medidas, para True2, tengo problemas para reemplazar Safety Stock (supongo que pertenece a mi T1) ya que no consigo que mis tablas elijan el campo

'Item Master'[items]=MAX('Iventory at Warehouse Level'[Product])),[safety stock])

Lo mismo para, supongo que Safety Stock proviene de mi T3

'WAREHOUSE'[items]=MAX('Iventory at Warehouse Level'[Product])&&'WAREHOUSE'[Warehouse]=_select),[Safety Stock])

Gracias de antemano por su respuesta


Syndicate_Admin
Administrator
Administrator

El resultado

Sin filtro

ArtículoInventarioStock de seguridadInventario faltante
B150200-50

Filtrar por W3

ArtículoAlmacénInventarioStock de seguridadInventario faltante
AW31050-40
CW30100-100

¡¡Gracias!!

Syndicate_Admin
Administrator
Administrator

Hola martipe1,

Gracias por proporcionar los datos en un formato fácil de copiar y pegar y una explicación de su lógica. Sin embargo, ¿qué resultados espera ver realmente?

Helpful resources

Announcements
Europe Fabric Conference

Europe’s largest Microsoft Fabric Community Conference

Join the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.

RTI Forums Carousel3

New forum boards available in Real-Time Intelligence.

Ask questions in Eventhouse and KQL, Eventstream, and Reflex.

MayPowerBICarousel1

Power BI Monthly Update - May 2024

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

Top Solution Authors