キーワード『取得データの組合せ』の落とし穴

項目の記述順が問われる!?

「制御シートのデザイン、記述順は余り問われない。」‥‥序盤はそのように教わる、捉えられるかもしれません。しかしキーワードの処理順序や仕様、よっては項目の記述順が問われてくる場合もあります。

取得データの組み合わせを設定した項目は、参照先項目より左側に置いてはいけないとかでしょう♪」‥‥いいえ?左右正しく置いても、落とし穴があるのです。

f:id:xoblos:20180713162528p:plain

それでは上図、一見何の変哲も無い生成制御シートを題材にしてみましょう。特別なことと言えば、キーワード『取得データの組合せ』だけで、「年」/「月」/処理年と処理月と固定文言を組み合わせた文字列を 1項目――計 3項目を生成するものですね。

f:id:xoblos:20180713162534p:plain

さて‥‥実行してみましたが、残念な結果に成って仕舞いました。何故、「%」で変数を示しているのにも拘らず、文字列と見做されて仕舞ったのでしょうか。

仕組みのお話になりますが――『取得データの組合せ』は、設定内容を基準として見て置き換えているのではありません。①先ず、キーワード『入力項目名』に設定した項目を、左から順に見ていきます。②次に、項目を見る都度、項目名を「%」で囲みます。③続いてその上で、『取得データの組合せ』の設定内容に照らし合わせます。④設定内容に「%項目名%」を見つけ次第、その項目が保持している値に置き換えます。‥‥もうお分かりですね。制御シート上の設定値「%処理年%%処理月%月度」は、項目「年」を真っ先に見つけたことで、「%処理年%年%処理月%月度」と判断されたのです。

この問題を解消する方法は簡単です。項目「年」を、項目「処理月」より右側に書き直しましょう!

様々な今日(システム)日付の取得方法

有効性と有用性の境目。

f:id:xoblos:20180704145737p:plain

入力データから、"今日(システム)日付" を得る手段は、数あります。それこそ――たとえ何処にも明示されていなくとも、xoBlos の内部処理や Excel の関数等で得ることができますので、業務実行時の日付/日時を記録として残したい場合は深く考えず、安心して設計を行ってください。

しかしいずれの手段も、得失が必ず存在します。いくら汎用性を重視しても、慣れていない操作が発生すればそれは手間であると抱かれるでしょう。

ブック名/シート名から得る(冒頭画像①/③)

f:id:xoblos:20180704145747p:plain

こちらは、xoBlos の予約変数です。ブック名とシート名に間違いが無ければ‥‥情報としては確かなものですが、現実的ではありませんね。更に得た内容は日付書式ではないので、抽出キーワード『日時指定』で書式変更はできません。更に生成キーワード『日時指定』では「Custom」が使えないので、生成時点でも書式変更ができません。つまり、書式変更する場合には中間処理を設けなければならないのです。

"日時関連の" 予約変数から得る

前節の方法から出た問題を楽に解決させるには、抽出キーワード『対象セル』に対し、「%Today」或いは「%Now(書式パターン)」を設定することです。抽出制御シートのリファレンスにも注記がありますので、ご確認ください!

Excel 上から得る(冒頭画像②)

f:id:xoblos:20180704145753p:plain

入力データ上に "今日日付" があれば、それも纏めて抽出しておくと楽ですね。これならば抽出キーワード『日時指定』は使えます。しかし資料上に、システム情報がデータレベルで並んでいることは、かなり珍しいでしょう。Excel の関数(冒頭画像例示の「TODAY()」のように)であれば、日付値の保証はありますが‥‥Excel の自動計算が「手動」になっていたり、関数でなく固定値であったりすると、不確かな情報を得る心配があります。

実行者に入力して貰う

f:id:xoblos:20180704145758p:plain

こちらは『業務変数』を定義し、我々が "今日日付" を伝える手段です。業務の実行者が入力を間違えさえしなければ‥‥という問われがあります。しかし前日中に作業が完了せず、どうあっても "今日日付" として処理したくない――等の場合に、日付操作できる面はありますね。

