HOLD ファイルでよく使うこのコマンド知ってますか?

2024年3月23日サポぶろぐ

みなさん、はじめまして!
株式会社アシスト北海道で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 のサポートを担当
趣味 : 海外ドラマ・野球観戦・ドライブ
ひとこと :北海道も雪が解けてきてドライブができる季節になりました。
————————————————————————————————————