はじめに
DataMagic は、色々な機能を備えています。
機能・概要一覧
| 機能 | 概要 |
|---|---|
| マッチング | 入力ファイルのレコードと、共通する項目名をキーにした複数のマッチングファイルのレコードを結合し、一つのデータセットとして出力する |
| マージ | 入力ファイルとマージファイルを連結して、入力マージデータとして取り扱えます。入力マージデータに対しては、データ加工前に重複行の削除やソートする |
| 出力先振り分け | 抽出条件に沿って、出力ファイルを振り分ける |
| 数値項目演算 | 出力項目が数値タイプの場合、入力項目同士や任意の値との演算式を指定し、その演算結果を出力項目の値として出力する |
| データ抽出 | 入力データから、指定した条件に合致したデータのみを抽出する |
| 項目入替 | 入力データの項目を入れ替えて、別のフォーマットで出力する |
| 項目結合 | 複数の項目を結合して、1つの項目として出力する |
| 項目分割 | 単一項目を分割して、複数の項目として出力する |
| 全角半角 | 「カナ」「英数字」および「記号」を、半角から全角、全角から半角へ変換する |
| 出力フォーマット指定 | 日付型、数字文字列型の入力項目を出力する際に、フォーマットを指定する |
| 入力ソート | 入力ファイルの形式がCSV、フォーマット、Excelの場合は、データ加工の前にソートする |
| 属性変換 | 入力データを出力データに変換する際に、数値タイプを任意の数値タイプへ変換する |
| 日付項目演算 | 日付データに対して、演算や西暦⇔和暦の変換を指定し、その結果を出力項目の値として出力する |
| 関数 | 入力項目の値を関数で処理し、その処理結果を出力項目の値として出力する |
| マッピング | 入力ファイルから出力ファイルへのデータの流れや加工、変換ルールを定義し、異なるデータ形式間での項目の対応関係を設定する |
| 動的指定 | データ加工の実行時にコマンドの引数に指定した数値や文字列を、条件や出力情報に使用できる |
| ユーザ出口変換 | データを加工するときに、項目単位で独自の変換を設定するために、ユーザ出口プログラムを独自に作成できる |
| データ挿入 | レコード内の任意の項目にユーザ指定の任意の値を挿入できる |
| 仕様書出力 | データ加工の処理と設定内容を仕様書としてExcelファイルに出力できる |
| チュートリアル | データ加工の設定を対話的に実行して、DataMagicの基本的な操作方法を習得できる |
| カスタムエラー | カスタムエラー条件を使用すると、データの形式は問題ないが、意図しないデータ(例 別の事業所のデータ)を検出したときにデータ加工をエラーにできる |
| ステップ実行 | 入力ファイルの読み込み、抽出、およびデータ変換時に発生した、設定とデータの整合性が取れていないことに起因するエラー(システムエラーや設定値不正ではないもの)をスキップする |
| コード変換 | 1バイトコード間、または2バイトコード間で、文字コードを変換する |
今回の課題
扱うデータの中には、日付項目を含むデータも多く存在します。
伝票系のデータなんかを扱う場合は、〝何日後〟とか〝何か月後の月末〟なんて特定の日を算出するケースもしばしば。
〝何営業日後〟って計算なんかは、曜日や祝日を考慮する必要があるので、祝日データを用意したり、関数やIF文などを駆使する必要がありますが、ここでは単純な設定で対応できる、〝何日後〟〝月初日〟〝月末日〟 の出力を日付演算でチャレンジしてみます。
入力データ
ここでは以下のCSV形式のデータを使用します。
"検証用日付"
"2024/01/01"
"2025/01/01"
"2024/02/28"
"2025/02/28"
"2024/03/15"
"2025/03/15"
"2025/06/15"
"2025/12/31"
レイアウト情報
入力、出力共にCSV形式 & ID省略で検証します。
データ加工
1.入力ファイルエリアの編集
入力形式=CSV、漢字コード種=SHIFT-JIS、ID=省略
以下で説明する項目以外の設定は、初期値を採用します。
レイアウト
- ID:
-
省略
区切り文字、囲み文字 は共に初期値 で設定 - ファイル名:
- 入力データをコピペして作った検証用日付データのファイルを指定
- ヘッダレコード設定:
-
チェック
を入れて、1 ~ 1 行に設定
2.出力ファイルエリアの編集
出力形式=CSV、漢字コード種=SHIFT-JIS、ID=省略
以下で説明する項目以外の設定は、初期値を採用します。
レイアウト
- ID:
-
省略
区切り文字、囲み文字 は共に初期値 で設定 - ファイル名:
- 出力ファイル名を指定
3.抽出条件の設定
初期設定のまま使用
4.関係線の設定1〔抽出条件と出力ファイル〕
抽出条件のアイコンを選んで、出力ファイルのアイコンの上にドラッグ&ドロップし、アイコン間の関係線をつなぎます。
5.関係線の設定2〔入力項目と出力項目をマッピング〕
出力情報設定項目の「種別=日付演算」の演算式に使える項目(参照値一覧以外)は以下になります。
| 項目 | 内容 |
|---|---|
| today、now | データ加工開始日時を表します。すべてのレコードに対して同一の値になります。 |
| tomorrow | todayの24時間後を表します。 |
| yesterday | todayの24時間前を表します。 |
| +(プラス) | 日付データの加算を行います。日数・時間の前に付けて使用します。 |
| -(マイナス) | 日付データの減算を行います。日数・時間の前に付けて使用します。 |
| ago | 「-(マイナス)」と同様に日付データの減算を行いますが、日数、時間の後に付けて使用します。 |
| next | 「+1」と同じです。 |
| last | 「-1」と同じです。 |
| 数値 | 数値を指定します。常に「単位」を付けて使用します。 |
| 単位 | 常に「数値」に続けて使用します。以下のものが使用できます。 year(年)、month(月)、fortnight(2週)、week(週)、day(日)、 hour(時)、minute(分)、second(秒) |
何日後
入力データの日付の+1日後(翌日)を演算して出力します。
演算結果を比較するために、出力項目は2つ追加。
- 1項目目 = 入力データの値をそのまま出力(関係線を結ぶだけ)。
- 2項目目 = 以下のように出力情報の設定を行います
- 種別:
- 日付演算
- 演算式:
- $INUM(1) + 1day
月初日
入力データの日付の翌月1日を演算して出力します。
入力データから直接月初日を出力するのは難しいので、変数を使います。
変数のタイプは文字列で作成します。
次に、抽出条件のアイコンに変数を追加して変数代入設定を行います。
出力項目の〝月初〟に出力情報を2つ追加し
1つ目の出力情報には、入力項目から以下の設定で年月の部分を抽出します。
- 種別:
- 入力項目
- 関数:
- FORMAT_DATE{YYYY/MM}
2つ目の出力情報には、固定値で1日を指定します。
- 種別:
- 固定値
- 区分:
- 固定文字列
- 値:
- /01
変数代入設定が終わったら、マッピング情報設定で各項目をマッピングしていきます。
演算結果を比較するために、出力項目は2つ追加。
- 1項目目 = 入力データの値をそのまま出力(関係線を結ぶだけ)。
- 2項目目 = 以下のように出力情報の設定を行います
- 種別:
- 日付演算
- 演算式:
- $VAR(月初) +1month
月末日
入力データの日付の翌月の月末日を演算して出力します。
月末日はその月によって 30 だったり 31 だったり。
2月は閏年かどうかで 28 か 29 になったりで、月初=01 のように固定値を当てはめることはできません。
が、この記事に興味を持たれた方なら、既にお気づきだと思いますが。
月末日 = 翌月01日の前日
なんですよね。
なので、設定はほとんど 月初日 と同じで、出力項目の演算式を以下に変えるだけ。
- 種別:
- 日付演算
- 演算式:
- $VAR(月初) +2month -1day
6.データ加工処理
すべての設定が終わったので、 最後にIDを登録して、データ加工を実行します。
上記の説明では、〝何日後〟〝月初日〟〝月末日〟の出力を、別々のデータ加工として説明しましたが、ここでは3つの設定を一つにして出力した結果を。
以上です。







