HOLD ファイルでよく使うこのコマンド知ってますか?
みなさん、はじめまして!
株式会社アシスト北海道でWebFOCUSのサポートを担当しております加津(かつ)と申します。
ぜひこの機会に名前を覚えていただけると嬉しいです!
早速ですが皆様、以前のブログで HOLD ファイルについてお伝えしたのですが覚えてますでしょうか?
もし HOLD ファイルが何かわからない・・・という方は以下の記事をご確認ください!
「WebFOCUSの必須機能!HOLDファイルを知ろう!」
それでは早速 HOLD ファイルの動作について見ていきましょう!
HOLD ファイルの動作
APPEND や二次検索などに使用できる便利な HOLD ファイルですが、実は非表示項目やフォーマットを変換した際の
変換前の項目まで HOLD ファイルに含まれてしまうことはご存知ですか?
この内容を意識しないともしかすると、想定していない項目が HOLD ファイルに出力されているかもしれません…
パターン①
例えば以下のように、NOPRINT で項目を非表示にした場合でも HOLD ファイルには NOPRINT で非表示にしている
はずの項目(RETAIL_COST や DEALER_COST)まで含まれます。
TABLE FILE CAR
SUM SALES
RETAIL_COST NOPRINT
DEALER_COST NOPRINT
BY COUNTRY
ON TABLE HOLD FORMAT ALPHA
END
-RUN
TABLE FILE HOLD
PRINT *
END
非表示項目の「RETAIL_COST」「DEALER_COST」も含まれていることが確認できます。
パターン②
ダイナミックフォーマットでフォーマットを変換した場合、変換前の項目が HOLD ファイルに含まれてしまいます。
※ダイナミックフォーマットとは、SALES/D10 のようにリクエスト内で明示的にフォーマットを変換することです。
TABLE FILE CAR
SUM SALES/D10
BY COUNTRY
ON TABLE HOLD FORMAT ALPHA
END
-RUN
TABLE FILE HOLD
PRINT *
END
非表示項目やフォーマット変換前の項目が HOLD ファイルに含まれてしまうと、たとえば集計結果が異なる。
ということが発生するかもしれません。
今回はそのようなことを防ぐ「SET HOLDLIST = PRINTONLY」についてご紹介します!
SET HOLDLIST = PRINTONLY について
「SET HOLDLIST = PRINTONLY」は以下のような場合に使用します。
・非表示項目は HOLD ファイルに含めたくないとき
・ダイナミックフォーマットでフォーマットを変換した際に、変換前の値を HOLD ファイルに含めたくないとき
▼非表示項目は HOLD ファイルに含めたくないとき
SET HOLDLIST = PRINTONLY
TABLE FILE CAR
SUM SALES
RETAIL_COST NOPRINT
DEALER_COST NOPRINT
BY COUNTRY
ON TABLE HOLD FORMAT ALPHA
END
-RUN
TABLE FILE HOLD
PRINT *
END
以下のように NOPRINT で非表示にした項目は HOLD ファイルに含まれません。
▼ダイナミックフォーマットでフォーマットを変換した際に、変換前の値を HOLD ファイルに含めたくないとき
例えば、以下のプロシジャを実行するとフォーマット変換前の項目が HOLD ファイルに含まれているので、
期待通りの集計結果が得られません。
FILEDEF HOLD DISK HOLD.FTM (APPEND
-*結合元のデータ
TABLE FILE CAR
SUM SALES/D10
BY COUNTRY
ON TABLE HOLD FORMAT ALPHA
END
-RUN
-*追加するデータ
TABLE FILE CAR
SUM RETAIL_COST/D10
BY COUNTRY
ON TABLE SAVE AS HOLD FORMAT ALPHA
END
-RUN
TABLE FILE HOLD
SUM SALES
BY COUNTRY
END
「SALES」と「RETAIL_COST」の合計はそれぞれ以下なので、集計結果が一致しないことがわかります。
それでは「SET HOLDLIST = PRINTONLY」を指定してから実行してみます。
SET HOLDLIST = PRINTONLY
FILEDEF HOLD DISK HOLD.FTM (APPEND
-*結合元のデータ
TABLE FILE CAR
SUM SALES/D10
BY COUNTRY
ON TABLE HOLD FORMAT ALPHA
END
-RUN
-*追加するデータ
TABLE FILE CAR
SUM RETAIL_COST/D10
BY COUNTRY
ON TABLE SAVE AS HOLD FORMAT ALPHA
END
-RUN
TABLE FILE HOLD
SUM SALES
BY COUNTRY
END
フォーマット変換前の項目が含まれないため、期待通りの結果が得られました。
「SET HOLDLIST = PRINTONLY」の動作について学んでいただきましたが、いかがでしたか?
このコマンドは HOLD ファイルを出力するときによく使用するので、この機会にぜひ覚えてください!
※本記事は「WebFOCUS 9.0.3」で作成しています。
それでは、また次回の記事もお楽しみに!
<この記事をかいた人>
————————————————————————————————————
株式会社アシスト北海道 テクニカルサポート部情報基盤1課 加津 秀明
入社歴 : 2020年新卒入社、約2年間 Qlik製品 のサポートを担当
2023年より WebFOCUS のサポートを担当
趣味 : 海外ドラマ・野球観戦・ドライブ
ひとこと :北海道も雪が解けてきてドライブができる季節になりました。
————————————————————————————————————