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
v-shex-msft
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
Seth_C_Bauer
@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.
Seth_C_Bauer
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.
Seth_C_Bauer
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.