2015-11-20 36 views
-1
  • 在這裏即時通訊嘗試做切換,然後如果在其他地方。我不知道我錯過了什麼,但這不起作用。
  • 對於開關中的第一個條件,'WEEKLY',WW2和WW1是數字形式,但是是文本/字符串數據類型。因此在將它們轉換爲整數/數字數據類型之後,這些將在iff操作中使用。
  • 第二個條件在開關中,'MONTHLY',WW2和WW1是月份名稱。所以目標是從月份名稱中獲取月份編號。之後,WW1,WW2用於iff操作。

=SWITCH(Parameters!date_range_type.Value = "WEEKLY", IIF((cInt(Parameters!WW2.Value) - cInt(Parameters!WW1.Value)) > 10, Parameters!WW1.Value,IIF(cInt(Parameters!WW2.Value) < 11,1,cInt(Parameters!WW2.Value) - 10)), Parameters!date_range_type.Value = "MONTHLY", IIF((cInt(MONTH(datepart("YYYY",today())& "-" & Parameters!WW2.Value & "-01")) - cInt(MONTH(datepart("YYYY",today())& "-" & Parameters!WW1.Value & "-01"))) > 10, MONTH(datepart("YYYY",today())& "-" & Parameters!WW1.Value & "-01"),IIF(cInt(MONTH(datepart("YYYY",today())& "-" & Parameters!WW2.Value & "-01")) < 11,1,cInt(MONTH(datepart("YYYY",today())& "-" & Parameters!WW2.Value & "-01")) - 10)) )SSRS:如果其他內部開關不工作

如果我在「每週」報告僅意味着犯規需要開關和其他IIF條件,它做工精細。只在'MONTHLY'上運行時也是如此。

編輯

這是怎麼看起來像如果我使用IIF僅..

IIF(Parameters!date_range_type.Value = "MONTHLY",(IIF((cInt(MONTH(datepart("YYYY",today())& "-" & Parameters!WW2.Value & "-01")) - cInt(MONTH(datepart("YYYY",today())& "-" & Parameters!WW1.Value & "-01"))) > 10,MONTH(datepart("YYYY",today())& "-" & Parameters!WW1.Value & "-01"),IIF(cInt(MONTH(datepart("YYYY",today())& "-" & Parameters!WW2.Value & "-01")) < 11,1,cInt(MONTH(datepart("YYYY",today())& "-" & Parameters!WW2.Value & "-01")) - 10))), (IIF(Parameters!date_range_type.Value = "WEEKLY",(IIF((cInt(Parameters!WW2.Value) - cInt(Parameters!WW1.Value)) > 10, Parameters!WW1.Value, IIF(cInt(Parameters!WW2.Value) < 11,1,cInt(Parameters!WW2.Value) - 10))), "0")))

+0

,儘管所有的文字上面目前還不清楚你的期望的輸出是什麼。如果我是正確的,則選擇每週或每月給予您一個星期數字(?)或月份名稱。計算的另一端是什麼? – Jonnus

+0

WW1和WW2都提供有相應的date_range_type列表,無論是當前的每週還是每月。對於每週類型,在進入iif之前的第一個動作是將WW1和WW2轉換爲數字,然後可以對兩個值進行數學運算。而每月,因爲提供的價值是以月份名稱,它必須轉換爲月份數然後轉換爲數字。 – user2300035

+0

上面的表達式會輸出一個數字,表示輸出和WW2值之間的範圍總是大於或等於10,如果不是,則輸出是差值爲10且低於WW2的值。輸出取決於WW1和WW2之間的範圍這意味着WW1和WW2之間的差值。當差值大於10時,輸出將取WW1的值,如果小於11,則輸出固定爲1(因爲輸出和WW2之間的距離需要至少10個,日期範圍有效期只有1個,代表第1周或第1個月) – user2300035

回答

0

最終使用SQL函數的工作。這是與上述SSRS代碼相同的邏輯。

CREATE OR REPLACE FUNCTION ww3_param (ww1 IN NUMBER, ww2 IN NUMBER) RETURN VARCHAR2 IS ret_val VARCHAR2(10); BEGIN IF (ww2 - ww1) > 10 THEN ret_val := to_char(ww1); ELSE IF ww2 < 10 THEN ret_val := '1'; ELSE ret_val := to_char(ww2 - 10);
END IF; END IF;
RETURN ret_val; END;

編輯

這是數據集中查詢:

select case when :date_range_type = 'MONTHLY' then ww3_param(to_char(to_date(:WW1,'MON'),'MM'),to_char(to_date(:WW2,'MON'),'MM')) when :date_range_type = 'WEEKLY' then ww3_param(to_number(:WW1),to_number(:WW2)) end as ww3_param_value from dual

+0

看起來像Oracle語法?你能確認它是Oracle嗎?我會相應地標記你的問題 –

+0

@ Nick.McDermaid是的,它是oracle。 10g版本。謝謝。 – user2300035