SSRS의 텍스트 표현식에서 \n(줄바꿈)을 입력해줘야 할때
Environment.NewLine 을 입력해준다.
vbcrlf 를 입력해주라는 글도 있지만 명확하게 알 수 있는 Environment.NewLine 이 더 좋은 것 같다.
SSRS의 텍스트 표현식에서 \n(줄바꿈)을 입력해줘야 할때
Environment.NewLine 을 입력해준다.
vbcrlf 를 입력해주라는 글도 있지만 명확하게 알 수 있는 Environment.NewLine 이 더 좋은 것 같다.
SSRS 버전: Microsoft SQL Server Reporting Services Designers Version 14.0.1016.268
SQL 버전: SQL 2017 Standard
기존 SSRS에서 텍스트 컬러를 변경 하려면 보통 SSRS에서 제공하는 속성의 Font에서 수식을 이용해 수정했다.
전체 컬러의 색깔만 변경해야 할 때는 해당 방법이 매우 유용했다.
RS에서 수식을 활용해서 경우에 따라 색깔을 다르게 사용할 수 있었다.
그런데 특정 부분만 색깔을 변경해야 하면 어떻게 해야 할까?
예를들면
나는 오늘 월급을 받았다. 의 월급이라는 글자만 컬러를 변경하고 싶을때
나는 오늘 월급을 받았다. 이런식으로 말이다.
1. 텍스트에서 글자부분의 속성을 HTML-Interpret HTML tags as styles를 선택
2. Values에 Expression창을 선택해 HTML태그를 이용해 작성 해주면 된다.
내 경우 2번의 방법이 적용되지 않았다.
그래서 SQL에서 데이터를 가지고 올 때부터 HTML 태그를 붙여서 가지고 왔다.
결과물은 아래와 같다.
-- Provided "as is" with no warranties of any kind. User assumes all risks of use.
/* The XML XQuery statements used below ignore namespace so that information can be retrieved
from multiple RDL versions. */
use ReportServer
;WITH CatalogWithXml AS (
-- XMLifyies Catalog's Content column.
/* For report (Type = 2) and shared data source (Type = 5) objects, the image-typed column
Content stores the XML RDL defining the object. We convert this column to XML so that SQL's
XML type's functions can be used on it. */
SELECT *,
ContentXml = (CONVERT(XML, CONVERT(VARBINARY(MAX), Content)))
FROM Catalog
),
SharedDataSources AS (
-- Details on uses of shared data sources.
-- * Unused data sources are ignored.
-- * ItemID identifies the catalog entry (e.g. report) using the shared data source. It is not
-- the data source's ID!
/* Table DataSource contains a row for each data source (embedded or shared) used in each report.
Its column Name stores the data source name, as defined in the report. Shared data sources are
defined (RDL XML) in the catalog. Inner joining between these two tables limits this CTE's
resultset to details on shared data sources because embedded data sources don't have Link-ed
rows in the catalog. */
SELECT ds.ItemID,
SharedDataSourceName = c.Name,
LocalDataSourceName = ds.Name,
DataProvider = ContentXML.value('(/*:DataSourceDefinition/*:Extension)[1]', 'NVARCHAR(260)'),
ConnectionString = ContentXML.value('(/*:DataSourceDefinition/*:ConnectString)[1]', 'NVARCHAR(MAX)')
-- Each DataSource row with a Link value represents a use of a shared data source.
FROM DataSource ds
-- Uses the Link value to look up the catalog entry defining the shared data source.
JOIN CatalogWithXml c ON ds.Link = c.ItemID
),
AllDataSources AS (
-- Details on both embedded & shared data sources *used* by reports.
/* Embedded data sources are defined in the hosting report's RDL. Shared data sources are
referenced (but not defined) in this RDL. We extract the relevant details and then join
to the SharedDataSources CTE to assemble a resultset with details on each data source
(embedded and shared) used by each report (identified by ItemID). */
SELECT r.ItemID,
r.LocalDataSourceName, -- embedded data source's name or local name given to shared data source
sds.SharedDataSourceName,
SharedDataSource = CAST ((CASE WHEN sds.SharedDataSourceName IS NOT NULL THEN 1 ELSE 0 END) AS BIT),
DataProvider = ISNULL(r.DataProvider, sds.DataProvider),
ConnectionString = ISNULL(r.ConnectionString, sds.ConnectionString)
FROM (
SELECT c.*,
LocalDataSourceName = DataSourceXml.value('@Name', 'NVARCHAR(260)'),
DataProvider = DataSourceXml.value('(*:ConnectionProperties/*:DataProvider)[1]', 'NVARCHAR(260)'),
ConnectionString = DataSourceXml.value('(*:ConnectionProperties/*:ConnectString)[1]', 'NVARCHAR(MAX)')
FROM CatalogWithXml c
CROSS APPLY ContentXml.nodes('/*:Report/*:DataSources/*:DataSource') DataSource(DataSourceXml)
WHERE c.Type = 2 -- limit to reports only
) r
LEFT JOIN SharedDataSources sds ON r.ItemID = sds.ItemID AND r.LocalDataSourceName = sds.LocalDataSourceName
),
DataSets AS (
-- Details on data sets used in reports.
/* Outputs one row per data set used in each report. */
SELECT ItemID,
DataSetName = QueryXml.value('@Name', 'NVARCHAR(256)'),
DataSourceName = QueryXml.value('(*:Query/*:DataSourceName)[1]', 'NVARCHAR(260)'),
CommandType = QueryXml.value('(*:Query/*:CommandType)[1]', 'NVARCHAR(15)'),
CommandText = QueryXml.value('(*:Query/*:CommandText)[1]', 'NVARCHAR(MAX)')
FROM CatalogWithXml
CROSS APPLY ContentXml.nodes('/*:Report/*:DataSets/*:DataSet') QueryData(QueryXml)
),
Data AS (
-- Combines data set and data source details with additional information from Catalog.
SELECT ds.ItemID,
Name,
Path,
LocalDataSourceName,
SharedDataSource,
SharedDataSourceName,
DataProvider,
ConnectionString,
DataSetName,
CommandType = ISNULL(CommandType, 'Text'), -- "Text" = default command type
CommandText
FROM DataSets ds
JOIN AllDataSources src ON src.ItemID = ds.ItemID AND src.LocalDataSourceName = ds.DataSourceName
JOIN Catalog c ON ds.ItemID = c.ItemID
)
SELECT * FROM Data
|
USE Reportserver
GO
SELECT
c.Name AS ReportName
, c.Path AS Report_path
, rs.scheduleID as Job_name
, s.Description
, s.LastStatus
, s.LastRuntime
FROM catalog c
JOIN Subscriptions s ON c.ItemID = s.Report_OID
JOIN ReportSchedule rs ON c.ItemID = rs.ReportID
AND rs.SubscriptionID = s.SubscriptionID
|