【发布时间】:2015-09-23 15:37:54
【问题描述】:
所以我在 SSRS 中有一个包含三列的简单表。第一个是代理(调用处理程序的名称),第二个由一个参数填充,该参数控制 6 个可能的列中的哪一个显示数据。构成数据集的查询如下;
SELECT CAST(Day AS DATE) AS 'Day'
, ISNULL(externalID, '**No Agent**') AS 'Agent'
, CAST((TalkTime + BreakTime + BusyonDNTime + BusyMiscTime + ConsultationTime + RingTime + Default_ACW + Wrap) / NULLIF ([Calls Ans], 0) AS DECIMAL(18, 2)) AS 'AHT'
, CAST([Comfort Break] / NULLIF (Logged, 0) AS DECIMAL(18, 6)) AS 'ComfortBreak'
, CAST([Designated Other] / NULLIF (Logged, 0) AS DECIMAL(18, 6)) AS 'DesignatedOther'
, CAST(Reflection / NULLIF (Logged, 0) AS DECIMAL(18, 6)) AS 'Reflection'
, CAST([System Failure] / NULLIF (Logged, 0) AS DECIMAL(18, 6)) AS 'SystemFailure'
, CAST(Skillset_Default_Activity_Code / NULLIF (Logged, 0) AS DECIMAL(18,6)) AS 'Skillset_Default_Activity_Code'
, [Short Calls Ans] AS 'ShortCallsAns'
, CASE WHEN CAST(([TalkTime] + [BreakTime] + [BusyonDNTime] + [BusyMiscTime] + [ConsultationTime] + [RingTime] + [Default_ACW] + [Wrap]) / NULLIF ([Calls Ans],0) AS DECIMAL(18, 2)) IS NULL
AND CAST([Comfort Break] / NULLIF ([Logged], 0) AS DECIMAL(18, 6)) IS NULL
AND CAST([Designated Other] / NULLIF ([Logged], 0) AS DECIMAL(18, 6)) IS NULL
AND CAST([Reflection] / NULLIF ([Logged], 0) AS DECIMAL(18, 6)) IS NULL AND CAST([System Failure] / NULLIF ([Logged], 0) AS DECIMAL(18, 6)) IS NULL
AND CAST([Skillset_Default_Activity_Code] / NULLIF ([Logged], 0) AS DECIMAL(18, 6)) IS NULL AND [Short Calls Ans] IS NULL
THEN 0
ELSE 1
END AS DataFlag
FROM PulseReportData
WHERE (CAST(Day AS DATE) = @ActivityDate) AND
((CASE WHEN CAST(([TalkTime] + [BreakTime] + [BusyonDNTime] + [BusyMiscTime] + [ConsultationTime] + [RingTime] + [Default_ACW] + [Wrap]) / NULLIF ([Calls Ans],0) AS DECIMAL(18, 2)) IS NULL
AND CAST([Comfort Break] / NULLIF ([Logged], 0) AS DECIMAL(18, 6)) IS NULL
AND CAST([Designated Other] / NULLIF ([Logged], 0) AS DECIMAL(18, 6)) IS NULL
AND CAST([Reflection] / NULLIF ([Logged], 0) AS DECIMAL(18, 6)) IS NULL AND CAST([System Failure] / NULLIF ([Logged], 0) AS DECIMAL(18, 6)) IS NULL
AND CAST([Skillset_Default_Activity_Code] / NULLIF ([Logged], 0) AS DECIMAL(18, 6)) IS NULL AND [Short Calls Ans] IS NULL
THEN 0
ELSE 1
END) = 1)
报告有一个名为@Field 的参数,其值是上述列的列名(日期和代理除外)。报告上的第 2 列数据文本框包含以下表达式;
=Fields(Parameters!Field.Value).Value
因此,在报告运行之前从下拉列表中选择的列名称将显示在第二列中。
我不知道如何开始工作是这样的;
我需要添加一个参数,让用户选择 5、10、20 或 50 的排名编号,根据返回的数字显示前 5、10、20 或 50 名代理列被选中。我尝试将以下内容添加到数据集查询中;
ROW_NUMBER() OVER (partition BY @Field ORDER BY @Field DESC) AS rn
然后将 rn 列添加为报告中的第三列。然后,我对 tablix 应用了一个过滤器,以说明 rn 列的位置
发生的情况是报告中显示了代理和值列表,第三列中显示的排名值的正确数量是从@rank 下拉参数中选择的,但主列的值未在降序。他们似乎完全是随机的。因此,就像我添加到数据集查询的 ROW_NUMBER 列对参数内的列不感兴趣一样。我只是想不出一种方法来根据前 5、10、20 或 50 名恢复这些排名值:-S
【问题讨论】:
-
你的主要专栏
Agent是哪个?还是 AHT、ConfortBreak 等? -
唯一固定的列是
Agent,其余的都是动态的。有点像数据透视表样式选择,但使用 SSRS 下拉参数。我需要能够对这些列中的任何一个进行排序和排名;ComfortBreak,DesignatedOther,Reflection,SystemFailure&Skillset_Default_Activity_Code在运行中。 -
我试图理解你所说的
but the values of the main column were NOT ranked in a descending order是什么意思。
标签: sql-server reporting-services parameters ssrs-2008-r2 ranking