AW1976NOVA
Hola,
Tengo una base de datos SQL que estoy usando como fuente de datos. La base de datos es grande y me gustaría incluir dos parámetros separados dentro de Power BI en un esfuerzo por consultar el tamaño de la base de datos. Necesito estos parámetros porque la base de datos SQL está obteniendo registros para muchas líneas de negocios diferentes. Los parámetros que creo en Power BI me permitirán especificar qué líneas de negocio estoy incluyendo en Power BI. Esto me permitirá reutilizar lo que creo en Power BI una y otra vez para diferentes líneas de negocio.
Ya vinculé correctamente la base de datos SQL a Power BI y tengo datos.
Ya he creado dos parámetros separados en Power BI, 1) Underwriter # y 2) Group #:
Estoy luchando por incorporar estos dos parámetros con el script/sintaxis ‘Obtener datos’ existente generado por Power BI:
No sé dónde debo incluir mis dos cláusulas Where… donde puedo especificar los criterios específicos 1) Underwriter # (SQL) y 2) Group # (SQL). Ambos campos en SQL están configurados en texto e hice que ambos parámetros estén configurados para reconocer texto también.
Creo que la modificación/edición de sintaxis debería incluir algo como esto: WHERE PUNBR = ‘»&Underwriter #(SQL)&'» AND GRNBR = ‘»&Group #(SQL)&»‘
… pero no estoy muy seguro. Nunca he intentado hacer esto antes.
En caso de que ayude:
1) PUNBR es el campo en la base de datos SQL al que me he referido como Underwriter #(SQL)
2) GRNBR es el campo en la base de datos SQL al que me he referido como Grupo # (SQL)
¡Gracias por la ayuda!
smpa01
@AW1976NOVA
supongamos que tu
servidor = x
base de datos = y
nombre de la tabla = z
la consulta sql de muestra es (como la pondrías en SSMS)
Seleccione *
de z
DONDE [period_number]=2
Y [fiscal_year]=2020
cuando pones esto en una M
se convierte en esto
let
Source = Sql.Database("x", "y", [Query="select *#(lf)from zs#(lf)WHERE [period_number]=2#(lf)AND [fiscal_year]=2020"])
in
Source
Ahora, si desea pasar dos parámetros a las cláusulas where como P1 y P2, (P1=2020, P2=2), asegúrese de que sean texto primero.
puede crear una consulta personalizada como se muestra a continuación
(x as text, y as text)=>let
Source = Sql.Database("x", "y", [Query="select *#(lf)from z#(lf)WHERE [period_number]="&P2&"#(lf)AND [fiscal_year]="&P1&""])
in
Source
AW1976NOVA
Resuelto el problema:
Correcto M:
dejar
Fuente = Sql. Base de datos («D01PSQLENTA01», «ECI»,
[Query=»SELECT * #(lf)FROM [NovaDailyEligibilityExtract] #(lf)WHERE PUNBR = ‘»&UnderwriterSQL&»‘#(lf)AND GRNBR = ‘»&GroupSQL&»‘»])
en fuente
smpa01
En respuesta a AW1976NOVA
estupendo …GRNBR probablemente tenga varchar como el tipo de datos de columna en la base de datos nativa.
normalmente consultaría en la base de datos nativa como
AND GBNBR]='06N'
Me alegro de que hayas logrado adaptarlo a tu solución.
smpa01
@AW1976NOVA
supongamos que tu
servidor = x
base de datos = y
nombre de la tabla = z
la consulta sql de muestra es (como la pondrías en SSMS)
Seleccione *
de z
DONDE [period_number]=2
Y [fiscal_year]=2020
cuando pones esto en una M
se convierte en esto
let
Source = Sql.Database("x", "y", [Query="select *#(lf)from zs#(lf)WHERE [period_number]=2#(lf)AND [fiscal_year]=2020"])
in
Source
Ahora, si desea pasar dos parámetros a las cláusulas where como P1 y P2, (P1=2020, P2=2), asegúrese de que sean texto primero.
puede crear una consulta personalizada como se muestra a continuación
(x as text, y as text)=>let
Source = Sql.Database("x", "y", [Query="select *#(lf)from z#(lf)WHERE [period_number]="&P2&"#(lf)AND [fiscal_year]="&P1&""])
in
Source
AW1976NOVA
En respuesta a smpa01
Gracias por la ayuda.
Intenté implementar lo que sugirió y actualicé mi M en consecuencia, pero falló. Aquí está mi M actual que está fallando:
(D01PSQLENTA01 como texto, ECI como texto)=>let
Fuente = Sql. Base de datos («D01PSQLENTA01», «ECI»,
[Query=»select *#(lf)from NovaDailyEligibilityExtract#(lf)WHERE [PUNBR]=»&Asegurador #(SQL)&»#(lf)Y [GRNBR]=»&Grupo #(SQL)&»»]
en
dbo_NovaDailyEligibilityExtracto
Error:
Mis dos parámetros creados se establecen como texto:
Estoy seguro de que mi M es incorrecta aquí.
AW1976NOVA
En respuesta a AW1976NOVA
Noté que tenía varios problemas con el código M. Hice esos pequeños cambios pero todavía tengo un error.
M actual:
(D01PSQLENTA01 como texto, ECI como texto)=>let
Fuente = Sql. Base de datos («D01PSQLENTA01», «ECI»,
[Query=»select *#(lf)from dbo_NovaDailyEligibilityExtract#(lf)WHERE [PUNBR]=»&UnderwriterSQL&»#(lf)Y [GRNBR]=»&GroupSQL&»»])
en
dbo_NovaDailyEligibilityExtracto
También actualicé los nombres de mis parámetros a suscriptorSQL y GrupoSQL.
smpa01
En respuesta a AW1976NOVA
Cambiar última línea — en Fuente
AW1976NOVA
En respuesta a smpa01
Muy bien. Progresando aquí y gracias por guiarme a través de esto.
Entonces, con la última edición que mencionaste, se ejecutó pero hice un cambio. Cambié la línea =>let de:
(D01PSQLENTA01 como texto, ECI como texto)=>let
a
(UnderwriterSQL como texto, GroupSQL como texto)=>let
Creo que esto es correcto? Previamente estábamos enumerando el servidor y la base de datos como texto. Ahora enumeramos ambos parámetros como texto.
Con eso fuera del camino (creo), mi nueva M es la siguiente:
(UnderwriterSQL como texto, GroupSQL como texto)=>let
Fuente = Sql. Base de datos («D01PSQLENTA01», «ECI»,
[Query=»select *#(lf)from dbo_NovaDailyEligibilityExtract#(lf)WHERE [PUNBR]=»&UnderwriterSQL&»#(lf)Y [GRNBR]=»&GroupSQL&»»])
en fuente
Ahora tengo esto como interfaz:
Sin embargo, cuando ingreso 201 para UnderwriterSQL y 06N para GroupSQL ahora aparece este error:
¿Estoy configurando los campos correctos como texto en el (UnderwriterSQL como texto, GroupSQL como texto)=>let ¿línea? ¿Es ese el problema?
smpa01
En respuesta a AW1976NOVA
¿Puede cambiar el nombre del parámetro a parámetro 1 o parámetro n. ° 1 del parámetro n. ° 1?
pdelia
La forma más sencilla de hacer esto es usar la interfaz de usuario para filtrar los campos y seleccionar cualquier valor único. El paso de filtro resultante se puede editar fácilmente, donde reemplaza la cadena del valor único que seleccionó con su parámetro. El paso se vería como si usara la interfaz de usuario para filtrar un campo.
Table.SelectRows(dbo_NovaDailyEligibilityExtract, each [PUNBR] = "123" )
Y lo cambiarías a
Table.SelectRows(dbo_NovaDailyEligibilityExtract, each [PUNBR] = #"Underwriter #(#)(SQL) (201)")
Power Query convertirá esto en declaraciones SQL en el backend, puede hacer clic derecho en el paso y hacer clic en «Ver consulta nativa» para ver esto.
AW1976NOVA
En respuesta a pdelia
No sé a qué te refieres con «usar la interfaz de usuario para filtrar». Lo busqué en Google y entré a la configuración y «Habilité»:
¿Quiere decir simplemente ingresar a Editar consulta y agregar un paso en el que filtre los dos criterios que necesito?
No sé a qué se refiere la ‘UI’.