Problema de tabla de autorreferencia

Un usuario Pregunto ✅

Artefx

Hola,

Tengo algunos problemas para extraer los datos necesarios de una tabla dentro de la base de datos SQL.

La base de datos está vinculada a nuestro sistema MRP / ERP, por lo que no se puede cambiar de ninguna manera.

El problema que tengo es que tengo una tabla BOM (Lista de materiales) dentro de la base de datos de la que necesito extraer varios niveles de información.

1.jpg2.jpg

Las fotos de arriba muestran mi problema.

En el nivel superior, solo veo el número de pieza final (ya que esto es lo que se encuentra en los pedidos de venta / pronóstico), pero necesito el nivel inferior (los códigos CW) para poder estimar el uso.

Si alguien me puede indicar la dirección correcta, se lo agradecería mucho.

Saludos

Sotavento

@Artefx De tu ejemplo, esto es lo que puedo ver que quieres. Solo debería ser cuestión de unir la tabla en sí misma para devolver la información adicional que necesita, que se podría agregar de varias maneras en Power BI …

CREATE TABLE #TEMP
(
ID1 nvarchar(20),
Desc1 nvarchar(20),
ID2 nvarchar(20),
Desc2 nvarchar(20)
)

INSERT INTO #TEMP (ID1, Desc1, ID2, Desc2) VALUES ('1','Desc1','5', '5Washer')
INSERT INTO #TEMP (ID1, Desc1, ID2, Desc2) VALUES ('1','Desc1','6', '6Washer')
INSERT INTO #TEMP (ID1, Desc1, ID2, Desc2) VALUES ('1','Desc1','7', '7Washer')
INSERT INTO #TEMP (ID1, Desc1, ID2, Desc2) VALUES ('5','5Washer','CW5', 'CWWasher')
INSERT INTO #TEMP (ID1, Desc1, ID2, Desc2) VALUES ('6','6Washer','CW6', 'CWWasher')
INSERT INTO #TEMP (ID1, Desc1, ID2, Desc2) VALUES ('7','7Washer','CW7', 'CWWasher')

    SELECT *
    FROM #TEMP t
	left outer join #TEMP x
		on x.id1 = t.id2
	where x.id1 is not null

Artefx

En respuesta a Seth_C_Bauer

@Seth_C_Bauer Tu ejemplo de hecho parece describir el problema que estoy teniendo.

¿Podría explicarle a alguien que sea relativamente nuevo en PowerBI dónde ejecuto el código que demostró?

Tenga en cuenta que solo puedo leer datos de la base de datos. No tenemos permiso para crear tablas / vistas, ya que está vinculado a algún software propietario.

Saludos

Sotavento

En respuesta a Artefx

@Artefx Seguro. Creé la tabla temporal para mostrar el ejemplo que podría ejecutar si quisiera, ya que no proporcionó ningún detalle sobre el nombre de la tabla o los nombres de las columnas.

Pero para sus propósitos, no tiene que crear nada, simplemente escriba una consulta de selección para devolver la información que desea.

Entonces, si miramos su tabla así:

table.png

Podemos «Obtener datos» -> Sql Server -> establecer servidor / db

Luego, tiene opciones para «Importar» (extraer datos a PowerBI): le brinda todas las opciones para crear un modelo / modificar datos, etc.

o DirectQuery (deja los datos en la base de datos de origen y le permite ejecutar consultas en él. Limita lo que puede hacer hasta cierto punto en Power BI)

Debajo de esas opciones está «Opciones avanzadas»; seleccione esta y verá un área donde puede ingresar una consulta, en lugar de simplemente seleccionar todos los datos de la tabla. Recomendaría esto de todos modos, porque es muy probable que haya mucha información innecesaria que no necesita.

Luego, puede escribir una consulta similar a la que le mostré, pero ligeramente modificada para que coincida con la imagen de arriba. (reemplace Seleccionar * con solo las columnas que desea devolver.

    SELECT *
    FROM TEMP t
	left outer join #TEMP x
		on x.ID1 = t.ID2
	where x.ID1 is not null

Como ejemplo (usando mi tabla #Temp), aquí está la consulta con la salida de la tabla original y la salida unida. El primero coincide con lo que tienes, el segundo es lo que creo que quieres y lo que te da la consulta.

salida.JPG

Artefx

En respuesta a Seth_C_Bauer

@Seth_C_Bauer

Muchas gracias. Eso fue muy apreciado.

He estado usando PowerBI / Power Query durante aproximadamente 6 meses, así que estoy totalmente al tanto de cómo obtener información en PwBI y manipularla. Simplemente nunca tuve que hacer una manipulación avanzada de consultas como esta (en PwBI).

Otra vez, gracias por tu ayuda,

Sotavento

wonga

En respuesta a Artefx

@Artefx

Dado que parece que desea unir una tabla consigo mismo, probablemente pueda duplicar la consulta en el Editor de consultas y luego usar la función «Combinar consultas» para unir las dos y seleccionar las columnas relacionadas y realizar las modificaciones de datos desde allí.

Greg_Deckler

Ésta es una pregunta muy difícil de responder con eficacia. ¿Puede proporcionar más detalles sobre el nivel «superior» y el nivel «inferior»? ¿Están estas cosas en dos tablas diferentes, está trabajando con vistas?

Sin saber nada sobre sus datos o sistemas, podría, en teoría, crear dos consultas diferentes, una para el nivel «superior» y otra para el nivel «inferior» y realizar una consulta conjunta basada en un ID común.

Deja un comentario

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