Изменение размера таблиц в зависимости от количества записей в SSRS

У меня есть две таблицы с данными, как показано ниже:

            SELECT *
              FROM [dbo].[TestTable_1]
            ID  Value
            ----------
            1   gjha      
            2   dc        
            3   d         
            4   ds        
            5   dg        
            6   hn    

2-я таблица:

            SELECT *
              FROM [dbo].[TestTable_2]
            Value
            -----
            jklsa
            dfv
            b
            grt
            trj
            h
            muik
            rg
            kuu
            wd
            gb
            nm
            wef

Я получаю данные из отчета SSRS, как показано ниже:
 введите описание изображения здесь

Вопрос такой:

Как я могу сохранить размер стола таким же? То есть, если небольшая таблица в отчете SSRS имеет 6 записей (как в данном случае), для большей таблицы следует отрегулировать такой же размер, как и для малых, а дополнительные (/ более) записи, поступающие в большую таблицу, должны сдвинуться вправо.

Вот ожидаемый результат SSRS

            Value           Value
            --------  -----------------
            gjha      jklsa |muik | wef
            dc        dfv   |rg   |
            d         b     |kuu  |
            ds        grt   |wd   |
            dg        trj   |gb   |
            hn        h     |nm   |

Примечание. Приведенные выше сведения являются лишь примером, однако количество записей действительно динамическое.


person AskMe    schedule 27.05.2019    source источник
comment
что, если обе выбранные таблицы длинные? Но один просто длиннее другого!   -  person Harry    schedule 27.05.2019


Ответы (2)


Это не полный ответ, так как это просто то, что пришло в голову и полностью не проверено.

Первым делом нужно поискать в SO способы создания многоколоночной таблицы, ответов уже достаточно, поэтому я не буду здесь подробно объяснять. Обычно они включают добавление RowNumber к каждой строке, которую затем можно использовать для вычисления строки матрицы и номера столбца матрицы, номер столбца можно использовать в матрице в качестве группы столбцов. (например, если предел строки равен 6, а номер строки равен 14, то последний будет иметь номер строки 2 (14 mod 6 = 2) и номер столбца 3 как Floor (14/6) +1 = 3.

Затем создайте набор данных, который получает максимальное количество строк из каждой из ваших таблиц. Что-то вроде

DECLARE @a int
DECLARE @b int
SELECT @a = COUNT(*) FROM myTableA
SELECT @b = COUNT(*) FROM myTableA

SELECT CASE WHEN @a<=@b THEN @a ELSE @b END AS maxRows

Теперь у вас есть размер самой маленькой таблицы, вы можете передать его в качестве параметра процедуре, которая получает фактические данные из двух таблиц (это будет 6 в нашем примере выше).

person Alan Schofield    schedule 27.05.2019
comment
Не могли бы вы предложить какую-либо ссылку или учебное пособие для ссылки? Примечание: мой набор данных отличается, и на самом деле есть 3 столбца, эти 3 столбца поступают из 3 разных наборов данных. - person AskMe; 28.05.2019

Я только что ответил на аналогичный вопрос здесь: https://stackoverflow.com/a/56350614/2033717

Вы можете адаптировать это решение к своей ситуации, заменив 3 в выражениях на:

=Floor(Count(Fields!ColumnName.Value, "Dataset1") / Count(Fields!ColumnName.Value, "Dataset1"))

Другими словами, вы определяете, сколько столбцов вам нужно. А затем группируем каждую строку набора данных в строки и столбцы матрицы. Это сработает, если вы знаете, что вторая таблица может быть больше первой, но я не уверен, будет ли она работать в обоих направлениях без каких-либо дополнительных условий для выражений.

person StevenWhite    schedule 28.05.2019
comment
@AskMe у тебя была возможность попробовать это? Если это сработало, отметьте это как ответ. - person StevenWhite; 04.06.2019