Работа с типами данных в выражениях (построитель отчетов версии 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.