2014-10-29 45 views
0

我是新來的SSRS報告,我需要幫助...SSRS:根據新的計算字段where條件

我有場「過程」,「級別」和「工作周」的數據集

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_WWPro_StartWW字段的值。

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'),其中等級=」 Lvl_1'

更新表SET Proc_Start =(從表中選擇WW其中level = 'Lvl_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()將返回的第一個實例,併爲您提供該行的WW

+0

我嘗試使用'Previous()',但我得到其他進程的數據作爲我的下一個不正確的開始。 – damseldeebi 2014-10-29 09:13:11

+0

'case fields!ww.process when previous(fields!ww.process)then Previous(fields!ww.value)else value' – pancho018 2014-10-29 10:39:33

+0

嘗試更新的表達式 – 2014-10-29 10:56:01