Trabajar con datos XML

Un usuario Pregunto ✅

Markzolotoy

Necesito mostrar datos xml en mi informe. Estos datos se almacenan en una tabla SQL. ¿Cómo extraigo partes de este xml y lo convierto en datos tabulares? Lo estoy haciendo en mi informe de SSRS, pero no es posible copiar y pegar T-SQL.

Gracias

Hola @Markzolotoy,

Me gustaría sugerirle que ingrese al editor de consultas, agregue una columna personalizada e intente usar xml.document/xml.table para analizar esta columna xml, luego expanda la tabla xml analizada.

Acceso a funciones de datos

Documento Xml. Devuelve el contenido de un documento XML como una tabla jerárquica (lista de registros).
Xml.Tablas Devuelve el contenido de un documento XML como una colección anidada de tablas planas.

Saludos,

Xiaoxin-sheng

@Markzolotoy Supongo que estoy confundido. ¿No podría crear un procedimiento para analizar el xml y devolver la tabla que desea cargar en Power BI?

¿Cómo lo estás haciendo para SSRS?

Markzolotoy

En respuesta a Seth_C_Bauer

En SSRS, primero estoy extrayendo datos XML en el informe, luego uso CTE en el informe para convertirlo en datos tabulares.

En respuesta a Markzolotoy

@Markzolotoy Esto suena como un procedimiento almacenado… no como SSRS. O eso, o estás haciendo algo que nunca antes había hecho en SSRS.

Markzolotoy

En respuesta a Seth_C_Bauer

Este es parte de mi código de consulta SSRS:

DECLARE @xml XML = (select xmlData from @reportData)
;WITH rs AS
	(
		SELECT col.value('(ProjectName)[1]','varchar(max)') AS [ProjectName]
		, col.value('(PointName)[1]','varchar(max)') AS [PointName]
		, col.value('(PointDescription)[1]','varchar(max)') AS [PointDescription]
		, col.value('(Units)[1]','varchar(max)') AS [Units]
		, col.value('(TimeStamp)[1]','varchar(max)') AS [TimeStamp]
		, col.value('(EndDeratingTime)[1]','varchar(max)') AS [EndDeratingTime]
		, col.value('(RealTimeServiceDescription)[1]','varchar(max)') AS [RealTimeServiceDescription]
		, col.value('(CategoryName)[1]','varchar(max)') AS [CategoryName]
		, col.value('(ModeName)[1]','varchar(max)') AS [ModeName]
		, col.value('(Importance)[1]','varchar(max)') AS [Importance]
		, col.value('(AlarmStateIcon)[1]','varchar(max)') AS [AlarmStateIcon]
		FROM @xml.nodes('BadSensorReport/BadSensorDataRecords/BadSensorData') AS tab(col)
	)
	SELECT *, 
		case EndDeratingTime when '' then EndDeratingTime else CONVERT(varchar, CAST(EndDeratingTime AS datetime), 120) end as newDeratingTime, 
		CONVERT(varchar, CAST(TimeStamp AS datetime), 120) as newTimeStamp
	FROM rs
	ORDER BY ProjectName

Así es como xml se convierte en datos tabulares.

En respuesta a Markzolotoy

@Markzolotoy Cuando se conecta a SQL en Power BI, puede hacer clic en «avanzado» e ingresar la consulta en esa ventana … ¿Lo ha intentado? ¿Falla? Puede envolver esto en un procedimiento almacenado o función de valor de tabla en SQL y llamarlo desde la ventana avanzada si falla la consulta directa.

Deja un comentario

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