Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
4 years ago
Solved

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

  • 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's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      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
  • @Artefx

    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?