web-dev-qa-db-ja.com

別のリストのデータを使用して計算列を作成する方法

次の状況があります。リストAに2つの列(名前、金額)があり、リストB(名前)に、リストBと同じ名前のリストAのすべてのエントリの合計である計算列を追加したい例:

リストA:

NAME      Amount
L0011     100
L0011     50
L0020     234

したがって、リストBでは、計算列に次のように表示します。

NAME      Amount
L0011     150
L0020     234

これはどのように行うことができますか?ワークフロー(リストAのエントリを追加/変更し、リストBを更新するとすぐに)または他の何か?ありがとう

5
DanielR

計算列は同じリストの列にのみ使用できるため、計算列を使用してこれを行うことはできません。

SharePoint Designerワークフローを使用すると、Create List ItemおよびUpdate List Itemアクションを使用するだけで、ユーザーがL0011の値を追加するたびに、以前の金額が既に含まれている別のリストの列に金額が追加されます。

SharePointアプローチについてより詳細な回答が必要な場合はお知らせください。手順を追って、何をすべきかを説明します。

5
lem.mallari

lem.mallariの答えは、リストAの金額が変更されないと想定できない限り、非常に苦痛です。これは、アイテムがすでに合計に追加されているかどうかを追跡していないためです。ワークフローがSharePointリストを反復処理する方法はありません。つまり、複数のリストアイテムの合計または平均を計算する簡単な方法はありません。

これを実装する正しい方法には、いくつかの開発が必要になります。 SharePoint開発者トレーニング( 201201 )は、実際にほとんどの方法を取得します。リストAおよびBでアイテムが追加または変更されたときに、イベントレシーバーがトリガーする必要があります。 SharePointのAPIを使用して、リストAと名前による平均値を調べ、リストBのすべての(または影響を受けた)アイテムを更新します。または、JavaScriptを使用して、リストAのすべてのエントリの合計を表示することもできます。すべてのデータがページに表示されている限り、リストBのアイテム。 XPathとInfoPathが便利な場合は、リストAをセカンダリデータソースとしてリストBのフォームに追加し、リストAの該当するアイテムのみを選択して合計することができます。

しかし、ワークフローについて話している場合は、これが「ワークフローのみ」の方法です。これは2010年にテストされ、成功しました。次の列を使用してカスタムリストCを作成します。

  • タイトル(文字列、必須、一意の値を適用)
  • TotalItems(整数、必須、デフォルト0)
  • 合計(数値、小数点以下の桁数、必須、デフォルトは0)
  • 平均(計算、= IF(TotalItems = 0,0、Sum/TotalItems))(オプション)

リストAおよびBの[名前]列を、リストCを指すルックアップ列に置き換えます。追加の列として[合計]列を含める代わりに、リストBの[金額]列を削除します。次の列をリストAに追加し、ユーザーがそれらを直接変更できないようにします。これは、InfoPathフォームを作成するか、別の表示および編集フォームを作成することで制限できます。

  • AmountArchive(数値、Amountと同じ、デフォルトは0)
  • AmountHasBeenSubmitted(yes/no、デフォルトはno)

リストAでアイテムが作成または変更されるたびに実行するワークフローを作成します。次のコマンドを使用します(読みやすくするためにリストを使用しています。コードとしてフォーマットすると見苦しくなりました)。

  • 現在のアイテム:金額が現在のアイテム:金額アーカイブと等しくない場合
    • 変数:アイテム数を(データソース:リストC;ソースからのフィールド:TotalItems;リストアイテムの検索:フィールドタイトル;値:現在のアイテム:名前(フィールドを次のように:ルックアップ値(テキストとして)))に設定します
    • 変数の計算:ItemCountプラス1(変数への出力:ItemCount)
    • リストC:Sumを計算します(上記と同様の設定。文字列ではなく、必ずルックアップ値(テキストとして)を使用してください!)から現在のアイテム:AmountArchive(変数への出力:SumWithoutValue)を引いたもの
    • 変数の計算:SumWithoutValueと現在のアイテム:金額(変数への出力:NewSum)
    • 現在のItem:AmountHasBeenSubmittedがNo に等しい場合
      • AmountHasBeenSubmittedをYesに設定します
      • リストCのアイテムを更新します(TotalItemsをVariable:ItemCountに設定し、SumをVariable:NewSumに設定し、Field:Titleと同じ方法でリストアイテムを検索します。Value:Current Item:Name(Return field as:Lookup Value(as Text)) )
    • そうしないと
      • リストCのアイテムを更新します(TotalItemsには何もしません。同じロジックを使用してSumをVariable:NewSumに設定します)
    • 金額を現在のアイテムに設定:AmountArchive
7
Aron Foster

DSum関数の使用はどうですか? https://support.office.com/en-us/article/DSum-Function-08F8450E-3BF6-45E2-936F-386056E61A32

リストB

NAME      Amount
L0011     =DSum("[Amount]","List A","[NAME]=''" & [NAME] & "'")
L0020     =DSum("[Amount]","List A","[NAME]=''" & [NAME] & "'")
0
DBolton