ssrs фиксированная ширина матрицы - PullRequest
0 голосов
/ 23 ноября 2011

После борьбы с BIDS, чтобы добиться этого, мой вопрос здесь:

В SSRS 2008 я использую матрицу с группой столбцов для выбранных месяцев.Первый столбец - первый выбранный месяц, и через двенадцать месяцев после запуска новой таблицы:

Month | Mar11 May11 Apr11 Jun11 Jul11 Aug11 Sep11 Oct11 Nov11 Dec11 Jan12 Feb12
------+------------------------------------------------------------------------
Cat.1 |   3     4      5    7     8     9     1     3
Cat.2 |   4     2      3    6     1     3     2     5

Month | Mar12 May12 Apr12
------+------------------------------------------------------------------------
Cat.1 |   3     2     1
Cat.2 |   4     1     7

Это дает аккуратную таблицу, и когда таблица "повторяется" (моделируется большой группой строк),таблица аккуратно отображается по всей ширине.Однако при выборе только одного месяца макет слишком узкий и выглядит довольно неубедительным:

Month | Mar
------+----
Cat.1 |  3

Как создать матрицу с фиксированной шириной (а именно с шириной 12 столбцов), независимо от того, каксколько месяцев выбрано?

1 Ответ

0 голосов
/ 31 января 2012

Есть два способа сделать это:

Создать декартову структуру в вашем запросе, используя различные значения группировки строк и столбцов.

SELECT
 C.MonthStarting
,R.Category
,D.InstanceCount

FROM ( -- column values
    SELECT DISTINCT MonthStarting
    FROM Calendar
    WHERE MonthStarting BETWEEN @StartDate AND @EndDate
) AS AS C

JOIN ( -- row values
    SELECT DISTINCT Category
    FROM SomeRelevantTables
) AS R
    ON 1 = 1 -- intentional cartesian product

LEFT JOIN (
    SELECT 
     Category
    ,MonthStarting
    ,COUNT(1) AS InstanceCount

    FROM SomeRelevantTables

    GROUP BY
         Category
        ,MonthStarting
) AS D
    ON C.MonthStarting = D.MonthStarting
    AND R.Category = D.Category

Или вы можете повернуть столбцы взапрос вместо макета и отображения данных в виде таблицы вместо матрицы.

SELECT 
 T.Category
,SUM(CASE WHEN C.RowNumberAsc = 1 THEN 1 END) AS Column1
,SUM(CASE WHEN C.RowNumberAsc = 2 THEN 1 END) AS Column2
,SUM(CASE WHEN C.RowNumberAsc = 3 THEN 1 END) AS Column3
,SUM(CASE WHEN C.RowNumberAsc = 4 THEN 1 END) AS Column4

FROM SomeRelevantTables AS T

JOIN (
    SELECT
     C.*
    ,ROW_NUMBER()OVER(PARTITION BY MonthStarting) AS RowNumberAsc

    FROM (
        SELECT DISTINCT MonthStarting
        FROM Calendar
        WHERE MonthStarting BETWEEN @StartDate AND @EndDate
    ) AS C
) AS C
    ON T.MonthStarting = C.MonthStarting

GROUP BY
    T.Category
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...