Tengo una base de datos de SQL Server con una tabla que contiene imágenes en formato binario que me gustaría mostrar en una tabla de un informe. Solo puedo usar el modelo DirectQuery y no he encontrado una manera de que esto suceda, porque no puedo cambiar el tipo de datos de binario a texto, ya que no se admite en el modelo de DirectQuery.
¿Hay una manera suficiente de escribir una consulta de SQL ServerSQL Server o una forma diferente de cambiar el binario a texto para mostrar en el informe?
Solved! Go to Solution.
Pude resolverlo con una consulta de SQL Server convirtiendo la imagen a VARBINARY(MAX) y, a continuación, convirtiéndola a XML y cambiando el valor a VARCHAR(MAX). Después de eso, lo concatené con 'data:image/jpeg;base64, ', y pude cambiar la categoría de datos a ImageUrl.
Aquí está la consulta:
SELECT
CONCAT('data:image/jpeg;base64, ', CAST('' as XML).value('xs:base64Binary(sql:column("BinaryPicture"))', 'VARCHAR(MAX)')) AS Picture
FROM (
SELECT
CAST(lmePicture AS VARBINARY(MAX)) AS BinaryPicture
FROM
Employees
) AS A
@Lyssillic ¡Fantástica solución! Muchas gracias por publicarlo. Acabo de encontrarme con este problema y no pude encontrar nada en ninguna parte, ni siquiera en los documentos de MS. Aunque a partir del 11-02-2022, una columna binaria se puede convertir en texto en el editor de Power Query, pero aún así, aún desencadena la consulta no compatible con el error DQ. Incluso después de que hice exactamente el mismo concat que hiciste, pero hice el mío dentro de Power Query usando M. Y PQ todavía no quería aceptarlo. Parece que hay una limitación en el tamaño máximo de un flujo entrante de datos binarios. Pero si es texto, entonces está bien. Muy extraño.
Pude resolverlo con una consulta de SQL Server convirtiendo la imagen a VARBINARY(MAX) y, a continuación, convirtiéndola a XML y cambiando el valor a VARCHAR(MAX). Después de eso, lo concatené con 'data:image/jpeg;base64, ', y pude cambiar la categoría de datos a ImageUrl.
Aquí está la consulta:
SELECT
CONCAT('data:image/jpeg;base64, ', CAST('' as XML).value('xs:base64Binary(sql:column("BinaryPicture"))', 'VARCHAR(MAX)')) AS Picture
FROM (
SELECT
CAST(lmePicture AS VARBINARY(MAX)) AS BinaryPicture
FROM
Employees
) AS A
Hola @Lyssillic,
Me gustaría sugerirle que revise el blog a continuación para saber más sobre cómo analizar archivos de imagen de formato binario.
Puesto que está en modo de consulta directa, me gustaría sugerir le sugiero que escriba una consulta t-sql para agregar una columna personalizada para convertir binario a texto base64 y agregar el prefijo para que power bi pueda reconocer estas cadenas como imagen.
Almacenamiento de imágenes en modelos de datos de PowerBI/Analysis Services
Utilice la opción BINARY BASE64
Transact-SQLTransact-SQL: Convierte VARBINARY a Base64 String y viceversa
saludos
Xiaoxin Sheng
@v-shex-msft Necesito agregar una cosa más: la solución del OP elimina el mensaje de error en PQ, pero en Power BI, el objeto visual permanece atascado en el modo de carga para siempre y, después de mucho tiempo, falla con un mensaje de error de estilo visual que no se puede cargar. Así que el problema está a medio resolver en este punto.
¿Alguna idea de cómo cargar imágenes desde un SERVIDOR SQL Server local a través de DirectQuery?
@v-shex-msft Acabo de encontrarme con este problema y no pude encontrar nada en ninguna parte, ni siquiera en los documentos de MS. Aunque a partir del 11-02-2022, una columna binaria se puede convertir en texto en el editor de Power Query, pero aún así, aún desencadena la consulta no compatible con el error DQ. Incluso después de hacer exactamente lo mismo que el OP, pero hice el mío dentro de Power Query usando M. Y PQ todavía no quería aceptarlo.
¿Existe una limitación en el tamaño máximo de un flujo entrante de datos binarios? En caso afirmativo, ¿qué es Y dónde está documentado? No pude encontrar nada en línea con respecto a esto, excepto el hilo aquí.