Incluir parámetros dentro de Power BI para consultar una fuente de datos SQL

Un usuario Pregunto ✅

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 #:

1 PNG

Estoy luchando por incorporar estos dos parámetros con el script/sintaxis ‘Obtener datos’ existente generado por Power BI:

2 PNG

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:

33333.PNG

(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:

4444.PNG

Mis dos parámetros creados se establecen como texto:

555.PNG 6666.PNG

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

888.PNG

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:

1313.PNG

Sin embargo, cuando ingreso 201 para UnderwriterSQL y 06N para GroupSQL ahora aparece este error:

14 PNG

16 PNG

¿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é»:

3 PNG

¿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’.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *