• ホーム
  • 製品ブログ
  • とっても便利!「条件付レイヤー」機能を使ってみた ~菊ちゃん...

とっても便利!「条件付レイヤー」機能を使ってみた ~菊ちゃんのASTERIA Warp体験記~

こんにちは。インフォテリアのキクチです。

先日、AUG(ASTERIA User Group)のTipsWGが開催されました。

このブログでおなじみのHさんと、サポートからKさんが講師を勤め、ASTERIA Warpの便利機能や開発・運用でつまづきがちなポイント、その回避方法を面白おかしく解説してくれました。

ご参加いただいた皆さん、ありがとうございました!
このTipsWGの様子はFacebookなどでも紹介されているので、ご興味のある方はぜひご覧ください。

ちなみにぼくはその後に開催された懇親会にも参加したのですが、ASTERIA Warpをご利用になられているユーザーの皆さんで活発な意見交換が行われていました。お酒も入っていたので脱線しがちではありましたが、ASTERIA Warpを愛してどんな使い方が出来るのか、真剣に考えてくださっているユーザーの生の声に触れさせていただけたのは、とてもいい経験になりました。

あ、うちの営業Sさんも負けてませんよ!

ユーザーのみなさんに楽しんでいただけるように自らのプロポーズ秘話で場を盛り上げてくれました。みなさんに楽しんでいただくために、鉄板ネタを惜し気もなく披露するSさん、さすがです!

今回ご参加いただけなかった皆さんも次回はぜひご参加ください。ASTERIA Warpの便利な使い方と、Sさんの鉄板ネタでおもてなしさせていただきます!

「条件付レイヤー」とつないでみた

と、前置きが長くなりましたが、今回の体験記では「条件付レイヤー」の機能をご紹介します。
これも便利機能の一つである「レイヤー」でなんと条件分岐まで出来てしまうようです。

この機能を知っていると、複雑になりがちな分岐処理がすっきりすると思いますので、ぜひご活用ください!

さて、前回はMapper関数を使用して、簡単なデータ変換/計算処理を行いました。

ですが、実際の開発ではフィールド数がとても多かったり、たくさんのフィールドがそれぞれ関数にマッピングしていたりとごちゃごちゃしがちだと思います。

「レイヤー」とは

ASTERIA Warpでは複雑になりがちなマッピング処理の可読性を高めるために、「レイヤー」という機能をご用意しています。

ひとつの画面だと見づらくなりがちなMapper処理ですが、この「レイヤー」を使用すれば、フィールドごとに処理を見やすく整理することが出来ます。

そんな表示整理を出来る「レイヤー」ですが、実は条件をつけてマッピング処理を分けることが出来るんです。どうも言葉だけでは伝わりづらいですね。

画面ショットつきでご紹介したいと思いますので、どうぞご覧ください!

ことの発端はHさんの何気ない一言でした

とあるお客様向けにサンプルのフローを作成していたときのことでした。
ファイルから取得してきたレコードの値に応じてマッピングする内容を変える、という処理に悪戦苦闘していたのですが…
ちなみに、そのときはこんなマッピングをしていました。

支店名の値に応じて「値引き後単価」列の値引率を変える

一見すると何をしているのかよく分かりませんね(汗)
一応、支店名のデータ(東京・大阪・仙台)に応じて「値引き後単価」の列への出力データを変えています。

東京⇒値引率:0
大阪⇒値引率:0.8
仙台⇒値引率:0.5

みたいな感じです。

プログラム言語的に書くと…

