Полезные команды Report_Expression для SSRS отчета
Когда мы создаем SSRS отчет, то часто сталкиваемся с различными требованиями для отображения данных. Используя Report_Expression, можно решить достаточно много простых и сложных задач по выводу данных в нужном виде. Вот несколько команд, которые помогут в создании SSRS отчетов.
Формат вывода в ячейки
Не всегда вывод по умолчанию совпадает с ожиданием заказчика. Этот параметр сделает формат вывода в соответствии с общими настройками, установленными в системе. Для вывода числовых значений (обычно сумм) в свойствах поля Format ставим:
=Microsoft.Dynamics.Framework.Reports.BuiltInMethods.GetExtendedDataTypeFormat("AmountMST", Parameters!AX_RenderingCulture.Value)
Команды для Expression
Следующие команды можно писать для поля в Expression:
Вывод наименования компании – обычно используется в заголовке отчета. Информация так же берется из настроек системы:
=Microsoft.Dynamics.Framework.Reports.DataMethodUtility.GetFullCompanyNameForUser
(Parameters!AX_CompanyName.Value, Parameters!AX_UserContext.Value)
Иногда возникают ситуации, когда нужно в одной и той же ячейке выводить разную информацию или вообще не выводить при определенных условиях. В этом помогут условные операторы в отчете
= iif(Parameters!DiscrepancyReport.Value, Labels!@GLS110972,"")
=Switch(Parameters!TaxVatRegister_TaxDirection.Value="IncomingTax", Labels!@GLS109154,
Parameters!TaxVatRegister_TaxDirection.Value="OutgoingTax", Labels!@GLS109147,
Parameters!TaxVatRegister_TaxDirection.Value="UseTax", Labels!@ GLS109137)
Также можно использовать обычные математические выражения и команды подсчета суммы:
=Sum(Fields!TaxAmount.Value + Fields!TaxBaseAmount.Value)
=Fields!TaxAmount.Value + Fields!TaxBaseAmount.Value
Форматированный вывод строки помогает составить и вывести строку. Отличие от привычного форматированного вывода строки в том, что вместо %1 %2 необходимо использовать {0} {1}. Обратите внимание что нумерация начинается с 0:
=System.String.Format("{0} - {1}", Labels!@SYS336072, Labels!@SYS336073)
Еще одна полезная команда для вывода даты в отчет позволяет выводить значение Datetime в различном формате. Формат можно задавать, например, такой “dd.mm.yyyy”.
=Microsoft.Dynamics.Framework.Reports.DataMethodUtility.ConvertUtcToAxUserTimeZoneForUser
(Parameters!AX_CompanyName.Value, Parameters!AX_UserContext.Value, System.DateTime.UtcNow, "d", Parameters!AX_RenderingCulture.Value) & vbCrLf & Microsoft.Dynamics.Framework.Reports.DataMethodUtility.ConvertUtcToAxUserTimeZoneForUser(Parameters!AX_CompanyName.Value, Parameters!AX_UserContext.Value, System.DateTime.UtcNow, "t", Parameters!AX_RenderingCulture.Value)
VB код в отчете
В SSRS отчетах можно писать код на VB и использовать его в отчете. Например, для подсчета суммы строк. Для написания кода нужно открыть свойства отчета в дизайне, перейти в Code и написать сам код на VB.
Написанные функции в разделе Code можно использовать в ячейках отчета.
Используйте Code.название_функции(параметры):
=iif(Code.getCntOnPage = 0, Code.setCntOnPage(CountRows("TmpSalesReportForExample")), Code.setAmountLastPage(Fields!Amount.Value, Fields!IssueAmountCur.Value, RowNumber(Nothing)))
Для подсчета суммы строк и вывода результата в конце каждой страницы и общий итог в конце отчета добавим дополнительную колонку в отчет и сделаем ее скрытой. В этой колонке будем использовать написанные функции подсчета.
В начале объявим переменные
Dim private maxCntRowsOnPage = 18
Dim public revenueAmountLastPage as Decimal
Dim public issueAmountLastPage as Decimal
Dim public cntRowsForLastPage as Integer
И опишем сами функции подсчета
Public Function setCntOnPage(ByVal _cntRows AS Integer) AS Integer
cntRowsForLastPage = Int(_cntRows / maxCntRowsOnPage ) * maxCntRowsOnPage
return cntRowsForLastPage
End Function
Public Function setAmountLastPage(ByVal _revenue As Decimal,
ByVal _issue As Decimal,
ByVal _currentRow As Integer) as Integer
If _currentRow > cntRowsForLastPage
revenueAmountLastPage += _revenue
issueAmountLastPage += _issue
End If
return cntRowsForLastPage
End Function
И функцию получения результата
Public Function getCntOnPage()
return cntRowsForLastPage
End Function
Comments
So empty here ... leave a comment!