corabo から実行する業務であるならば、変数名を入力する欄のプルダウンから「システム日付を取得する予約変数」を選択することもできます。自動で取得されるので、入力する必要はありませんね。これは将来、Designer 単独でも扱えるようになるかもしれません!

f:id:xoblos:20180704145804p:plain

後は業務ファイル(.xob)の『制御シートの書き換え設定』で実現可能です。抽出キーワード『対象セル』に固定値を指定する場合は、値の先頭に「#」を忘れずに付けましょう。‥‥しかし "書き換え" を行うので、万一制御シートの修正が発生した場合には、書き換え先が変動しないよう注意が必要です。なお『制御シートの書き換え設定』は、「%BOOK%」や「%SHEET%」をあて込むことができません

XML を編集する手順を使う

f:id:xoblos:20180704145810p:plain

こちらは業務ファイル(.xob)内、手順種『抽出データ編集』にて実現可能です。XML to XML なので、中間処理のように 2手順(抽出⇔生成のワンセット)ではなく、1手順節約することができます。抽出キーワード『日時指定』のような加工も可能です。‥‥ただご覧のとおり、制御シートとは別で編集定義用の XML を 1から作成しなければなりません。制御シート以上に、専門性/見易さ/修正のし易さを問う方が多いのではないでしょうか。

xobQuery を使う

f:id:xoblos:20180704145816p:plain

SQLxobQuery)に慣れている方は、一目散にこの手段を選択されることでしょう。しかし上図のように XML の項目に、明示的に項目名を設定しないと大文字は小文字になるので、生成キーワード『入力項目名』の設定時には注意が必要です。前回記事のような手段もあります。また日付書式も、上図クエリの時点で整える必要がありますね。

さて、どの手段が全面的に最良であるか‥‥皆様の中で整いましたでしょうか――。

値のソート(並べ替え)

xoBlos が取り扱う書式。

xoBlos では、抽出~生成時点で関わる "値" は基本「文字列」として扱います。たとえ抽出元の内容が通貨であろうが指数であろうが、文字列として扱います。勿論キーワード『日時指定』等は、「この値は先ず日付/時間として見れるものであろうか‥‥」と xoBlos は確認してくれます。

「数値の世界」と「文字の世界」の差

f:id:xoblos:20180628163954p:plain

xoBlos が基本「文字列」として扱っているのを、生成キーワード『並べ替え』を例に、明かしてみましょう。上図は、基本入力ファイルです。数値データが一つだけあり‥‥これを、「昇順に並べ替えて!」というような要件が挙げられた場合の対応例を、以下に示します。

f:id:xoblos:20180628164000p:plain

‥‥「並べ替えて!」という要件を単純に受け、キーワード『並べ替え』に設定しましたが、昇順になりませんでしたね。この結果は、各値を "文字列" として扱い、並べ替えていることによるものです。

文字列であるからとは言え、何故桁数順――期待するように並ばないのでしょうか。‥‥数値でないものを思い浮かべてみてください。

「あ」「あい」「あいす」「い」「いす」「ね」「ねこ」「ねこやなぎ」
→「あ」「い」「ね」「あい」「いす」「ねこ」「あいす」「ねこやなぎ」

‥‥このようにソートされても、困りますよね。

f:id:xoblos:20180628164007p:plain

先程との差は、キーワード『並べ替え』の設定値を「1, n」としたことです。「n」は数値比較を表しています。文字列として扱われる仕様から、一時的に "数値" として扱うのを、xoBlos に伝えていることになります。

★キーワードは『並べ替え』です。『並替え』ではないのでご注意ください。

今回は生成制御シートでのソート方法でしたが、業務ファイル(.xob)内でのソート方法は前回記事をご参照ください。

Excel表生成処理を更に高速に:[順序処理] キーワード

