SSRS - 仅查找矩阵中的某些列

SSRS - Lookup only on certain columns in a matrix

我有一个矩阵 table,其中包含一个列组“应用程序问题”,假设这些在 table 1 中。一些问题具有唯一的字符串值,例如:姓名、身份证号码、电子邮件地址。但是其他人有一个整数值,该整数值与单独查找的实际值相关 table (table 2),例如,“性别”列的值是 1、2、3,对于男性,女性,其他。查找函数中有没有一种方法可以隔离只有整数值的列,或者忽略具有唯一字符串值的其他列?

表 1

NAME       ATTRIBUTE_id     ATTRIBUTE
-----------------------------------------
James      5                  1
James      6                  james@email.com
James      7                  8

表 2

Lookup_id       ATTRIBUTE_id     Description
-----------------------------------------
1                    5               Male
2                    5               Female
3                    5               Other
8                    7               New York
9                    7               Los Angeles                    

输出

NAME     |     Email      |    Gender     |     City
-------------------------------------------------------
James     james@email.com       Male          New York

希望这是有道理的!

谢谢。

我认为在您的数据集查询中这样做会更容易。

下面我重新创建了您的示例数据并添加了一个额外的人以确保它按预期工作。

DECLARE @t TABLE (Name varchar(10), AttributeID INT, AttributeMemberID varchar(50))
INSERT INTO @t  VALUES 
('Mary', 5, '2'),
('Mary', 6, 'Mary@email.com'),
('James', 5, '1'),
('James', 6, 'james@email.com'),
('James', 7, '8')

DECLARE @AttributeMembers TABLE (AttributeMemberID INT, AttributeID int, Description varchar(20))
INSERT INTO @AttributeMembers  VALUES 
(1, 5, 'Male'),
(2, 5, 'Female'),
(3, 5, 'Other'),
(8, 7, 'New York'),
(9, 7, 'Los Angeles')

我还添加了一个新的 table 来描述每个属性是什么。我们将使用此输出作为最终 SSRS 矩阵中的 headers 列。

DECLARE @Attributes TABLE(AttributeID int, Caption varchar(50))
INSERT INTO @Attributes VALUES 
(5, 'Gender'),
(6, 'Email'),
(7, 'City')

最后,我们将所有三个连接在一起,并获得了一个相当规范化的数据视图。连接有点混乱,因为您当前的 table 对基于整数的 lookups/joins 和绝对字符串值使用同一列。因此 CASEJOIN

SELECT 
        t.Name,
        a.Caption,
        ISNULL(am.[Description], t.AttributeMemberID) as Label
    FROM @t t 
        JOIN @Attributes a on t.AttributeID = a.AttributeID
        LEFT JOIN @AttributeMembers am 
            on t.AttributeID = am.AttributeID 
            and 
                CAST(CASE WHEN ISNUMERIC(t.AttributeMemberID) = 0 THEN 0 ELSE t.AttributeMemberID END as int)
                = am.AttributeMemberID
    ORDER BY Name, Caption, Label

这为我们提供了以下输出...

如您所见,这将很容易放入 SSRS 中的 Matrix 控件中。

行按Name, Column Group by 标题and data cell would be标签`分组。

如果要确保列的顺序,可以扩展 Attributes table 以包含 SortOrder 列,将其包含在查询输出中并在SSRS 对列进行排序。

希望已经足够清楚了。