はじめに
DataMagic は、色々な機能を備えています。
機能・概要一覧
| 機能 | 概要 |
|---|---|
| マッチング | 入力ファイルのレコードと、共通する項目名をキーにした複数のマッチングファイルのレコードを結合し、一つのデータセットとして出力する |
| マージ | 入力ファイルとマージファイルを連結して、入力マージデータとして取り扱えます。入力マージデータに対しては、データ加工前に重複行の削除やソートする |
| 出力先振り分け | 抽出条件に沿って、出力ファイルを振り分ける |
| 数値項目演算 | 出力項目が数値タイプの場合、入力項目同士や任意の値との演算式を指定し、その演算結果を出力項目の値として出力する |
| データ抽出 | 入力データから、指定した条件に合致したデータのみを抽出する |
| 項目入替 | 入力データの項目を入れ替えて、別のフォーマットで出力する |
| 項目結合 | 複数の項目を結合して、1つの項目として出力する |
| 項目分割 | 単一項目を分割して、複数の項目として出力する |
| 全角半角 | 「カナ」「英数字」および「記号」を、半角から全角、全角から半角へ変換する |
| 出力フォーマット指定 | 日付型、数字文字列型の入力項目を出力する際に、フォーマットを指定する |
| 入力ソート | 入力ファイルの形式がCSV、フォーマット、Excelの場合は、データ加工の前にソートする |
| 属性変換 | 入力データを出力データに変換する際に、数値タイプを任意の数値タイプへ変換する |
| 日付項目演算 | 日付データに対して、演算や西暦⇔和暦の変換を指定し、その結果を出力項目の値として出力する |
| 関数 | 入力項目の値を関数で処理し、その処理結果を出力項目の値として出力する |
| マッピング | 入力ファイルから出力ファイルへのデータの流れや加工、変換ルールを定義し、異なるデータ形式間での項目の対応関係を設定する |
| 動的指定 | データ加工の実行時にコマンドの引数に指定した数値や文字列を、条件や出力情報に使用できる |
| ユーザ出口変換 | データを加工するときに、項目単位で独自の変換を設定するために、ユーザ出口プログラムを独自に作成できる |
| データ挿入 | レコード内の任意の項目にユーザ指定の任意の値を挿入できる |
| 仕様書出力 | データ加工の処理と設定内容を仕様書としてExcelファイルに出力できる |
| チュートリアル | データ加工の設定を対話的に実行して、DataMagicの基本的な操作方法を習得できる |
| カスタムエラー | カスタムエラー条件を使用すると、データの形式は問題ないが、意図しないデータ(例 別の事業所のデータ)を検出したときにデータ加工をエラーにできる |
| ステップ実行 | プログラムのデバッガの処理のように、経過を確認しながら実行し、意図するように変換できなかった場合の解析、またはデータ加工の処理経過の確認に使用できます。 |
| コード変換 | 1バイトコード間、または2バイトコード間で、文字コードを変換する |
今回の課題
最近のノーコード、ローコードのアプリにはよく付いている、デバック機能。
勿論、DataMagic にも ステップ実行 と言う名称で、しっかり標準装備されています。
私は、エラーコードから地道に解決!がモットー(と言うより、そんなに込み入った使い方していない
)なので、今まで使ったことは無かったのですが、これを機に使ってみました。
題材
何度か使用している農林水産省の「青果物卸売市場調査(日別調査)〔外部リンク〕」のデータを加工(数量*価格の計算)して出力する処理でステップ実行を試してみようと思います。
入力データ
今回は農林水産省の「青果物卸売市場調査(日別調査)〔外部リンク〕」の、主要卸売市場計の果実のCSVデータを使用します。
レイアウト情報
入力ファイル用は、入力データの1行目が「タイトル行」なので、項目取り込みの機能を使ってCSV情報を登録します。