[高速生成エンジンを使いますか?]「はい」に設定することにより、
Excel表生成手順の処理速度が、Microsoft Excel で開いて処理するより30倍以上
高速になること。皆様、実感を持ってご存知かと思います。

高速生成エンジンを使っても、まだ遅いと思われる処理に関しましては、
生成用制御シートのキーワードである、[順序処理] キーワードの使用もご検討ください。

f:id:xoblos:20180617123046p:plain


[順序処理] キーワードは、縦に行を生成していく多くのケースに適用できますので、
使用できない場合の制約事項(後述記載)を参考にして使用してみてください。100倍以上の高速化の効果が出ることもあります。

最近のユーザーサポート事例では、分類項目が「大分類」、「中分類」、「詳細行」
の3階層で約12万行ある入力データから、分類のセル結合処理を施したレポートを作成する処理が10秒で完了しました。[順序処理] キーワードを入れないと40分以上はかかっていた処理です。

[順序処理] キーワードが使える場合と使えない場合(xoBlos 開発エンジニアより)

順次処理=yesは技術講習会でも必ず取り上げる高速化手法です。

区分がDataシート固定だけのImportは極めて高速になるのはご存じと思います。これはImporterが全く別のモードで動作するからです。
順序処理=yesはたとえ分類系があっても、Dataだけと同じモードで動作していいよとxoBlosに送るヒントです。

順序処理=yesが意味を成すのは以下の条件のときです。

  1. 追加入力セクションがない。
  2. 見出し系(「大見出し」、「見出し」などの見出し項目)がない。
  3. スキップ行の指定がない。
  4. 塗りつぶし、加減算、表示形式使用、日時指定、通貨指定、空データの上書き禁止がない。(あっても、実質指定されてなければOK)
  5. 条件塗りつぶしがない。
  6. 帳票印刷指定がない。
  7. 値確定セルがない。

以上の条件を満たさないと、たとえ順序処理=yesと指定しても、高速動作にはなりません。 (ヒントである所以です)

ただし、入力のXMLの順序で、分類系のキーが正しくまとまっている必要があります。(内部の並べ替えでもOKです)

キーでまとまっていれば、必ずしもソートされている必要はありません。
分類系のキーが正しくまとまってなくても、実行はされますし、エラーにはなりません。(可能な限りのセル結合は行います)

高度選択条件やシート分割も使えます。変換入力も使えます。

但し、分類系のプリセット(値を事前に設定しておく)は使えません。
順序処理=yesでは、分類系を指定できるので、当然セル結合も可能です。


順序処理=yesではないですが、区分がDataだけのときの高速処理は、1レコードで複数行になるものも問題なく高速動作になります。(以外に知られていませんが)

 

corabo が使用するサービス

環境面のエラーはサービスの状況を確認!

corabo は、専用の情報をデータベース(SQL Server)で管理し、.Net Framework の領域内で動作し、IIS で視覚的操作を可能にしています。‥‥と、言うことは xoBlos ならではでなくとも、関係してくるバックグラウンドサービスが、幾つかあるということですね。

f:id:xoblos:20180614113324p:plain

上図は一例ですが、サービスの一覧はコントロールパネルの「管理」から参照可能です。corabo 実行中に環境水準なエラーメッセージが出る、或いは corabo の画面すら起動しない、等があれば‥‥先ずサービスの稼働具合を確認しましょう。無論メンテナンスする際にも、確認範囲は同じです。

上図例に限らず、以下のようなサービスが、corabo に関係しています。

ASP.NET State Service(ASP.NET 状態サービス)
・SQL Server (インスタンス名)
 →インスタンス名部分は例えば SQLEXPRESS です。
・World Wide Web Publishing Service(その物+以下関連)
 ├ Windows Process Activation Service
 ├ Remote Procedure Call (RPC)
 ├ DCOM Server Process Launcher
 └ RPC Endpoint Mapper
・xoBlosLockService(上図例)

xoBlos Server Host

f:id:xoblos:20180614113823p:plain

