SSRS:基于where条件的新计算字段

时间:2014-10-29 08:28:45

标签: reporting-services ssrs-2008 ssrs-2008-r2

我是SSRS报道的新手,我需要帮助...

我有一个包含“Process”,“Level”和“Workweek”字段的数据集

Process Level  WW
------- -----  --
Test    Lvl_0   3
Test    Lvl_1  28
Test    Lvl_2  48
Samp    Lvl_0  10
Samp    Lvl_1  39
Samp    Lvl_2  51

我现在想要的是创建两个名为 Start_WW Pro_Start 的计算字段,其中包含来自 WW 字段的值。

Lvl_0的WW被认为是Process_Start。

逻辑就像

Process Level  WW Start_WW Pro_Start
------- -----  -- -------- ---------
Test    Lvl_0   3    0       3
Test    Lvl_1  28    3       3
Test    Lvl_2  48   28       3
Samp    Lvl_0  10    0      10
Samp    Lvl_1  39   10      10
Samp    Lvl_2  51   39      10

我知道它类似于SQL

  

更新表SET Start_WW =(从表中选择WW,其中Level ='Lvl_0'),其中Level ='Lvl_1'

     

更新表SET Proc_Start =(从表中选择WW,其中Level ='Lvl_0')

我不确定如何为它编写表达式。请帮助我。

先谢谢!!

1 个答案:

答案 0 :(得分:2)

如果Start_WW只是之前的WW,那么您甚至不需要计算字段;您可以在表格的单元格中使用Previous()函数:

=IIF(Fields!Process.Value = Previous(Fields!Process.Value), Previous(Fields!WW.Value), 0)

对于Pro_Start,您可以将其添加到SQL:

SELECT MyTable.Process, MyTable.Level, MyTable.WW, Start.Pro_Start 
FROM MyTable 
INNER JOIN (
    SELECT Process, Level, MIN(WW) AS Pro_Start 
    FROM MyTable 
    GROUP BY Process, Level
) Start ON MyTable.Process = Start.Process AND MyTable.Level = Start.Level

由于无法访问该查询,您可以通过Lookup()获取Pro_Start

=Lookup(Fields!Process.Value, Fields!Process.Value, Fields!WW.Value, "MyDataset")

Lookup()将返回Process的第一个实例,并为您提供该行的WW