項目取り込みを使ったCSVの情報登録については、数値項目演算を取り上げた投稿で説明しているので、そちらをご参照ください。
出力ファイル用は、上記で作った入力ファイル用のIDをコピーし、計算結果を出力する項目を追加して、以下の『項目名』で登録します。
データ加工
1.入力ファイルエリアの編集
以下で説明する項目以外の設定は、初期値を採用します。
入力設定
ファイル名 = 入力ファイル名
ヘッダーレコードの設定 =
2.出力ファイルエリアの編集
以下で説明する項目以外の設定は、初期値を採用します。
出力設定
ファイル名 = 出力ファイル名
ヘッダーレコードの設定 =
3.抽出条件の設定
今回は処理の流れを確認するために、「産地名が無い(空文字)のもの」を条件に加えます。
4.関係線の設定1〔抽出条件と出力ファイル〕
抽出条件のアイコンを選んで、出力ファイルのアイコンの上にドラッグ&ドロップし、アイコン間の関係線をつなぎます。
5.関係線の設定2〔入力項目と出力項目をマッピング〕
品目名、数量、価格は、入力項目と紐づけます。
合計金額の項目は、以下の内容で登録
・合計金額 = \$INAME(数量) * \$INAME(価格)
・合計金額(税込) = \$INAME(数量) * \$INAME(価格) * 0.8
6.データ加工処理
すべての設定が終わったので、 最後にIDを登録して、現在表示されている内容で、ステップ実行をやってみます。
ステップ実行
1.ステップ実行の目的
操作マニュアルによると、ステップ実行の目的は以下の2つらしい。
DataMagicのデータ加工のノウハウの習得
「ノウハウの習得」は、時間と興味が有るときにやって貰うとして、主な使用目的は「変換できなかった原因の早期特定」ですよね。
2.ステップ実行の操作
ステップ実行では、以下の2つを使うようです。
ブレークポイント(中断点)
データ加工の処理を中断したい任意の個所に、ブレークポイントを設定して[開始]をクリックすると、中断した時点まで処理が進み、その時点のデータの状態を参照できます。
ただし、処理を中断する条件として設定できるのは、レコード数のみです。
ステップ実行を操作するボタン
各ボタンの説明は以下の通りです。
開始後は[続行]ボタンに表示が変更されます。
※ブレークポイントの設定が無いと、最後までイッキに処理が進みます。
※ステップが進んでいても、開始の状態(最初)に戻ります。
次の処理が下の階層の処理であれば、下の階層へ遷移します。
現階層から上の階層の次の処理へ遷移します。
次の処理が下の階層の処理であっても、現階層の次の処理に遷移します。
※実行中にクリックすると『ステップ実行を中止します。よろしいですか?。』の確認画面が表示されます。
私はこの説明を読んでも、ステップイン / ステップアウト / ステップオーバー の動きが、正直ピン
とこない。
実践あるのみ!ってことで、とりあえず動かしてみました。
3.ステップ実行を開始
[ステップ実行]をクリックすると、以下の画面が表示されます。
次に、[開始][ステップイン][ステップオーバー]のいずれかをクリックすると、「データ加工実行」の画面が表示されますので、[実行]をクリックします。
すると、ステップ実行が「(実行中)」になり、押せるボタンが増え、
ステップツリーの最初『初期処理』の階層:実行開始 が反転し、「ステップ実行開始」が表示されます。
ステップイン
次のクリックで『入力』の階層:入力ファイル に遷移します。
実行対象のエリアにレイアウト定義を表示して、入力データからレコードを読み込む準備をします。
次のクリックで
階層: 項目 に遷移します。
入力データからレコードを読み込み、クリックに合わせて入力項目と値を一つずつ確認していきます。
入力項目と値をすべて確認したら、
階層:入力ファイル に遷移します。
実行結果で入力したレコードの値を表示します。
次のクリックで『抽出条件』の階層:条件論理式 に遷移します。
実行対象のエリアに抽出条件を表示して、条件判定をする準備をします。
次のクリックで
階層:条件 に遷移します。
クリックに合わせて、読み込んだレコードを条件式に当てはめ、判定します。
条件式をすべて確認したら、
階層:条件論理式 に遷移します。
実行結果で判定結果を表示します。
このレコードの評価結果は TRUE なので、次のクリックで『出力』の階層:出力ファイル に遷移します。
実行対象のエリアにレイアウト定義を表示して、レコードを出力する準備をします。
なお、評価結果が FALSE の場合は
『入力』の階層に遷移して次のレコードを処理します。
次のクリックで
階層: 項目 に遷移します。
クリックに合わせて、レコードの値をマッピングした出力項目にセッティングしていきます。
今回は、4項目目、5項目目に、数値演算や出力フォーマットの編集をしていますが、その編集工程もしっかり確認できます。
出力データの作成が完了したら、出力先ファイルに出力して
『入力』の階層に遷移し、次のレコードを処理します。
すべての処理が終わったら、処理終了を確認する画面が表示されます。
ステップアウト
[続行]と同じ
なんじゃないか
と言いたくなる動きをします。
違いは、クリックした階層からブレークポイントまで爆走するのが[続行]。
とりあえず、現階層から上の階層へ遷移してから爆走するが[ステップアウト]ってところでしょうか。
ステップオーバー
次の同じ階層の処理に移動するので、今回の場合は以下の階層を遷移するようです
- [ステップイン]の
の階層はスキップします。 - 但し、
の階層に居るときにクリックされた時は、その階層の中を[ステップイン]と同じように遷移します。 - 上の階層(『入力』は 階層:入力ファイル、『抽出条件』は 階層:条件倫理式、『出力』は 階層:出力ファイル)に居る時は、この階層を行ったり来たりして、下の階層には遷移しません(スキップします)。
デバック機能を備えたアプリって、たくさんありますが、中身は "ログの垂れ流し" ってことないですか。
その点、DataMagic は、自分が担当する処理部分(接続したDB側での処理中に出たエラーは、DBが返してきた結果をそのまま出力するしかないで)は、視覚的にも分かり易く「ココが問題」って教えてくれます。
エラーの原因解明や、思い通りの処理結果が得られない場合の解決に、使ってみては如何でしょうか。
以上です。




