こちらも、corabo に於いて必要な稼動物であり‥‥「サービス中」とありますが、前節までの「サービス」とは全く別物です。ご注意ください。

CSV ファイルの Excel 抽出時の注意点

CSV の正式な確認方法

xoBlos の業務で、入力データとして登場するファイル形式の一つ、CSV。Office を入れられている方からすれば、「Excel の一種!」というご意見が挙げられることもあるでしょう。

しかし Excel と思われてしまうのは、『アプリケーションの関連付けが Office(Excel)にされている』、或いは『CSV ファイルを開くのに Office(Excel)が推奨されている』等の面に縁るのです。

f:id:xoblos:20180605134734p:plain

CSV は上図、上部のようにメモ帳やテキストエディタで、開くこと/開いた見た目 = 正式/正確です。確認するだけでなく、編集するなら尚更です。Excel で開くと上図、下部の「No」のように Excel ならではの表現に書き換えられてしまうものもあるので、確かな情報が得られませんし‥‥このまま編集すると、誤った情報で更新しかねません。これは、xoBlos を通しても同じことが言えます。

CSV に対する制御シートでの抽出

xoBlos では、CSVExcel として見て抽出することができます。前節のような注意点はありますが、「CSV のヘッダ行に、XML に使用できない項目名がある!(前回記事」や、「形式は CSV であるけれど、レコードによって列の量が変動する!(前回記事」等の場合に、制御シートを用いる抽出方法が活躍します。

Excelから抽出』の手順が使えるということは、『高速抽出エンジン』が使用できる?‥‥とも思われるかもしれませんが、CSV に対しての高速エンジンの使用は推奨しません。以下の仕様を、理解しておきましょう。

CSVExcel として取り扱う上で、一回の処理に 3回ファイルは開かれている。

「C:\Users\ユーザ名\AppData\Local\Temp」に出来上がる一時ファイルは、
上記のとおり「3つ」出来上がる。
→文字コードの認識や、同容量の Excel を一時的に作り上げる分等によるもの。
⇒高速エンジン使用すると、一時ファイルは消えない為、
 C ドライブの容量が増えていく

CSV で困った時はこちら

Excel の親切機能に笑顔で対応する

親切が "仇" に。

f:id:xoblos:20180522114632p:plain

上図は一見して、特に難しくはない抽出用の制御シートですが、作成途中です。出力項目である「売上」は、セル「AUG2」を対象にしたく‥‥更に隣のセル「AUH2」からは、「bve」という項目名として抽出を行おうとしています。

しかし作成者は、頭を抱え込んでいます。一体どうしたのでしょうか。‥‥列が「AUG」という、果てしない範囲に困惑しているのでしょうか?いいえ、実際に 3000列程の項目を取り扱ったお客様も前例としてあります。

f:id:xoblos:20180522114717p:plain

作成者は、セル「AUG2」と値「bve」をひたすら入力しています。ところが上図の状態が繰り返されるだけで、いつまで経っても完成しません。

AUG2」という入力に対し、Excel は「August の 2(8月2日)」と解釈し、親切に日付書式に変えてくれます。

一方「bve」に対しては、Excel は「キー[b]とキー[v]は隣同士であるから、ユーザはタイプミスしたのかな?そうすると英単語の『be』と入力したかったのかな?」と解釈し、これまた親切に正しい文字列に変えてくれます。

f:id:xoblos:20180522114724p:plain

AUG2」を A1 表現しなければ良いのでは?という方。「(2,1229)」では、新たな問題に直面することでしょう。その為、セルの書式を予め文字列にしてから再入力することで、本件は解消します。‥‥「bve」は上図のように、入力文字の自動修正(オートコレクト)機能の設定に及びます。変更、削除等は皆様次第です‥‥

Excel に限らず、Word や PowerPoint 等といった Office 製品が、大抵デフォルトで設定されている事項です。「bve」等を実値として扱われる方は、この仕組みを不親切と捉えられるかもしれませんね。