Forum Discussion
Conversión de SQL a M
Hola
Estoy intentando recrear una consulta SQL que tengo en formato M para poder convertirla en una función dentro de PowerBI, pero estoy teniendo un pequeño problema.
WITH RPL (PART, SUBPART, QUANTITY) AS
(
SELECT ROOT.[Parent Part No], ROOT.[Component Part No], ROOT.[Qty Required Per Parent]
FROM vAssemblies ROOT
WHERE ROOT.[Parent Part No] = '52630103'
UNION ALL
SELECT CHILD.[Parent Part No], CHILD.[Component Part No], CHILD.[Qty Required Per Parent]
FROM RPL PARENT, vAssemblies CHILD
WHERE PARENT.SUBPART = CHILD.[Parent Part No]
)
SELECT DISTINCT PART, SUBPART, QUANTITY
FROM RPL
ORDER BY PART, SUBPART, QUANTITY;¿Cómo expresaría lo anterior en M?
Saludos
Lee Barratt
mi forma de hacer esto (probablemente otras) es
1. coloque el SQL como de costumbre,
2. editar consulta,
3. haga clic derecho en la tabla en el panel izquierdo en el editor de consultas,
4. seleccione el editor avanzado. a continuación, verá la versión m de su SQL.
5 Replies
- Syndicate_Admin
Administrator
mi forma de hacer esto (probablemente otras) es
1. coloque el SQL como de costumbre,
2. editar consulta,
3. haga clic derecho en la tabla en el panel izquierdo en el editor de consultas,
4. seleccione el editor avanzado. a continuación, verá la versión m de su SQL.
- Syndicate_Admin
Administrator
samdthompson,
Gracias por la respuesta.
El problema con su sugerencia es que el código SQL simplemente se incrusta dentro de una instrucción M y no se convierte:
let Source = Sql.Database("red-apps01\fmast", "FMAST10", [Query="WITH RPL (PART, SUBPART, QUANTITY) AS#(lf)(#(lf)SELECT ROOT.[Parent Part No], ROOT.[Component Part No], ROOT.[Qty Required Per Parent]#(lf) FROM vAssemblies ROOT#(lf) WHERE ROOT.[Parent Part No] = '536304'#(lf)UNION ALL#(lf) SELECT CHILD.[Parent Part No], CHILD.[Component Part No], CHILD.[Qty Required Per Parent]#(lf) FROM RPL PARENT, vAssemblies CHILD#(lf) WHERE PARENT.SUBPART = CHILD.[Parent Part No]#(lf))#(lf)SELECT DISTINCT PART, SUBPART, QUANTITY#(lf) FROM RPL#(lf) ORDER BY PART, SUBPART, QUANTITY;"]) in Source
- Syndicate_Admin
Administrator
La consulta en su publicación es una consulta recursiva, la sintaxis es simple y de fácil lectura. Convertirlo a código "M" solo hace que las cosas sean más complicadas. ¿Puedo saber por qué tienes que hacer esto? Debido a la limitación de mi conocimiento sobre "M", hasta ahora no tengo idea de cómo convertirlo. Pero si tiene que hacer eso, creo que este video Power Query Funciones definidas por el usuario y funciones recursivas le daría un comienzo.
¿Puede ser más específico en su escenario, ya que tengo más experiencia en SQL, tal vez podamos lograr su requisito solo con SQL?
- Syndicate_Admin
Administrator
Creo que este post responde perfectamente a tu pregunta: https://blog.crossjoin.co.uk/2017/06/11/query-folding-and-writing-your-own-sql-queries-in-power-querypower-biexcel-get-transform/- Syndicate_Admin
Administrator
Si sus datos de origen se encuentran en el servidor SQL, la solución más rápida será usar el código SQL tal como es @Artefx ha descrito.
Pero si no lo hace, puede consultar mi solución M aquí: https://www.thebiccountant.com/2017/05/08/dynamic-bill-of-material-bom-solution-in-excel-and-powerbi/