Работа с типами данных в выражениях (построитель отчетов версии 3.0 и службы SSRS)
Типы данных представляют разные виды данных, чтобы их можно было эффективно хранить и обрабатывать. Стандартные типы данных включают текст (строки), числа с десятичными разрядами или без них, даты и время, а также изображения. Значения в отчете должны быть представлены с помощью типов данных языка определения отчетов. При отображении значения в отчете его можно отформатировать в соответствии с конкретными предпочтениями. Например, поле, представляющее валюту, может храниться в определении отчета как число с плавающей запятой, но отображаться в различных форматах в зависимости от выбранного свойства формата.
Дополнительные сведения о форматах отображения см. в разделе Форматирование элементов отчета (построитель отчетов версии 3.0 и службы SSRS).
Примечание |
---|
В построителе отчетов и в конструкторе отчетов среды Business Intelligence Development Studio можно создавать и изменять определения отчета (RDL). В каждой среде разработки существуют различные способы создания, открытия и сохранения отчетов и связанных элементов. Дополнительные сведения см. в разделе Разработка отчетов в построителе отчетов и конструкторе отчетов 3.0 (SSRS) на веб-сайте microsoft.com. |
Типы данных языка определения отчетов и типы данных среды CLR
Значения, заданные в RDL-файле, должны иметь один из типов данных языка определения отчетов. При компиляции и обработке отчета типы данных языка определения отчетов преобразуются в типы данных среды CLR. В следующей таблице показаны применяемые преобразования, которые обозначены «По умолчанию».
Тип RDL |
Типы CLR |
---|---|
String |
По умолчанию String Chart, GUID, Timespan |
Логические значения |
По умолчанию Boolean |
Integer |
По умолчанию Int64 Int16, Int32, Uint16, Uint64, Byte, Sbyte |
DateTime |
По умолчанию DateTime DateTimeOffset |
Float |
По умолчанию Double Single, Decimal |
Binary |
По умолчанию Byte[] |
Variant |
Любое из вышеприведенного, кроме Byte[] |
VariantArray |
Массив данных типа Variant |
Serializable |
Значение типа Variant или типов, отмеченных свойством Serializable или реализующих интерфейс ISerializable. |
Общие сведения о типах данных и о записи выражений
Важно понимать типы данных при написании выражений, в которых сравниваются или сочетаются значения, например, при определении выражений группы или критериев фильтра либо при вычислении статистических значений. Сравнения и вычисления допускаются только с элементами одного типа данных. Если типы данных не совпадают, можно явно преобразовать тип данных в элементе отчета с помощью выражения.
Ниже описаны случаи, когда необходимо преобразовать один тип данных в другой.
Сравнение значения параметра отчета одного типа данных с полем набора данных другого типа.
Написание критерия фильтра, в котором сравниваются значения разных типов данных.
Написание выражения сортировки, в котором сочетаются поля, имеющие разный тип данных.
Написание выражений группы, в котором сочетаются поля, имеющие разный тип данных.
Преобразование значения, полученного из источника данных одного типа данных, в другой тип данных.
Определение типа данных в отчете
Чтобы определить тип данных элемента отчета, можно написать выражение, возвращающее тип данных. Например, чтобы показать тип данных для поля MyField, добавьте к ячейке таблицы следующее выражение: =Fields!MyField.Value.GetType().ToString(). Результат отображает тип данных CLR, используемый для представления поля MyField, например System.String или System.DateTime.
Преобразование полей набора данных в другой тип данных
Можно также преобразовать поля набора данных, прежде чем они будут использоваться в отчете. В следующем списке описаны способы преобразования существующего поля набора данных.
Изменение запроса набора данных, чтобы добавить новое поле запроса с преобразованными данными. В реляционных и многомерных источниках данных при этом способе в операции преобразования используются ресурсы источника данных.
Создание вычисляемого поля на основе существующего поля набора данных отчета с помощью выражения, преобразующего все данные одного столбца результирующего набора в данные нового столбца с другим типом данных. Например, следующее выражение преобразует поле Year из целочисленного значения в строковое: =CStr(Fields!Year.Value). Дополнительные сведения см. в разделе Как добавлять, изменять, обновлять поля в области данных отчета (построитель отчетов 3.0 и службы SSRS).
Проверка наличия метаданных в используемом модуле обработки данных с целью получения предварительно отформатированных данных. Например, запрос многомерных выражений служб SQL Server Службы Analysis Services включает расширенное свойство FORMATTED_VALUE для значений куба, отформатированных при обработке куба. Дополнительные сведения см. в разделе Расширенные свойства поля для базы данных служб Analysis Services (SSRS).
Основные сведения о типах данных параметров
Параметры отчета должны иметь один из следующих пяти типов данных: Boolean, DateTime, Integer, Float или Text (или String). Если запрос набора данных включает параметры запроса, автоматически создаются параметры отчета, которые связываются с параметрами запроса. Типом данных по умолчанию для параметра отчета является String. Чтобы изменить тип данных по умолчанию параметра отчета, выберите нужное значение в раскрывающемся списке Тип данных на странице Общие в диалоговом окне Свойства параметров отчета.
Примечание |
---|
Параметры отчета с типами данных DateTime не поддерживают миллисекунды. После создания параметра на основе значений, содержащих миллисекунды, нельзя выбрать значение из раскрывающегося списка доступных значений Date или Time, включающих миллисекунды. |
Написание выражений, преобразующих типы данных или получающих части данных
При объединении текста и полей набора данных с помощью оператора объединения (&) среда CLR обычно предоставляет форматы по умолчанию. Если нужно явно преобразовать поле набора данных или параметр в конкретный тип данных, для преобразования данных необходимо использовать метод CLR или функцию библиотеки времени выполнения Visual Basic.
В следующей таблице приводятся примеры преобразования типов данных.
Тип преобразования |
Пример |
---|---|
DateTime в String |
=CStr(Fields!Date.Value) |
String в DateTime |
=DateTime.Parse(Fields!DateTimeinStringFormat.Value) |
String в DateTimeOffset |
=DateTimeOffset.Parse(Fields!DateTimeOffsetinStringFormat.Value) |
Получение года |
=Year(Fields!TimeinStringFormat.Value) -- or -- =Year(Fields!TimeinDateTimeFormat.Value) |
Boolean в Integer |
=CInt(Parameters!BooleanField.Value) -1 соответствует значению True, а 0 соответствует значению False. |
Boolean в Integer |
=System.Convert.ToInt32(Fields!BooleanFormat.Value) 1 соответствует значению True, а 0 соответствует значению False. |
Только часть DateTime значения DateTimeOffset |
=Fields!MyDatetimeOffset.Value.DateTime |
Только часть Offset значения DateTimeOffset |
=Fields!MyDatetimeOffset.Value.Offset |
Для управления отображаемым форматом значений можно также использовать функцию Format. Дополнительные сведения см. в разделе Функции (Visual Basic).
Дополнительные примеры
При соединении с источником данных поставщика данных, не поддерживающим преобразование всех типов данных, типом данных по умолчанию для неподдерживаемых типов является String. В следующих примерах приводятся решения для конкретных типов данных, которые возвращаются как String.
Объединение типов данных String и DateTimeOffset среды CLR
Для большинства типов данных среда CLR обеспечивает преобразования по умолчанию для объединения значений, имеющих разный тип данных, в одну строку с помощью оператора &. Например, следующее выражение объединяет текст «The date and time are: » с полем StartDate набора данных, содержащим значение типа данных объекта System..::..DateTime: ="The date and time are: " & Fields!StartDate.Value.
Для некоторых типов данных может понадобиться включение функции ToString. Например, в следующем выражении показан тот же пример, использующий тип данных CLR System..::..DateTimeOffset, который включает дату, время и смещение часового пояса относительно часового пояса времени в формате UTC: ="The time is: " & Fields!StartDate.Value.ToString().
Преобразование строкового типа данных в тип данных DateTime среды CLR
Если модуль обработки данных не поддерживает все определенные в источнике данных типы данных, данные могут быть получены в виде текста. Например, значение с типом данных datetimeoffset(7) можно получить как значение String. В Перте, Австралия, строковое значение для 1 июля 2008, 6:05:07.9999999 утра будет напоминать следующий текст:
2008-07-01 06:05:07.9999999 +08:00
В этом примере показана дата (1 июля 2008), за которой следует время с 7-значной точностью (6:05:07.9999999 утра) и смещение часового пояса времени в формате UTC в часах и минутах (+ 8 часов 0 минут). В следующих примерах это значение помещается в поле с типом данных String с именем MyDateTime.Value.
Для преобразования этой даты в одно или несколько значений CLR можно воспользоваться одним из следующих способов.
В текстовом поле получите часть строки с помощью выражения. Например:
Следующее выражение возвращает часть строки, относящуюся к часу смещения часового пояса времени в формате UTC, и преобразует ее в минуты: =CInt(Fields!MyDateTime.Value.Substring(Fields!MyDateTime.Value.Length-5,2)) * 60
Результат 480.
Следующее выражение преобразует строку в значение даты и времени: =DateTime.Parse(Fields!MyDateTime.Value)
Если строка MyDateTime.Value содержит значение смещения времени в формате UTC, то функция DateTime.Parse сначала изменит смещение времени в формате UTC (7:00 утра - [+08:00] относительно времени в формате UTC 23:00 предыдущего вечера). Затем функция DateTime.Parse применяет локальное смещение времени в формате UTC сервера отчетов и при необходимости настраивает переход на летнее время. Например, в Ричмонде, штат Вашингтон, смещение локального времени с переходом на летнее время составляет [-07:00], или на 7 часов раньше 23:00. Результатом является следующее значение типа DateTime: 2007-07-06 04:07:07 PM (6 июля 2007 16:07).
Дополнительные сведения о преобразовании строк в типы данных DateTime см. в разделах Синтаксический анализ строк даты и времени, Форматирование даты и времени для конкретной культуры и Выбор типов данных DateTime, DateTimeOffset и TimeZoneInfo в библиотеке MSDN.
Добавление нового вычисляемого поля к набору данных отчета, который использует выражение для извлечения части строки. Дополнительные сведения см. в разделе Как добавлять, изменять, обновлять поля в области данных отчета (построитель отчетов 3.0 и службы SSRS).
Изменение запроса набора данных отчета, чтобы использовать функции Transact-SQL для независимого получения значений даты и времени и создания отдельных столбцов. В следующем примере показано использование функции DatePart для добавления столбца к году и столбца к смещению часового пояса времени в формате UTC, преобразованного в минуты:
SELECT
MyDateTime,
DATEPART(year, MyDateTime) AS Year,
DATEPART(tz, MyDateTime) AS OffsetinMinutes
FROM MyDates
Результирующий набор содержит три столбца. Первый столбец представляет дату и время, второй — год, а третий содержит значение смещения времени в формате UTC в минутах. В следующей строке показаны данные примера:
2008-07-01 06:05:07 2008 480
Дополнительные сведения о типах данных в базе данных SQL Server см. в разделах Типы данных (компонент Database Engine), Типы данных (Transact-SQL) и Функции даты и времени (Transact-SQL)электронной документации по SQL Server.
Дополнительные сведения о типах данных SQL Server Службы Analysis Services см. в разделе Data Types in Analysis Servicesэлектронной документации по SQL Server.
См. также