sql-server - tutorial - tableau public como usar
Cómo obtener informes para ver fuentes de datos compartidas (8)
Estoy corriendo 2008 R2
Tengo un conjunto completo de informes que tengo que cargar en RS. Estos fueron desarrollados y enviados a nuestra empresa por un tercero. Se conectan a una fuente de datos compartida. Subí los informes en carpetas que los separaban por función. El problema es que no ven el origen de datos para el que se escriben los informes. Creé una fuente de datos compartida y señalé el informe. La conexión se probó con éxito, pero cuando ejecuté el informe, continué recibiendo el siguiente error:
"El servidor de informes no puede procesar el informe o el conjunto de datos compartido. El origen de datos compartido ''dsMyObject'' para el servidor de informes o SharePoint no es válido. Busque el servidor o el sitio y seleccione un origen de datos compartido. (RsInvalidDataReference)"
Cuando usé exactamente las mismas credenciales en una fuente de datos incrustada, el informe se ejecuta y, una vez que lo ejecuto, puedo volver a cambiarlo a la fuente de datos compartida que creé y funciona bien.
Mi problema es que este proceso es demasiado ineficaz. Tengo muchos informes, y muchos más servidores para rodar esto también, para tener que cambiar manualmente la fuente de datos para que funcione.
Noté que cuando miro la lista de fuentes de datos, veo las que creé con el nombre de DS en la primera línea y la ubicación en la siguiente (http: // [Server] / reports / [Data Source Folder ]) mientras que el DS creado por el vendedor tiene el nombre del DS en ambas líneas. Esto me lleva a creer que hay una manera de cargar el DS en SSRS con el mismo nombre que el proveedor usó de tal manera que permita que los informes los usen automáticamente. No puedo encontrar nada que me diga cómo hacer esto, por lo que hago esta pregunta aquí. ¿Cómo puedo obtener informes escritos previamente para ver un origen de datos compartido en el servidor en el que implemento los informes?
Gracias por adelantado,
Aprecio un hilo anterior, pero estaba tratando de encontrar si SSRS puede informar qué fuente de datos compartida está usando, así que podría agregar una advertencia a un informe de SSRS en caso de que aún estuviera apuntando a una fuente de datos incorrecta cuando se implementó. La solución que se me ocurrió solo funciona si está usando servidores diferentes para Dev / UAT / Prod, pero puede pegar @@SERVERNAME
en su script tsql.
Lo he convertido en una declaración de caso que puedo colgar en mis informes
select case @@SERVERNAME when ''Prodserver'' then ''''
else ''WARNING: This report is not looking at production data!'' end as ServerWarning
Funciona lo suficientemente bien para mí!
Definitivamente una gran deficiencia de SSRS. Muchas buenas respuestas publicadas aquí que se adaptan a diferentes escenarios, habilidades y herramientas. Estoy agregando otro usando Class Sys.Net.WebServiceProxy en Powershell:
# Create WebServiceproxy object
[string] $WebServiceUri="http://localhost/ReportServer/ReportService2010.asmx?wsdl"
$proxy=New-WebServiceProxy -uri $WebServiceUri -UseDefaultCredentails
# Define required data types (DataSource and DataSourceReference) and instantiate
$typeds=($proxy.gettype().namespace) + ''.DataSource''
$ds=new-object -TypeName $typeds
$typedsref=($proxy.gettype().namespace) + ''.DataSourceReference''
$reference=new-object -TypeName $typedsref
# Set data source object with reference and name
$reference.Reference="/Data Sources/DStest" # path/name of the data source
$ds.Item=$reference
$ds.Name="DStest" # name of the data source on the report
# Repoint data source on report
$ReportPath="/Reports/TestReport" # path/name of the report
$proxy.SetItemDataSources($ReportPath, $ds)
Explicación:
La idea principal es utilizar el método SetItemDataSources (x, y) de la clase Sys.Net.WebServiceProxy para configurar la fuente de datos y.name en el informe x para que apunte a la referencia de la fuente de datos y.item. En nuestro caso, el informe se llama TestReport, ubicado en la carpeta "/ Informes", que hace referencia al origen de datos "/ Data Sources / DSTest" con el nombre "DStest". Para realizar la repetición, necesitamos crear una referencia a la fuente de datos ($ ds) para la cual primero necesitamos definir los tipos de datos DataSource y DataSourceReference derivándolos del espacio de nombres del objeto WebServiceProxy ($ proxy)
Descubrí que la forma más fácil de resolver esto era simplemente crear un nuevo informe que SÍ use la fuente de datos compartida. En SSRS2012 / VS2010, la primera página del asistente pregunta si se debe usar un "origen de datos compartido" o crear un "nuevo origen de datos". Tomar la primera opción (y continuar creando el informe ficticio y guardarlo) da como resultado un RDL que contiene una sección entre la sección y la sección, algo como esto:
<DataSources>
<DataSource Name="shared_datasource_name">
<DataSourceReference>shared_datasource_name</DataSourceReference>
<rd:SecurityType>None</rd:SecurityType>
<rd:DataSourceID>f00b5045-1a8c-44be-952b-cca1ce9c57d6</rd:DataSourceID>
</DataSource>
</DataSources>
Acabo de copiar y pegar esta sección en mi RDL de informe en la misma ubicación. Felizmente utiliza esa fuente de datos durante la vista previa y cuando se vuelve a implementar.
En mi caso, tuve que hacer clic en la flecha desplegable a la derecha del informe en SSRS, seleccionar "Administrar", luego "Fuentes de datos", luego buscar la ubicación de la Fuente de datos compartidos que el informe necesita usar.
Este es un gran defecto de SSRS. Cuando los informes y las fuentes de datos se crean en SSRS, se les asignan identificadores únicos en la base de datos ReportServer. Cuando se cargan los informes, no reconocen una fuente de datos existente con el mismo nombre con el que se creó el informe.
Una forma de evitar esto es usar la utilidad rs.exe que viene con SSRS. Se puede usar para tareas masivas, incluida la configuración de metadatos de origen de datos en los informes. Consulte el siguiente enlace para obtener más información técnica.
Sé que esta es una pregunta muy antigua pero encontré esto porque enfrenté un problema similar en los últimos dos días. Sin embargo, en mi experiencia, la solución fue más simple, así que la agregaré en caso de que alguien más busque esto en el futuro.
Debe crear su fuente de datos antes de implementar sus informes en RS. Esto es lo que me pasó:
1) Los implementé por primera vez antes de agregar una fuente de datos, y no funcionaron: ni desde la aplicación en la que estoy trabajando, ni desde RS
2) Luego creé una fuente de datos pero eso no hizo nada con los informes existentes. Pude configurar algunos de ellos y señalarlos a la nueva fuente de datos, y funcionó. Si desea hacer esto de forma masiva, probablemente podría usar la utilidad RS como se sugirió anteriormente o probablemente algo como esto , sin embargo, no he probado estos.
3) Intenté volver a implementar los informes en RS, sin embargo, al parecer, RS no sobrescribe los elementos que no han cambiado, ya que los informes redistribuidos aún no recogen la fuente de datos
4) Luego eliminé los informes existentes y los reubicé. Esto lo arregló y recogieron la fuente de datos de inmediato.
Actualizar un informe manualmente con fuente de datos compartida. En la [ReportServer].[dbo].[DataSource]
, anote el valor de "Enlace" para ese informe, luego simplemente actualice el restablecimiento que tiene la fuente de datos en la columna Name
update [ReportServer].[dbo].[DataSource]
set Link = ''01B758F2-B597-43BE-A90F-416DF3CDA396''
where Name = ''PNLDS''
and Link is NULL
I was able to bulk update and fix the problem by updating the data source link using the T-SQL below.
begin tran
update dbo.DataSource
set Link = c.ItemID
from dbo.DataSource ds
inner join dbo.Catalog c
on ds.Name = c.Name
and c.Type = 5
where ds.link is null
select ds.Link oldlink, c.ItemID
from dbo.DataSource ds
inner join dbo.Catalog c
on ds.Name = c.Name
and c.Type = 5
--where ds.link is null
select *
from dbo.DataSource ds
where ds.link is null
rollback tran
-- commit tran
http://tsqlblog.blogspot.co.uk/2011/05/rsinvaliddatasourcereference-on.html