2016-04-15 19 views
0

長篇帖子的道歉。SSRS 2012使用開關語句並在組頁腳中使用LookupSet計數

我有一個SSRS 2012報告看2個集,dataSet1的Dataset2
Dataset2可能會返回0,1或2條記錄,所以我使用LookupSet來完成此操作。從返回的記錄中,我需要顯示幾個字段。

該報告按Main_ID分組。在Main_ID的頁腳中,我計算了數據集2中返回的記錄的數量。

=LookupSet(Fields!MainID.Value, Fields!MainID.Value, Fields!Record_Name.Value, "Dataset2").Length 

這工作正常,我得到0,1或2視情況而定。

在Dataset2領域:

HasIP 

將被用來確定哪個記錄陣列我顯示(如我需要測試在Dataset2字段值)。

我想使用switch語句來使用LookupSet數組的長度來返回正確的字段。

  • 如果沒有記錄(陣列的例如長度= 0),則返回 數2
  • 如果有1個記錄(例如陣列的長度= 1),然後返回 Record_Name
  • 如果有2條記錄(例如數組的長度= 2),則檢查字段HasIP的 。
  • 如果HasIP = Yes,則返回該匹配條目的Record_Name
  • 如果HasIP = YesNo,則返回該匹配條目的Record_Name。
  • 如果一切都失敗,返回2號

這是我到的時刻。

=Switch(
'if no returns returned, display the numeral 2 
LookupSet(Fields!Main_ID.Value, Fields!Main_ID.Value, Fields!Record_Name.Value, "Dataset2").Length=0, 2, 


'if one return returned, then display Record Name 
LookupSet(Fields!Main_ID.Value, Fields!Main_ID.Value, Fields!Record_Name.Value, "Dataset2").Length=1, 
LookUp(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Record_Name.Value,"Dataset2"), 


'if two records returned, check the HasIP field. If HasIP = YesYes, then use this combination first. 
LookupSet(Fields!Main_ID.Value, Fields!Main_ID.Value, Fields!Record_Name.Value, "Dataset2").Length=2 AND 
    LookUpSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!HasIP.Value,"Dataset2")(0)="YesYes", 
LookUpSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Record_Name.Value,"Dataset2")(0), 

LookupSet(Fields!Main_ID.Value, Fields!Main_ID.Value, Fields!Record_Name.Value, "Dataset2").Length=2 AND 
    LookUpSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!HasIP.Value,"Dataset2")(1)="YesYes", 
LookUpSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Record_Name.Value,"Dataset2")(1), 


'if two records returned, check the HasIP field. If HasIP = YesNo, then use this combination second. 
LookupSet(Fields!Main_ID.Value, Fields!Main_ID.Value, Fields!Record_Name.Value, "Dataset2").Length=2 AND 
    LookUpSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!HasIP.Value,"Dataset2")(0)="YesNo", 
LookUpSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Record_Name.Value,"Dataset2")(0), 

LookupSet(Fields!Main_ID.Value, Fields!Main_ID.Value, Fields!Record_Name.Value, "Dataset2").Length=2 AND 
    LookUpSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!HasIP.Value,"Dataset2")(1)="YesNo", 
LookUpSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Record_Name.Value,"Dataset2")(1), 


'If all else fails, display the number 2 
True, 2) 

我得到了正確的返回2記錄,但得到0和1記錄#ERROR。如果我將公式分解成它們各自的部分:

=SWITCH(
LookupSet(Fields!MainID.Value, Fields!MainID.Value, Fields!Record_Name.Value, "Dataset2").Length=0, 
2) 

這是有效的。數字2顯示在我的報告中,數據集2中沒有條目(該字段對於任何其他組合都是空白的)。

如果我使用:

=SWITCH(LookupSet(Fields!MainID.Value, Fields!MainID.Value, Fields!Record_Name.Value, "Dataset2").Length=1, LookUp(Fields!MainID.Value,Fields!MainID.Value,Fields!Record_Name.Value,"Dataset2")) 

這能正常工作時,我有1個記錄從Dataset2返回(領域是空白的任何其他組合)。

無論我嘗試第三部分(處理2條記錄),我都會遇到問題。我可以得到正確的記錄名稱返回,但我得到0或1記錄的#ERROR。 我嘗試在IIF語句中嵌套第三部分,翻轉它首先看長度等,但沒有成功。

我無法編輯任何數據集的基礎查詢。

任何指導非常讚賞。

回答

0

解決

參見:

SSRS 2012. Replicate grouping results in report in Query Designer

本質上,它被加入一個數值HasIP並添加在所述第二數據集的主鍵。 然後對LookupSet數組進行排序以獲取所需的值。

在表達式中,你可以用它來指定一個默認值,即使有不被LookupSet返回的結果:

=iif(
    LookupSet(
     Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Main_ID.Value,"Dataset2" 
    ).Length>0, 
    Mid(
     Split(
      Join(
       Code.JoinSorted(
        LookupSet(
         Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Q12b.Value,"Dataset2") 
        ) 
      ,";") 
     ,";").GetValue(0) 
    , 'start point of mid 
     InStr(
      Join(
       Code.JoinSorted(
        LookupSet(
         Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Q12b.Value,"Dataset2" 
        ) 
       ) 
      ,";") 
     ,"$") 
    +1, 
1), 
"2" 
)