if(支店名="大阪"){
  値引き後単価=単価×0.8
}else if(支店名="仙台"){
  値引き後単価=単価×0.5
}else{
  値引き後単価=単価

というところでしょうか。
このマッピングを見たHさんが、教えてくれたのが「条件付レイヤー」でした。

「条件付レイヤー」って知ってる?

Hさん「あー頑張ったねぇ~もっと簡単に出来る方法あったのになぁ…」
キクチ「なんですと!?もっと簡単に出来るんですか??」
Hさん「うん。『条件付レイヤー』って知ってる?特定の条件のときだけマッピングするレイヤーなんだけど。」
キクチ「『条件付レイヤー』?初めて聞きました!それ使えばマッパーの中で条件分岐しなくてもいいですかね?」
Hさん「それは要件によるけどね。一度マニュアル見てみたら?」
キクチ「はい。ありがとうございます。」

そんなわけで、マニュアルを見てみました。
ふむふむ…

「条件付レイヤー」について
「フローデザイナーマニュアル」_「フローデザイナー」_「マッピング」_「レイヤーを使う」_「条件付レイヤー」をご参照ください。
レイヤーは多数のマッピングのリンクを見やすくするために使いますが、ある特定の条件のときだけマッピングするように定義することもできます。条件を定義したレイヤーを「条件付きレイヤー」といいます。条件付きレイヤーとしてレイヤーを使う場合、レイヤーの追加時に条件式を指定します。条件を設定したレイヤーは、マッピングウィンドウ下部のレイヤー名タブの色が変わります。

とのこと。なんと…
論理値を使いながらマッピングする必要がないということでしょうか…?

何はともあれ、「条件付レイヤー」を試してみたいと思います。
フローの流れは簡単にファイルからファイルへの連携です。

「条件付レイヤー」を試す

Mapperの中で「条件付レイヤー」を使って値を振り分けている

ちなみに連携するのはこんなファイルです。
「支店名」列の値に応じて値引率を変えて出力したいのです。

明細データ

マッピングは未着手です。マッピングはどうやるのか…

新規にマッピングを作成

ひとまず、「東京」のつもりでデフォルトのレイヤーにマッピングしてみます。
「支店名」列が「東京」の時には値引きは行わないので、「単価」列のデータをそのまま「値引き後単価」列へマッピングしています。

「単価」列のデータをそのまま「値引き後単価」列へマッピング

さあ、ここからが本番です。
「支店名」列の値が「大阪」・「仙台」のときのマッピングをレイヤーを追加して行いたいと思います。

まずはレイヤーを追加します。レイヤーを追加するにはマッピング画面の下部にある+ボタンを押下します。

マッピング画面の下部にある+ボタンを押下

立ち上がってくるレイヤー追加画面には「レイヤー名」の入力欄の他にも「条件式」の入力欄があります。
ここに「大阪」、「仙台」に合致する条件を設定してあげるようですね。

「条件式」の入力欄に合致する条件を設定

さて、問題はどんな条件を設定すればいいのかということですが…

ひとまず、「フィールド名=値」の形で入力してみます。

「条件式」に「フィールド名=値」の形で入力

んーコンパイルに失敗してしまいますね。

条件式が不正です:支店名=大阪

条件文はどんな感じで作ればいいんでしょう…?先ほどのマニュアルを見返してみます。
「入力ストリームの判定」の項目にそれっぽい記述を見つけました。

どうも、「RQL」(ASTERIA独自の条件式記述の言語)と「XPath」(W3C勧告のXPath仕様)が使えるみたいです。

今回は「レコード形式を評価」する「RQL」が使えそうですね

各フィールドを評価する場合には「$record.」というプレフィックスをつけた上でフィールド名か、フィールドのインデックスでアクセスできるようなので、「支店名」列の値を判定したい場合には
「$record.支店名 = "大阪"」
と記載する感じでしょうか。

早速試してみます。…と、「$」と入力すると候補が表示されました!

「条件式」に「$」と入力すると候補が表示

入力補完機能があるんですね。これならどんなフィールドや変数を評価したいのか迷わず、間違えずに条件の設定が出来そうです。

条件式にフィールド名を入力

ちなみに、「$」を入力するとまずプレフィックスを選択できますが、ほかのプレフィックスが何を表しているかは以下になります。

  • $flow  ⇒  フロー変数
  • $exvar  ⇒  外部変数セット
  • $system ⇒  システム変数
  • $stream ⇒  ストリーム変数
  • $local  ⇒  マッパー変数
  • $prev  ⇒  直前のコンポーネントのプロパティ

この辺りは使用例と合わせてマニュアルに記載があるので、一読してから始めるといいかもしれません。

さて、評価するフィールドは候補の中から選択して、後は比較する値を入力すれば…

条件式の評価を行ごとに行なう

条件付レイヤーの完成です!
条件がついているレイヤーはタブに色がついています。

条件付きレイヤー「支店名=大阪」

同じように「支店名」が「仙台」のときのレイヤーも追加します。

支店名が「仙台」の場合のレイヤーを作成

条件付きレイヤー「仙台」が追加された

さて、次は「マッピング」です

ここまで来れば、もう簡単ですね。大阪、仙台それぞれで「単価」を計算して「値引き後単価」へマッピングするだけです。
こんな感じになりました。

大阪の値引率0.8を適用

仙台の値引率0.5を適用

分かりやすいようにデフォルトのレイヤー「レイヤー1」も「支店名=東京」にレイヤー名を変更して…

レイヤー名「レイヤー1」も「支店名=東京」に名称変更

完成です!コンパイルを通してみると…

Compiling project done

コンパイルも無事通りました!早速実行してみると…

フローの実行:正常終了

無事成功です!ファイルを確認してみると…

「支店名」列のデータに応じて「値引き後単価」が変化したCSV

しっかり、「支店名」列のデータに応じて「値引き後単価」の値引率が変わっています。
おー簡単に分岐処理が作れてしまいました。。。
複雑になりがちな分岐処理も、「条件付レイヤー」を使えば見た目もすっきりさせることが出来ますね。

また、プログラムだとスペルひとつ間違えただけでエラーになってしまいますが、入力補完機能もあるので安心して設定することが出来ます。
ただ、「条件付レイヤー」を使うときは条件の評価の順番や、マッピングされる順番など注意する点があるようなので、マニュアルの「マッピングと条件の評価の順序」の項目を確認した方がいいですね。

最後に

と、いうことで今回はここまでにしたいと思います。
どうですか?分岐処理も簡単に設定できそうな気がしてきませんか?
もちろん、分岐処理用のコンポーネントもたくさんあるんですが、そちらの体験はまた今度試してみたいと思います。

ここまでファイルの連携処理を行ってきましたが、次回からRDBとの連携処理にチャレンジしていきたいと思います。
DBからデータをファイルに出力する。実業務でもよくある使われ方かと思います。

次回はまず、RDBとの接続とデータの取得に焦点を当てて体験していきたいと思いますので、お楽しみに!



クラウド版

使い方いろいろ!
手ぶら de ASTERIA Warp
体験 5日間

サーバー準備の手間なくデータ連携ツール「ASTERIA Warp」の
全ての機能を5日間お試しいただけます。

今すぐ体験してみる 書籍の詳細についてはこちらをご覧ください。
基礎と実践 使い方マニュアル
著者:菊地 雄大

著者:
菊地 雄大

ASTERIA Warpのプリセールスエンジニア&体験セミナー講師。関係各所から舞い込んでくるASTERIA Warpに関するご依頼になんとか応えながら日々鍛えてもらっています!

「ASTERIA Warp、データ分析、クラウド、業務効率化、最新技術」人気!ホワイトペーパーダウンロード受付中!今すぐチェック
ASTERIA Warpと色々つないでみた特集!記事はこちら>

ASTERIA Warp 関連サイトのご紹介

X ASTERIA Warp Developer Network(ADN)サイト

技術情報をお探しの方

ASTERIA Warp Developer Network
(ADN)サイト

ASTERIA Warp製品の技術情報やTips、また情報交換の場として「ADNフォーラム」をご用意しています。

X ASTERIA Warpユーザーグループ(AUG)

ASTERIA Warpデベロッパーの方

ASTERIA Warp オンラインコミュニティ
ADN slack

ASTERIA Warpデベロッパー同士をつなげ、技術情報の共有やちょっとしたASTERIA Warpの疑問解決の場とすることを目的としたコミュニティです。

X ASTERIA Warpユーザーサイト

ASTERIA Warpユーザーの方

ASTERIA Warpユーザーサイト
Login

製品更新版や評価版のダウンロード、各種ドキュメントのご提供、また 技術的なお問合せもこちらで受付ています。

X ASTERIA Warpパートナーサイト

ASTERIA Warpパートナーの方

ASTERIA Warpパートナーサイト
Login

パートナーライセンスの発行や各種ドキュメントのご提供をしています。

ページ先頭へ