Jtb790
Hola,
Estoy tratando de crear una consulta parametrizada usando el lenguaje M. Tengo mis variables almacenadas como campos de texto, pero cuando las agrego a la consulta final, no parece recoger la cadena, solo devuelve el nombre de la variable. Entonces, donde podría esperar el resultado de la consulta, obtengo el nombre de la consulta.
Soy bastante nuevo en M, pero si estuviera en VBA, cambiaría la sintaxis de «Texto» a «» & variable & «» para ingresar la variable como una cadena. ¿Cómo consigo lo mismo con M?
Gracias
Jtb790
Hola a todos,
Entonces, después de muchas variaciones, resulta que es lo mismo que VBA sin espacios. Estaba construyendo una consulta paramaeterizada y quería un solo lugar para cambiar el valor y actualiza las 6 consultas que tengo.
El valor de Fecha apareció así «201801», así que creé una variable y luego logré insertarla usando «» & Fecha & «»
Todo funcionando, gracias por tu ayuda. 🙂
Anónimo
Hola @ Jtb790 Gracias por tu esfuerzo para ayudarme a resolver este problema por mí. Me complace decirles que finalmente encontré la solución exacta para pasar el parámetro a la declaración de selección en SAP HANA.
Aquí está el código simple de una línea que funcionó para mí. 🙂
let Source=SapHana.Database(CName, [Query="SELECT * FROM "&SName&".""FN_PowerBI_SampleFunctionName""();"]) in Source
Gracias, Kulchandra Neupane
Jtb790
Hola a todos,
Entonces, después de muchas variaciones, resulta que es lo mismo que VBA sin espacios. Estaba construyendo una consulta paramaeterizada y quería un solo lugar para cambiar el valor y actualiza las 6 consultas que tengo.
El valor de Fecha apareció así «201801», así que creé una variable y luego logré insertarla usando «» & Fecha & «»
Todo funcionando, gracias por tu ayuda. 🙂
tmarton
En respuesta a Jtb790
Esto funcionó para mí, pero tuve que ingresar como «» & request)), ese era el nombre de mi parámetro
Anónimo
En respuesta a Jtb790
Hola @ Jtb790 @ImkeF @ v-jiascu-msft
Me gustaría pasar un parámetro a mis consultas. Entonces, cuando cambio el parámetro, cambio todas mis consultas. ¿Me puedes ayudar con esto?
Lo que tengo son múltiples consultas como esta:
SELECCIONAR DE «Schema1«.» Función1 «();
SELECCIONAR DE «Schema1«.» Función2 «();
SELECCIONAR DE «Schema1«.» Función3 «();
lo que quiero es todo cambio de consulta como este:
SELECCIONAR DE «Schema2«.» Función1 «();
SELECCIONAR DE «Schema2«.» Función2 «();
SELECCIONAR DE «Schema2«.» Función3 «();
Gracias por adelantado
Jtb790
En respuesta a Anónimo
Hola Kulchandra,
let SchemaVersion = ParameterName, YourQuery = "SELECT * FROM '"&SchemaVersion&"'.'Function2'();", QueryName = AnalysisServices.Database("Server", "Database", [Query=YourQuery, Implementation="2.0"]) in #"QueryName"
Haría algo como el anterior. Primero debe crear una variable para mantener su consulta, ya que no podrá agregar el parámetro dentro de la llamada AnalysisServices, denominada «YourQuery» en el ejemplo anterior. Necesitará crear un parámetro para alimentar, arriba lo he llamado «ParameterName».
Supongo que necesitará cambiar su «a» en su consulta original, aunque tendrá que probar eso ya que no tengo un entorno de prueba. Y, por supuesto, reemplace los campos Servidor y Base de datos con sus datos.
Ojalá eso ayude.
Anónimo
En respuesta a Jtb790
Hola @ Jtb790 Gracias por tu respuesta. Probé tu código. Que está regresando como Lista (ver captura de pantalla)
pero no los datos de la tabla.
y obtuve la salida como una línea como el texto de abajo en color azul
SELECCIONAR * DE ‘TheValueinParameter’. ‘Función2’ ();
Intenté el siguiente código:
let SchemaVersion = SName, YourQuery = "SELECT * FROM '"&SName&"'.'Function2'();", QueryName = AnalysisServices.Database(CName, SName, [Query=YourQuery]) in YourQuery //Cname: is the parameter for ServerName i have created //Sname: is the Schema Name that is used in select statement.
Mediante el código anterior atleas, puedo obtener el valor dentro del parámetro Sname. Eso genera la esperanza de que esto sea posible de alguna manera. ¿Podrías investigar esto? Gracias
Jtb790
En respuesta a Anónimo
let SchemaVersion = SName, YourQuery = "SELECT * FROM '"&SName&"'.'Function2'();", QueryName = AnalysisServices.Database(CName, SName, [Query=YourQuery]) in YourQuery << Should be QueryName //Cname: is the parameter for ServerName i have created //Sname: is the Schema Name that is used in select statement.
Entonces, en su código anterior, tiene YourQuery como IN, debería ser el último paso, QueryName
Anónimo
En respuesta a Jtb790
@ Jtb790 ¡Ya casi llegamos !. El código funciona perfectamente, solo hay que arreglar una cosa, que no puedo entender. Vea la captura de pantalla a continuación. Lo he marcado todo. Este código también agrega el nombre del servidor con SName. Traté de eliminar la variable SName de
QueryName = AnalysisServices.Database(CName, SName, [Query=YourQuery])
Pero conduce al error. ¿Podría mirar la siguiente imagen?
Gracias, Kulchandra
ImkeF
En respuesta a Anónimo
La imagen que ha publicado no es un mensaje de error, sino una advertencia. Si hace clic en «Ejecutar», debería obtener el resultado deseado o un mensaje de error. Publique ese mensaje de error si necesita más ayuda al respecto.
Anónimo
En respuesta a ImkeF
@ImkeF @ Jtb790 Sí, eso no es un error. Pero si ves el parte resaltada en azul a mi imagen. Esto es además del nombre del servidor. eso significa que el código está cambiando el nombre de mi servidor al valor del parámetro (Cname; Sname), incluido el punto y coma también.
- Sname es SchemaName (parámetro 1)
- Cname es ServerName (parámetro 2)
Lo que hace que el nombre del servidor sea incorrecto y conduzca a un mensaje de error. Por favor, vea la captura de pantalla a continuación. Lo he marcado todo para que te quede más claro. Gracias por tu ayuda.
Jtb790
En respuesta a Anónimo
Hola Kulchandra,
En su mensaje, llama a la variable Sname su esquema, creo que esta debería ser la base de datos dentro de su servidor. Quizás perdido en la traducción, pero eso me llama la atención.
Si esto es correcto, su consulta original indica la base de datos en la instrucción Seleccionar, por lo tanto, da la base de datos dos veces.
Mi consejo sería que primero, ejecute una consulta simple en su base de datos usando el Servidor no parametrizado: detalles de Puerto y Base de Datos, luego examine el código que produce, usando la ventana del Editor Avanzado. Para mi caso, necesito especificar la implementación, si ves mi código original. Lo obtuve al usar el editor después de usar la técnica anterior.
Espero que ayude.
Anónimo
En respuesta a Jtb790
Hola @ Jtb790 @ImkeF Según su sugerencia, hice mi consulta sin parámetro. Y se ve así (por favor vea la captura de pantalla) en las ventanas del Editor avanzado y funciona perfectamente bien sin parámetros.
Lo que estoy tratando de hacer es incrustar el Parameter2 (Sname) en para seleccionar declaración. Puedo incrustar el nombre del servidor Parámetro1 (CName) ya.
Espero que encuentres algo en esta imagen que te ayude a resolver el problema al que me enfrento. Estoy muy agradecido de que estén haciendo un seguimiento de esto.
Jtb790
En respuesta a ImkeF
Gracias @ImkeF, ¡un honor que publiques en el mismo hilo! Gracias por todo el esfuerzo que dedicas.
ImkeF
Asegúrese de no utilizar signos de escape («) al hacer referencia a sus variables.
Si tienen espacios en blanco o caracteres especiales, debes escribirlo así:
# «Mi variable»
El # se escapa de las fugas 😉
Entonces puede hacer referencia a su variable para:
MyVariable o # «MyVariable», pero NO: «MyVariable»
v-jiascu-msft
Hola @ Jtb790,
¿Puedes compartir el código que has probado? Podemos usarlo simplemente con su nombre como a continuación.
Atentamente,
Valle