我想基于报表用户的输入参数创建动态表。选择ProfitCenterID
时,我希望将此ProfitCenterID
显示为1级,并将所有孩子ProfitCenterID
显示为2级至xx级。
当参数/ ProfitCenterID
设置为“业务部门A”时,我需要一个表,其中包含此层次结构中的所有ProfitcenterID
。下面有一个示例显示所需的结果。
我的ProfitCenterID
的结构如下面的示例数据所示。我的实际生产数据直到19级,用户可以从ProfitCenterID
列中选择输入值参数。
我的报告工具是Tableau,我使用带有参数的自定义SQL查询连接到MS SQL Server数据库。
何时:
ProfitcenterID_Level
是 4 (对于“业务部门A”而言),WHERE子句必须使用列ProfitCenterID_Level_04
ProfitcenterID_Level
是 5 (与“帐户1”相同),WHERE子句必须使用列ProfitCenterID_Level_05
ProfitcenterID_Level
为 6 (与“ D-123400”相同),WHERE子句必须使用列ProfitCenterID_Level_06
我不知道如何创建基于ProfitcenterID_Level
中的值的ProfitcenterID
查找。
以下示例数据和所需结果示例。
样本数据:
CREATE TABLE [Sample]
(
ProfitCenterID nchar(30)
,ProfitCenterID_Level smallint
,ProfitCenterID_Level_01 nchar(30)
,ProfitCenterID_Level_02 nchar(30)
,ProfitCenterID_Level_03 nchar(30)
,ProfitCenterID_Level_04 nchar(30)
,ProfitCenterID_Level_05 nchar(30)
,ProfitCenterID_Level_06 nchar(30)
,ProfitCenterID_Level_07 nchar(30)
)
INSERT INTO [Sample]
VALUES ('Business Unit A','4','Global Enterprise','Europe','Denmark','Business Unit A','','',''),
('Account 1','5','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','',''),
('D-123400','6','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123400',''),
('D-123410','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123460','D-123410'),
('D-123420','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123460','D-123420'),
('D-123430','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123460','D-123430'),
('D-123440','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123460','D-123440'),
('D-123450','6','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123450',''),
('D-123460','6','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123460',''),
('D-123465','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123465'),
('D-123470','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123460','D-123470'),
('D-123480','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123460','D-123480'),
('D-123483','6','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123483',''),
('D-123485','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123485'),
('D-123486','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123486'),
('D-123487','6','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123487',''),
('D-123488','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123488'),
('D-123489','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123489'),
('D-123490','6','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490',''),
('D-123491','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123491'),
('D-123492','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123492'),
('D-123493','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123493'),
('D-123494','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123494'),
('D-123495','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123495'),
('D-123496','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123496'),
('D-123497','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123497'),
('D-123498','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123498'),
('D-123499','7','Global Enterprise','Europe','Denmark','Business Unit A','Account 1 ','D-123490','D-123499')
所需结果(当选择“业务部门A”- 4级时):
SELECT [ProfitCenterID]
,[ProfitCenterID_Level]
-- ,[ProfitCenterID_Level_01]
-- ,[ProfitCenterID_Level_02]
-- ,[ProfitCenterID_Level_03]
,[ProfitCenterID_Level_04] AS 'Level 01'
,[ProfitCenterID_Level_05] AS 'Level 02'
,[ProfitCenterID_Level_06] AS 'Level 03'
,[ProfitCenterID_Level_07] AS 'Level 04'
FROM [MyDatabase].[dbo].[Sample]
WHERE ProfitCenterID_Level_04 = 'Business Unit A'
/****** 'Business Unit A' is the input parameter from my report user ******/
所需结果(在选择“帐户1”- 5级时):
SELECT [ProfitCenterID]
,[ProfitCenterID_Level]
-- ,[ProfitCenterID_Level_01]
-- ,[ProfitCenterID_Level_02]
-- ,[ProfitCenterID_Level_03]
-- ,[ProfitCenterID_Level_04]
,[ProfitCenterID_Level_05] AS 'Level 01'
,[ProfitCenterID_Level_06] AS 'Level 02'
,[ProfitCenterID_Level_07] AS 'Level 03'
FROM [MyDatabase].[dbo].[Sample]
WHERE ProfitCenterID_Level_05 = 'Account 1'
/****** 'Account 1' is the input parameter from my report user ******/
答案 0 :(得分:0)
我终于设法解决了我的问题。感谢大家的投入。这是我解决的方法。
SELECT S.ProfitCenterID, S.ProfitCenterID_Level
,CASE
WHEN L.ProfitCenterID_Level = 1 THEN S.ProfitCenterID_Level_01
WHEN L.ProfitCenterID_Level = 2 THEN S.ProfitCenterID_Level_02
WHEN L.ProfitCenterID_Level = 3 THEN S.ProfitCenterID_Level_03
WHEN L.ProfitCenterID_Level = 4 THEN S.ProfitCenterID_Level_04
WHEN L.ProfitCenterID_Level = 5 THEN S.ProfitCenterID_Level_05
WHEN L.ProfitCenterID_Level = 6 THEN S.ProfitCenterID_Level_06
WHEN L.ProfitCenterID_Level = 7 THEN S.ProfitCenterID_Level_07
END AS [Level 1]
,CASE
WHEN L.ProfitCenterID_Level = 1 THEN S.ProfitCenterID_Level_02
WHEN L.ProfitCenterID_Level = 2 THEN S.ProfitCenterID_Level_03
WHEN L.ProfitCenterID_Level = 3 THEN S.ProfitCenterID_Level_04
WHEN L.ProfitCenterID_Level = 4 THEN S.ProfitCenterID_Level_05
WHEN L.ProfitCenterID_Level = 5 THEN S.ProfitCenterID_Level_06
WHEN L.ProfitCenterID_Level = 6 THEN S.ProfitCenterID_Level_07
-- WHEN L.ProfitCenterID_Level = 7 THEN S.ProfitCenterID_Level_08
END AS [Level 2]
,CASE
WHEN L.ProfitCenterID_Level = 1 THEN S.ProfitCenterID_Level_03
WHEN L.ProfitCenterID_Level = 2 THEN S.ProfitCenterID_Level_04
WHEN L.ProfitCenterID_Level = 3 THEN S.ProfitCenterID_Level_05
WHEN L.ProfitCenterID_Level = 4 THEN S.ProfitCenterID_Level_06
WHEN L.ProfitCenterID_Level = 5 THEN S.ProfitCenterID_Level_07
--WHEN L.ProfitCenterID_Level = 6 THEN S.ProfitCenterID_Level_08
--WHEN L.ProfitCenterID_Level = 7 THEN S.ProfitCenterID_Level_09
END AS [Level 3]
,CASE
WHEN L.ProfitCenterID_Level = 1 THEN S.ProfitCenterID_Level_04
WHEN L.ProfitCenterID_Level = 2 THEN S.ProfitCenterID_Level_05
WHEN L.ProfitCenterID_Level = 3 THEN S.ProfitCenterID_Level_06
WHEN L.ProfitCenterID_Level = 4 THEN S.ProfitCenterID_Level_07
--WHEN L.ProfitCenterID_Level = 5 THEN S.ProfitCenterID_Level_08
--WHEN L.ProfitCenterID_Level = 6 THEN S.ProfitCenterID_Level_09
--WHEN L.ProfitCenterID_Level = 7 THEN S.ProfitCenterID_Level_10
END AS [Level 4]
FROM [MyDatabase].[dbo].[Sample] AS S
JOIN [MyDatabase].[dbo].[Sample] AS L
ON 'Business Unit A' = L.ProfitCenterID
WHERE CASE
WHEN L.ProfitCenterID_Level = 1 THEN S.ProfitCenterID_Level_01
WHEN L.ProfitCenterID_Level = 2 THEN S.ProfitCenterID_Level_02
WHEN L.ProfitCenterID_Level = 3 THEN S.ProfitCenterID_Level_03
WHEN L.ProfitCenterID_Level = 4 THEN S.ProfitCenterID_Level_04
WHEN L.ProfitCenterID_Level = 5 THEN S.ProfitCenterID_Level_05
WHEN L.ProfitCenterID_Level = 6 THEN S.ProfitCenterID_Level_06
WHEN L.ProfitCenterID_Level = 7 THEN S.ProfitCenterID_Level_07
END = 'Business Unit A'
答案 1 :(得分:0)
我能够使用示例重新创建报告,并且能够实现所需的功能。
如果需要,我可以共享工作簿