2015-11-16 1 views
0

У меня довольно неудобная настройка в SSRS с настраиваемыми параметрами группировки (например, офисом, продавцом, покупателем и т. Д.). Например, пользователь может группировать элементы по годам, а затем по месяцам. Результаты отчета затем:Сортировка по месячному значению в ssrs

Gr1. | Gr2. 
2015 | April 
2015 | August 
2015 | February 
2015 | January 
and so on... 

Так как столбцы в алфавитном порядке, который работает отлично подходит для всех вариантов пользовательского группирования, но месяцев - которые должны иметь свою собственную логику для сортировки. Как я мог это реализовать?

+0

Как эти данные поступают из базы данных - вы просто возвращаете строку имени или собственно дату? – Jonnus

+0

Я возвращаю название месяца, так как это то, что данные сгруппированы по – Bartosz

+0

Как указано ниже, независимо от того, какая информация сгруппирована, было бы лучше всего вернуть значение, сохраненное в качестве даты для этого поля – Jonnus

ответ

1

Вы должны попытаться вернуть всю информацию из базы данных в своем родном виде. Вместо того, чтобы возвращать названия месяца как «Январь», «Февраль» и т. Д., Было бы лучше, например, вернуть 20150101, 20150201 (или любой формат даты по умолчанию для вашей среды)

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

=MonthName(Month(Fields!myDate.Value),False) 

Чтобы вернуть название месяца для любой даты. Затем SSRS узнает, когда указывается, как установить даты в правильном порядке.

АЛЬТЕРНАТИВА

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

Предположив Dataset

Month  Val 
---------- --- 
January  1 
February 2 
March  3 

При сортировке по месяцам возвращает следующие

enter image description here

Вместо этого вставьте следующий код в отчете (щелкните правой кнопкой мыши область отчета, выберите Свойства отчета, затем код)

public function MonthNumber(MonthName AS String) AS Integer 
    Dim MonthNum AS Integer = 0 

    Select Case MonthName  
     Case "January" 
      MonthNum = 1 
     Case "February" 
      MonthNum = 2 
     Case "March" 
      MonthNum = 3 
    End Select 

    return MonthNum 
end function 

Затем установите свойства группы, чтобы быть отсортирован по

=Code.MonthNumber(Fields!Month.Value) 

дает следующий результат

enter image description here

Это происходит потому, что при заказе набора, вместо того, чтобы просто смотреть на имя отчета, она проходит имя через Кодекс, которое эффективно сообщает отчет, номер которого присваивается каждому месяцу. Затем оно упорядочивается по этому значению вместо имени месяца.

Надеюсь, это полезно для вас. Если у вас есть еще один вопрос, пожалуйста, дайте мне знать.

+0

Это не совсем ответ, но толкнул меня в правильном направлении.В конце концов я использовал вашу вторую концепцию и написал внешнюю функцию для последующей обработки некоторых параметров, используемых для сортировки, где имена месяцев заменяются буквами (Jan -> 'a', Feb -> 'b' и т. Д.). Таким образом, типы данных для сортировки между различными свойствами группировки и месяцами отображаются в соответствующем порядке. Благодарю. – Bartosz