Ступенчатый стол не сортируется
Я пытаюсь создать пошаговый отчет с помощью построителя отчетов SQL 3.0. Пошаговый отчет содержит группы / устройства / пользователей вместе с соответствующими итогами для каждой группы / устройства / пользователя.
Я хочу, чтобы весь отчет был отсортирован по этим показателям вместе с каждым отдельным этапом, отсортированным таким же образом.
В настоящее время пользователи сортируются по общему количеству, но не по устройствам или группам.
Есть ли способ отсортировать другие шаги?
2 ответа
Вы можете попробовать перейти к области групп строк / столбцов... затем для каждой имеющейся группы дважды щелкните группу, выберите "Сортировка" и затем добавьте столько полей сортировки, сколько вам нужно для информации, содержащейся на уровне этой группы.
Если к данным применены другие виды сортировки... например, к таблице / матрице, иногда SSRS может сбить с толку, поэтому, если мое предложение действительно поможет вам добиться нужного эффекта, но есть некоторые проблемы, попробуйте удалить все другая сортировка, которую вы применили к данным в другом месте отчета, кроме этих групп... И я бы начал с самого внутреннего и потренировался, стараясь не повторять поле, находящееся в данных нижней группы. (если это имеет смысл).
редактировать:
Итак, предположим, у нас есть отчет для офиса ветеринара, который показывает информацию о клиенте, и мы хотим сгруппировать по personID, petID и visitID. Табликс в целом будет отсортирован по имени человека (или по фамилии, затем по имени... или как угодно). Тогда ваша первая группа будет группироваться по personID и будет отсортирована по petName. Вторая, нижняя группа будет группироваться по petID и сортироваться по дате посещения. Третий уровень будет сгруппирован по идентификатору посещения, и... его не нужно сортировать, кроме как по VisitTime, если он не включен в visitDate.
Вы можете просто сделать это в SQL, используя несколько вложенных запросов. Предположим, у вас есть следующие таблицы: Транзакция, Пользователь, Устройство и Группа. Таблица транзакций записывает транзакции пользователя на устройстве и имеет поле Сумма для суммирования. Пользователь принадлежит к группе.
Поэтому вам нужно сложить сумму для пользователя, для групп и для устройств, используемых в группе, что даст вам SQL, который выглядит следующим образом:
SELECT G.Description AS [Group], D.Description AS Device, U.Description AS UserName, MAX(GT.GroupTotal) AS GroupTotal, MAX(GDT.GroupDeviceTotal) AS GroupDeviceTotal, SUM(T.Amount) AS UserTotal
FROM Transaction AS T
INNER JOIN User AS U ON L.UserId = F.UserId
INNER JOIN Group AS G ON G.GroupId = L.GroupId
INNER JOIN Device AS D ON T.DeviceId = L.DeviceId
INNER JOIN
(SELECT GroupId, SUM(Amount) AS GroupTotal
FROM Transaction
INNER JOIN User ON User.UserId = Transaction.UserId
WHERE (Transaction.TxDate >= '2011-01-01')
GROUP BY User.GroupId) AS GT ON GT.GroupId = U.GroupId
INNER JOIN
(SELECT GroupId, DeviceId, SUM(Amount) AS GroupDeviceTotal
FROM Transaction
INNER JOIN User ON User.UserId = Transaction.UserId
WHERE (TxDate >= '2011-01-01')
GROUP BY GroupId, DeviceId) AS GDT ON GDT.GroupId = U.GroupId AND GDT.DeviceId = T.DeviceId
WHERE (T.TxDate >= '2011-01-01')
GROUP BY G.GroupId, D.DeviceId, U.UserId
ORDER BY GroupTotal DESC, GroupDeviceTotal DESC, UserTotal DESC
Обратите внимание, что выражение where, которое вы используете, должно быть одинаковым в основном запросе и каждом вложенном запросе (это бит "WHERE (T.TxDate >= '2011-01-01')").