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 和绝对字符串值使用同一列。因此 CASE
在 JOIN
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 对列进行排序。
希望已经足够清楚了。
我有一个矩阵 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 和绝对字符串值使用同一列。因此 CASE
在 JOIN
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 对列进行排序。
希望已经足够清楚了。