解決しよう!!!:
OKは - ここに私が作ってみたものです。
をICに数値順序を割り当て、PCは
値Iが一緒IC & PCフィールド値を連結した値を割り当てられ、元のサブレポート内のレコードのIDを追加しました。の値を除外するために
=Left(Fields!HasIP.Value, 1)
:私は
これは、2-XXXXで私を残し、1-YYYYなど
=Switch(Fields!IC.Value+Fields!PC.Value="YesYes", 1,
Fields!IC.Value+Fields!PC.Value="YesNo", 2,
Fields!IC.Value+Fields!PC.Value="NoNo", 3) & "-" & Fields!R_Name.Value
HasIP
このフィールドと呼ばれる、私はその後、私の第二のデータセットにフィルターを追加しました(LookupSetによって使用される) "Noいいえ"
を連結HasIPとDATASET2の他のフィールド
さらに、出力のためにテキスト値をコードに変換しなければなりませんでした(例えばYes = 1、No = 2、Unknown = 3など)。これを行うには、HasIPを含むDataset2の計算フィールドをクエリではなくレポートに作成します。私はドル記号を使って値からHasIPを区切った。
=Fields!HasIP.Value & "$" &
SWITCH(
left(Fields!CoR.Value, 1)="C", 1,
Left(Fields!CoR.Value, 1)="N", 2,
True, ""
)
これは、私に2-xxxx $ 2、1-yyyy $ 1などを残しました。
ソートLookupSetは
LookupSetは、配列を作成結果(はい、今あなたも知っています)。私はこれをソートする必要があったので、後にあるものが返された最初の値になりました。これは、以下をコピーしてレポートのカスタムコードセクションに貼り付けることで実現します。 (必要なら逆順でソートできるようにコードを追加しました)。
Function JoinSorted(m_Array As Object()) As String()
System.Array.Sort(m_Array)
' Array.Reverse(m_Array) 'uncomment this line if you want to sort in reverse
Dim k As Integer = 0
For i As Integer = 0 To m_Array.Length - 1
If i > 0 AndAlso m_Array(i).Equals(m_Array(i - 1)) Then
Continue For
End If
m_Array(k) = m_Array(i)
k += 1
Next
Dim fred As [String]() = New [String](k - 1) {}
System.Array.Copy(m_Array, 0, fred, 0, k)
Return fred
End Function
あなたのレポート式に次のように使用してこれを呼び出す:
Join(
Code.JoinSorted(
LookupSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!YourField.Value,"Dataset2")
),""
)
ので、関係なく、LookupSetは、配列を返すように望んでいたかの、私はいつも最初の$ 1を1-YYYYました。レポートにLookupSet出力の取り扱い
- レコードなしのレポートでは、いくつかのLookupSetの結果を得るために
のデフォルトを含め、私はレコードが返されなかった場合、デフォルトの値を返す必要がありました。それ以外の場合は、割り当てられた値(1,2,3など)を返す必要がありました。場合は、これを行うには2つの方法が見つかりました。
これは、配列数[はい、長さを使用する]が0より大きいかどうかをチェックします。
=SWITCH(
LookupSet(
Fields!Main_ID.Value, Fields!Main_ID.Value, Fields!Record_Name.Value, "Dataset2"
)
.Length=0,
2,
LookupSet(
Fields!Main_ID.Value, Fields!Main_ID.Value, Fields!Record_Name.Value, "Dataset2")
.Length>0,
1)
OR これは同じである:もしそうなら、その配列結果にミッド機能を使用すると、14番目の文字を返します
=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!Main_ID.Value,"Dataset2")
)
,";")
,";").GetValue(0)
, 'start point of mid
InStr(
Join(
Code.JoinSorted(
LookupSet(
Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Main_ID.Value,"Dataset2"
)
)
,";")
,"$")
+1,
1),
"2"
)
取り扱いLookupSet出力にレポート - 値の長さが変化するときのMIDの使用
場合によっては、 nは長さが変化しました。たとえば、2または10です。LookupSetが結果を返さなかった場合、何も返さないようにする必要がありました。それは#ERRORを投げたとして、一部のレコードの文字列に負の長さを作るため、(最後に)-1の使用に
Mid(
Join(Code.JoinSorted(
LookupSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Q12d.Value,"Dataset2")),
";"),
InStr(
Join(
Code.JoinSorted(
LookupSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Q12d.Value,"Dataset2")
),
";"),
"$")+1,
(
InStr(
Join(
Code.JoinSorted(
LookupSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Q12d.Value,"Dataset2")
),
";"),
";")
-
InStr(
Join(
Code.JoinSorted(
LookupSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Q12d.Value,"Dataset2")
),
";"),
"$")
- 1)
)
:私はこのようなMIDの「正常な」バージョンを使用できませんでした。
だから、ここで私が使うことができるものである:
=
Mid(
Split(
Join(
Code.JoinSorted(
LookupSet(Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Q12b.Value,"Dataset2")
),
";"),
";").GetValue(0)
,
InStr(
Join(
Code.JoinSorted(
LookupSet(
Fields!Main_ID.Value,Fields!Main_ID.Value,Fields!Q12b.Value,"Dataset2")
),
";"),
"$")
+1,
1)
こうすることによって、私は私が詳細に後にした結果はフッターを&得ることができます。
私はこれが他の人に役立つことを願っています。