Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да покажа номер на страница в тялото на отчета на SSRS 2008 R2?

Първо трябва да използвате променливи за отчет: щракнете с десния бутон върху празното място на отчета -> Променливи -> Създайте променлива като PageCount (задайте стойност по подразбиране на 0)

След това във вашия горен или долен колонтитул -> създайте текстово поле и задайте израз ->

=Variables!PageCount.SetValue(Variables!PageCount.Value+1)

Той автоматично ще се увеличава за всяка страница. (ВАЖНО:НЕ го скривайте от горния или долния колонтитул, SetValue НЯМА да работи, ако скриете полето, така че променете шрифта на 1 или текста на бял, направете каквото и да е, просто НЕ го крийте (ще отпечата 'True', тъй като настройката се извърши))

След това можете да използвате:

=Variables!PageCount.Value

в която и да е част от тялото на вашия отчет, за да получите достъп до номера на страницата.

ВАЖНО:Моля, ОБЪРНЕТЕ ВНИМАНИЕ, че се опитах да използвам Globals!PageNumber, за да задам променливата, но в крайна сметка тя НЕ беше достъпна от тялото на отчета. Така че трябва да е нещо, достъпно както от горен/долен колонтитул, ИЛИ от основния текст.

В моя случай трябва да нулирам номера на страницата за всеки екземпляр от моята група. Така че просто задавам тригер в края на групата. (напр. проверявам дали имам връщане на моята обща стойност, защото знам за всеки край на моята група ще има общ дисплей.

Поради във функцията IIF и частта True и False ще бъдат обработени, така че ако поставите сетери в IIF като например по-долу:

=IIF(IsNothing(ReportItems!TotalBox.Value),Variables!PageCount.SetValue(Variables!PageCount.Value+1),Variables!PageCount.SetValue(0))

 ) 

в крайна сметка ще имате стойност 0 през цялото време, тъй като отчетът ще проверява истинската част, след това грешната част, и двата сетера ще бъдат изпълнени (стойността ще бъде зададена два пъти)

така че имаме нужда от 2 полета и нещо като:(Трябва да скриете ненужното поле за вашите условия за проверка)

=IIF(IsNothing(ReportItems!TotalBox.Value),Variables!PageCount.SetValue(Variables!PageCount.Value+1),"")
)

Трябва да скриете това поле, когато NOT IsNothing(ReportItems!TotalBox.Value)

=IIF(NOT IsNothing(ReportItems!TotalBox.Value),Variables!PageCount.SetValue(0),"")
)

Отново трябва да скриете това поле, когато IsNothing(ReportItems!TotalBox.Value)

Разбира се, бихте могли да използвате някакъв друг начин за определяне на края на групов екземпляр, като:направете текстово поле, което съдържа САМО фиксирана стойност в края на вашата групова таблица. и го скрий. когато проверявате тригера, просто направете подобен подход като мен.

Работи добре за всички версии над 2008 R2 (включени).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ако искам да намеря какво препраща към обект в SQL Server, изчерпателно ли е търсенето на syscomments?

  2. Как да вмъкна запис само със стойности по подразбиране?

  3. Създайте двоичен низ от нули с променлива дължина

  4. Лоши навици:Избягване на NULL в SQL Server

  5. низ еквивалент на Sum за конкатенация