Типы данных в выражениях в отчете с разбивкой на страницы (построитель отчетов)

Применяется к: Microsoft Report Builder (SSRS) Power BI Report Builder Конструктор отчетов в SQL Server Data Tools

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

Дополнительные сведения о форматах отображения см. в разделе Форматирование элементов отчета (построитель отчетов и службы SSRS).

Примечание.

Файлы определения страничных отчетов (.rdl) можно создавать и изменять в Microsoft Report Builder, Power BI Report Builder и в конструктор отчетов в SQL Server Data Tools.

Типы данных языка определения отчетов (RDL) и типы данных общеязыковой среды выполнения (CLR)

Значения, указанные в файле RDL, должны относиться к типу данных RDL. При компиляции и обработке отчета типы данных RDL преобразуются в типы данных CLR. В следующей таблице показаны применяемые преобразования, которые обозначены «По умолчанию».

Тип RDL Типы CLR
Строка По умолчанию: String

Диаграмма, GUID, временной интервал
Логический По умолчанию: Boolean
Целое По умолчанию: Int64

Int16, Int32, Uint16, Uint64, Byte, Sbyte
Дата/время По умолчанию: DateTime

DateTimeOffset
Тип с плавающей запятой По умолчанию: Double

Одинарный, десятичный
Binary По умолчанию: Byte[]
Вариант Любое из вышеприведенного, кроме Byte[]
VariantArray Массив данных типа Variant
Сериализуемый Тип Variant или типы, помеченные атрибутом Serializable или реализующие интерфейс ISerializable.

Общие сведения о типах данных и о записи выражений

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

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

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

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

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

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

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

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

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

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

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

  • Изменение запроса набора данных, чтобы добавить новое поле запроса с преобразованными данными. В реляционных и многомерных источниках данных при этом способе в операции преобразования используются ресурсы источника данных.

  • Создание вычисляемого поля на основе существующего поля набора данных отчета с помощью выражения, преобразующего все данные одного столбца результирующего набора в данные нового столбца с другим типом данных. Например, следующее выражение преобразует поле Year из целочисленного значения в строковое: =CStr(Fields!Year.Value). Дополнительные сведения см. в разделе Добавление, изменение и обновление полей в области данных отчета (построитель отчетов и службы SSRS).

  • Проверка наличия метаданных в используемом модуле обработки данных с целью получения предварительно отформатированных данных. Например, MDX-запрос SQL Server Analysis Services содержит расширенное свойство FORMATTED_VALUE для значений куба, которые уже были отформатированы при обработке куба. Дополнительные сведения см. в статье Расширенные свойства поля базы данных Analysis Services (SSRS).

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

Параметры отчета должны иметь один из пяти типов данных: Boolean, DateTime, Integer, Float или Text (также известный как String). Если запрос набора данных включает параметры запроса, автоматически создаются параметры отчета, которые связываются с параметрами запроса. Типом данных по умолчанию для параметра отчета является String. Чтобы изменить тип данных по умолчанию параметра отчета, выберите правильное значение из раскрывающегося списка типов данных на странице "Общие" диалогового окна "Свойства параметра отчета".

Примечание.

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

Написание выражений, преобразующих типы данных или получающих части данных

При объединении текста и полей набора данных с помощью оператора объединения (&) среда CLR обычно предоставляет форматы по умолчанию. Если нужно явно преобразовать поле набора данных или параметр в конкретный тип данных, для преобразования данных необходимо использовать метод CLR или функцию библиотеки времени выполнения Visual Basic.

В следующей таблице приводятся примеры преобразования типов данных.

Тип преобразования Пример
Преобразование DateTime в строку =CStr(Fields!Date.Value)
Строка в DateTime =DateTime.Parse(Fields!DateTimeinStringFormat.Value)
Преобразование строки в 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.

Объединение строки и типа данных DateTimeOffset среды CLR

Для большинства типов данных среда CLR обеспечивает преобразования по умолчанию для объединения значений, имеющих разный тип данных, в одну строку с помощью оператора &. Например, следующее выражение объединяет текст "The date and time are: " с полем набора данных StartDate, которое является значением DateTime : ="The date and time are: " & Fields!StartDate.Value.

Для некоторых типов данных может понадобиться включение функции ToString. Например, в следующем выражении показан тот же пример с использованием типа данных CLR DateTimeOffset, который включает дату, время и смещение часового пояса относительно часового пояса времени в формате UTC: ="The time is: " & Fields!StartDate.Value.ToString().

Преобразование строкового типа данных в тип данных DateTime среды CLR

Если модуль обработки данных не поддерживает все определенные в источнике данных типы данных, данные могут быть получены в виде текста. Например, значение с типом данных datetimeoffset(7) можно получить как значение String. В Перте, Австралия, строковое значение 1 июля 2008 г. в 6:05:07.99999999 A.M. будет выглядеть следующим образом:

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.

  • Добавьте в набор данных отчёта новое вычисляемое поле, использующее выражение для извлечения частей строки. Дополнительные сведения см. в разделе Добавление, изменение и обновление полей в области данных отчета (построитель отчетов и службы 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 см. в разделах Типы данных (Transact-SQL) и Типы данных и функции даты и времени (Transact-SQL).

Дополнительные сведения о типах данных SQL Server Analysis Services см. в разделе Типы данных в службах Analysis Services.