Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.
Hola, por favor necesito ayuda en la siguiente situación:
Tengo 3 tablas:
SalesOrderTable
OrdenNum | Producto | Cantidad |
ON-01 | P1 | 10 |
ON-01 | P2 | 20 |
ON-01 | P3 | 30 |
ON-02 | P1 | 20 |
ON-02 | P2 | 15 |
Tabla de productos
Producto | Categoría |
P1 | Producto terminado |
P2 | Producto terminado |
P3 | Producto terminado |
RM1 | Materia prima |
RM2 | Materia prima |
RM3 | Materia prima |
BillsOfMaterialTable
Producto terminado | Materia prima | Porcentaje% |
P1 | RM1 | 0,33 |
P1 | RM2 | 0,33 |
P1 | P2 | 0,33 |
P2 | RM2 | 0,5 |
P2 | RM3 | 0,5 |
Necesito explotar la fórmula BOM con productos SalesOrderTable para medir las cantidades de producto terminado y materia prima, pero si miramos más allá, dentro de P1 tenemos otro producto terminado llamado P2, que necesita explosión para obtener cantidades de RM también, creando otra iteración, y así sucesivamente....
No es tan difícil cuando solo tenemos una iteración, pero a medida que avanzamos con más de una, se complica y consume memoria ...
Entonces, ¿cuál sería la mejor manera de calcular todas las iteraciones sin crear tantas condiciones y columnas para tener todas las cantidades de productos terminados y materias primas?
Si desea utilizar una función recursiva de Power Query M, tengo una función de lista de materiales aquí con explosiones ilimitadas.
https://github.com/edouardbrasier/Recursion-example-bill-of-materials
Estos son los pasos que puede seguir:
1. Crear medida.
Finished Products quantities =
var _select=SELECTEDVALUE('SalesOrderTable'[Product])
var _sumquantity=SUMX(FILTER(ALL(SalesOrderTable),'SalesOrderTable'[Product]=_select),[Quantity])
var _p1=MAXX(FILTER(ALL('Product Category'),'Product Category'[Product]=_select),[Category])
var _column=SELECTCOLUMNS(FILTER(ALL('Product Category'),'Product Category'[Category]=_p1),"1",[Product])
return
IF(
MAX('BillsOfMaterialTable'[FinishedProduct]) in _column&&MAX('BillsOfMaterialTable'[FinishedProduct])=_select,_sumquantity *MAX('BillsOfMaterialTable'[Percentage%]),0)
Raw Materials =
var _select=SELECTEDVALUE('SalesOrderTable'[Product])
var _sumquantity=SUMX(FILTER(ALL(SalesOrderTable),'SalesOrderTable'[Product]=_select),[Quantity])
var _p1=MAXX(FILTER(ALL('Product Category'),'Product Category'[Product]=_select),[Category])
var _column=SELECTCOLUMNS(FILTER(ALL('Product Category'),'Product Category'[Category]=_p1),"1",[Product])
return
IF(
NOT(MAX('BillsOfMaterialTable'[RawMaterial]))in _column&&MAX('BillsOfMaterialTable'[FinishedProduct])=_select,_sumquantity *MAX('BillsOfMaterialTable'[Percentage%]),0)
2. Resultado:
Si los resultados no cumplen con sus expectativas, puede mostrar los resultados esperados en forma de imágenes, cómo obtener cantidades de productos terminados y materias primas, podemos ayudarlo mejor
Saludos
Liu Yang
Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.