はじめに
この投稿では、ValueStoreSetとValueStoreGetの関数がどのように機能するかを見ていきます。
これらの関数を使うことで、値をメモリに保存し、クエリセッションでその値をメモリから取得して使用することができます。
これは、一般的なプログラミング言語で変数を準備し、その変数に値を代入して、後でその値を取り出して使用するという概念に似ています。
リソースの準備
この記事を書く際、良い実用的な例が思い浮かびませんでした。
そのため、実用的ではありませんが、これらの関数を使って以下の結果を表示する例を準備しました。
UNIONクエリを使用します。
UNIONの最初のクエリ(親クエリ)では、このデータセットから黄色、青、赤のアイテムの合計額を計算し、その値をValueStoreSet関数を使ってメモリに保存します。
その後、2番目以降のクエリでValueStoreGet関数を使って結果を表示します。
クエリの定義
親クエリ
"コード::String","色::String","金額::Number"
"A100","赤",200
"A200","青",159
"A300","青",356
"A400","赤",211
"A500","黄",255
"A600","赤",1200
"A700","青",2100
"A800","赤",1940
"A800","青",100
"A900","赤",320
"A100","赤",89
"A110","青",20
"A120","黄",12569
"A130","赤",568
"A140","赤",400
"A150","黄",550
"A160","赤",600
"A170","青",570
"A180","黄",420
-
上記に示されたカンマ区切りのリストがデータソースとして使用されます
-
これらの3つの拡張表現は実際に各色の合計額を計算します
黄色を例にすると、最初の行では「黄」と記載された行がその金額を表示し、それ以外の色の場合は0を表示します
2行目以降では、現在の行が「黄」を示している場合、その金額を前の行のこの列の結果に加算します。それ以外の場合は、前の行のこの列の値をそのまま返します
最後の行になると、この列には黄色の合計額が表示されますIIF(StartOfReport ,IIF({%色}="黄" , {%金額} ,0 ) ,IIF({%色}="黄" ,{%Previous:黄色の合計}+{%金額} ,{%Previous:黄色の合計} ) )
-
各色の合計額は、ValueStoreSet関数を使ってメモリに保存されます
例えば黄色用の拡張表現では、上記2の拡張表現で計算された黄色の現在の合計値を保存します
最後の行までくると、黄色の総合計額がメモリに保存されるという仕組みです。指定されたコード YELLOWTOTAL で保存されている値を取得できます。ValueStoreSet("YELLOWTOTAL", {%黄色の合計})
ユニオンクエリ
3つのUNIONが定義されています。
各ユニオンクエリは、メモリに保存された各色の合計額を表示します。
これらのクエリは、合計額を表示するだけでよいため、1行だけを返すように設計されています。
こちらは「黄色」の例です。
拡張表現(コード)と(色)は、これらのタイトルを表示します。
実行結果
その結果、合計額は親クエリによって正しく計算され、メモリに保存され、UNIONクエリによってメモリから正しく取得されました。
あとがき
ここでの例は特に意味があるものではありませんが、これらの関数の使用方法が皆様に伝われば幸いに思います。