Поделиться через


Работа с типами данных в выражениях (службы Reporting Services)

Типы данных представляют разные виды данных, чтобы их можно было эффективно хранить и обрабатывать. Стандартные типы данных включают текст (строки), числа с десятичными разрядами или без них, даты и время, а также изображения. Данные могут храниться с помощью одного типа данных, но форматироваться согласно предпочтениям при отображении их в отчете. Например, поле, представляющее валюту, может храниться как число с плавающей запятой, но отображаться в различных форматах в зависимости от выбранного свойства формата. Дополнительные сведения о форматах отображения см. в разделе Форматирование отчетов и элементов отчета.

Важно понимать типы данных при написании выражений, в которых сравниваются или сочетаются значения, например при определении выражений группы или критериев фильтра либо при вычислении статистических значений. Сравнения и вычисления допускаются только с элементами одного типа данных. Если типы данных не совпадают, можно явно преобразовать тип данных в элементе отчета с помощью выражения. Ниже описаны случаи, когда необходимо преобразовать один тип данных в другой.

  • Сравнение значения параметра отчета одного типа данных с полем набора данных другого типа.

  • Написание критерия фильтра, в котором сравниваются значения разных типов данных.

  • Написание выражения сортировки, в котором сочетаются поля, имеющие разный тип данных.

  • Написание выражений группы, в котором сочетаются поля, имеющие разный тип данных.

  • Преобразование значения, полученного из источника данных одного типа данных, в другой тип данных.

Определение типа данных в отчете

Чтобы определить тип данных элемента отчета, можно написать выражение, возвращающее тип данных. Например, чтобы показать тип данных для поля MyField, добавьте к ячейке таблицы следующее выражение: =Fields!MyField.Value.GetDataType().ToString(). Результат отобразит тип данных CLR, представляющий поле MyField, например System.String или System.DateTime.

Преобразование полей набора данных в другой тип данных

Можно также преобразовать поля набора данных, прежде чем они будут использоваться в отчете. В следующем списке описаны способы преобразования существующего поля набора данных.

  • Изменение запроса набора данных, чтобы добавить новое поле запроса с преобразованными данными. В реляционных и многомерных источниках данных при этом способе в операции преобразования используются ресурсы источника данных.
  1. Создание вычисляемого поля на основе существующего поля набора данных отчета с помощью выражения, преобразующего все данные одного столбца результирующего набора в данные нового столбца с другим типом данных. Например, следующее выражение преобразует поле Year из целочисленного значения в строковое: =CStr(Fields!Year.Value). Дополнительные сведения см. в разделе Как добавить, изменить или удалить поле в области «Данные отчета».
  • Проверка наличия метаданных в используемом модуле обработки данных с целью получения предварительно отформатированных данных. Например, запрос многомерных выражений служб SQL ServerAnalysis Services включает расширенное свойство FORMATTED_VALUE для значений куба, отформатированных при обработке куба. Дополнительные сведения см. в разделе Использование расширенных свойств поля для набора данных служб Analysis Services.

Основные сведения о типах данных параметров

Параметры отчета должны иметь один из следующих пяти типов данных: 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 см. в статьях по синтаксическому анализу строк даты и времени и по форматированию даты и времени для конкретной культуры в MSDN.

  • Добавление нового вычисляемого поля к набору данных отчета, который использует выражение для получения части строки. Дополнительные сведения см. в разделе Как добавить, изменить или удалить поле в области «Данные отчета».

  • Изменение запроса набора данных отчета, чтобы использовать функции 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).