Designer:重要な情報が空白は有り得ない!

キー項目

生成キーワード『区分』は、分類類いにすれば行方向へ出力する項目の集約、そして見出し類いにすれば列方向へ出力する項目の集約を成しますね。これは結局のところ、今現在読み込まれた 1データの集約項目の値と、これまでに出力した既存データ或いは雛形シート上の既存情報と、値を照らし合わせていることを表します。このように重要な役目を持った主要情報は、キー項目(情報)とも表現されます。

f:id:xoblos:20190208110654p:plain

上図のように項目「ID」は『区分』を「詳細行」にしているので、そのキー項目に成ります。しかし項目「Desc」の値が「item4」であるデータはいずれも、キー項目「ID」に値が入っていませんね。一応抽出の時点では全てのデータが対象に成りましたが、果たしてキーが「null」のものは「null」同士、集約されるのでしょうか。‥‥いいえ、処理対象外に成ります。

重要な情報であるのにも拘らず値が無いというのは、システムの世界では考えられないものである為です。選択/スキップ条件も何も施していないのに、生成データの件数が合わないと思われた場合には、続いてキー関連(分類/見出し/エリアキー)を『区分』に設定した項目の値に、「null」のものが無いかを確認しましょう。データだけではなく、雛形シート上の既存情報も同じです。分類や見出しの並びに、途中空白セルが無いかを注視しましょう。特に結合されたセルは要注意です!(参考‥‥結合されたセルの役割

Designer+SQL:異なる環境のデータベース参照

ポート番号を目印に

自環境であれば、比較的設定が容易なデータベース抽出。これが他環境へ跨いでの参照と成ると、xoBlos 以外にも設定事項が色々と出てきます。‥‥我々と同じです。見ず知らずの方と、即座に「ご自宅お邪魔します。」「どうぞどうぞ。」というスムーズな交わしは成立しません。

f:id:xoblos:20190125111753p:plain

いくら相手から「どうぞどうぞ。」と言われても、場所が分からなければ訪問できません。その為、目印としてポート番号を任意の値で決定し、関連する通り道に全て示しておきます。簡単に表現すれば住所の番号です。

先ずアクセス元は、Designer でいつもどおり接続設定を行います。ただ環境を跨ぐことで一つだけポイントに成るのは、『Data Source』項に「対象マシン名\対象インスタンス名」だけではなく、更に「,対象ポート番号」(カンマ対象ポート番号)を指定することです。コロン「:」ではありません!

次にアクセス先は、このポート番号に対して外部からのアクセスを、ファイアウォールの設定で許可します。更に、対象インスタンスプロトコルTCP/IP」のポートにも、同じ番号を設定します。「どうぞどうぞ。」はここで初めて表現出来ますね。

<アクセス元>
・Designer で Data Source 項に「,ポート番号」は忘れずに!

<アクセス先>SQL Server
 - Management Studio で対象 DB のプロパティから「リモート接続」を許可!
 - Configuration Manager で対象インスタンスプロトコルTCP/IP」の
  IPアドレスを有効にし、「TCPポート」にポート番号を設定!

Designer:不定な数の項目を連結する

最初の項目が定まらない

抽出と生成の両方にあるキーワード『取得データの組合せ』。複数の項目の値同士、或いは固定の文字列を連結する要件で活躍します。しかしその内、値が無い(空白の可能性がある)項目が対象と成った場合、文字列の連結はどのようにすれば良いのでしょうか。‥‥何ということはありません。空白は空白でしか置き換わらないので、通常と同様で特別な設定は要りません――

では。‥‥いえ寧ろ普通はあると思いますが、項目(値)間に区切り文字がある場合は、どのようにすれば良いでしょうか。

f:id:xoblos:20190104135917p:plain

ここでは、区切り文字を全角のスペース「 」にしましょう。上図は入力データですが、「a b c」等のように成れば期待値です。値の文頭前と文末後にもスペースは合ってはなりません。つまるところ、左詰めに文字列が収まり、各値の間にのみ全角スペースが入れば完成です。

f:id:xoblos:20190104135935p:plain

曲者なのは、最初と最後の項目が徹底していないことです。これをカバーする為、上図の抽出制御シートは少々乱暴ですが、4つの項目いずれも『取得データの組合せ』で全角スペースを頭に付加し、それらをすぐさま連結しています。また空白をカバーする為に、『データが無いときの値』で「ネコ」という値を設定しています。これにより、どのデータも必ず「 文字 文字 文字 文字」となります。

これを前提に、生成の制御シートでは先ず空白情報を持つデータから対処します。‥‥抽出の段階で空白は、正式には「 ネコ」に成りましたね。これを、『文字列編集』で Null(文字列無し)に置換します。すると、個数が不定でも「 文字」×nを持ったデータに成ります。

残された共通問題は‥‥もう簡単ですね。各データ、最初の(項目分の)全角スペースが "固定で" 残っていますので、『取得データの切り出し』で、2文字目から取り扱うことにしましょう。

f:id:xoblos:20190104135942p:plain

期待する生成結果に成りました。参考で列「A」~「D」も出力していますが、不要であれば無論、『セット先セル』を未設定にすれば良いだけです。

これが最終生成結果でなく中間処理であって、且つ Excel の関数に慣れている人は、これまでの面倒な設定は一切不要とし、雛形シート上(列「E」等)に「=TRIM(" "&A2&" "&B2&" "&C2&" "&D2)」等を置かれることでしょう。

Designer:零件データでの生成処理

雛形を保持出来れば良いと考える

新規追加データは、ひな形行やひな形列の情報(レイアウト)をコピーして生成されていきます。生成の処理が完了したら「ひな形」と呼ばれる部分は不要なので、全て自動で削除されますね。

しかし追加データが零件であった場合はどうでしょう。たとえ零件であっても、「零件のデータを生成した」という正常な処理なので、生成の手順は勿論エラーになりません。そして「ひな形の行/列」は削除されます。

f:id:xoblos:20181228115949p:plain

上図のように、ひな形の行が消えると見栄えの悪い結果で終わるケースがあります。データが無かったことを、空白行で示す‥‥もとい、雛形シートから微動だにしなかった生成結果が理想的である場合もあります。

空白行の作成方法は前回記事でお話しましたが、結局のところそれは、データあった場合のデータ群とどう使い分けるかが求められてしまいます。使い分けの条件処理を置くのであれば、初めから「零件でなければ生成処理は行う。」と「零件であれば生成処理は行わない。」という判定を置く方が手っ取り早いです。生成処理を行わないということは、雛形シートは何も手が加えられない為です。

f:id:xoblos:20181228115956p:plain

f:id:xoblos:20181228120003p:plain

重要な部分は、赤枠部分です。また、このお話は生成制御シートと雛形シートが別ブックであることが前提であり、つまるところ既存ブック生成に成ります。緑枠が設定例です。

Designer:繰り返し数の判断基準ファイル

項目名が無い CSV

f:id:xoblos:20181217112627p:plain

繰り返し処理で、繰り返し数の判断基準となるファイルは、XML 以外にもテキスト(TXT)や CSV 形式も設定可能です。XML は下図のように、データだけではなく項目名持っていますので、項目変数「$(item:"項目名")」も使用可能であり、「$(item:"事業所")」等にすれば回転の都度、事業所の値をパス/ファイル名/シート名等に設定可能です。

f:id:xoblos:20181217112636p:plain

CSVXML と同様に、データと項目名の各行があれば良いのですが‥‥。では項目名の行が無い CSVは、繰り返し基準ファイルの設定は行えても、項目名変数をどのように設定すれば良いでしょうか。

上図例のように、1行目からデータが始まっている CSV は、カンマ単位で「Item」という文字と通し番号で、内部に項目名を持ちます。つまり、事業所CD の「1」「2」「3」を参照させるには「$(item:"Item1")」、事業所名の「東京事業所」「横浜事業所」「大阪事業所」を参照させるには「$(item:"Item2")」のように設定します。小文字「itemX」ではありませんのでご注意ください!

Excel:拡張子「.xlsx」「.xlsm」「.xls」を意識しないで読み込み、形式判定処理する。

Excelファイル(ブック)の形式で、ビジネス、業務によく登場するのは下記の3種類。拡張子が違うため、Excelブックを読み込む業務アプリケーションでは、普通、判定と処理の振り分けが難しい原因となっています。

.xlsx Excel 2007 以上のExcelブック形式
.xlsm Excel 2007 以上のマクロ付きExcelブック形式
.xls  Excel 97 - 2003 のExcelブック形式

xoBlosの抽出エンジン(Exporter)の場合、入力設定の「ファイル名」に次のように設定すれば、3種類の拡張子名、ブック形式を意識することなくExcelブックを読み込み、自動処理することができます。

   入力設定の「ファイル名」

        販売計画データ.xls*  

「*」の部分は、0文字以上の文字にマッチしますので、.xlsx でも .xlsm でも .xls でも自動で形式判定して処理します。  

 

xoBlos corabo では、次の「ファイル名フィルタパターン」設定(サイト管理者画面)で同様のファイル指定ができます。

  「ファイル名フィルタパターン」

        販売計画データ.xls*

Designer:複数のExcelブック、シートから連続してデータを抽出する。

xoBlosのデータ抽出処理でよくあるのが、このケースです。

入力Excelシートの形式が同じである場合、複数のExcelブック、シートからデータを同じように抽出するには、「Excel表から抽出」の設定画面で以下のように設定します。

 複数ブックの必ず第1シートから抽出する場合

入力設定

     ファイル名     INPUT\売上*.xls

     シート名      ?1

出力設定

     ファイル名     XML\%Book%.xml

  %Book% の部分が入力ブック名に置き換えられ、出力XMLファイルは、入力ブックの数だけ出力されます。  

 複数ブックの複数シートから抽出する場合

入力設定

     ファイル名     INPUT\売上*.xls

     シート名      売上*

出力設定

     ファイル名     XML\%Book%_%Sheet%.xml

 %Book% の部分が入力ブック名に、%Sheet% の部分が入力シート名に置き換えられます。

 上記の2つのケースとも、後続のExcel表生成処理でXMLファイルを入力するときに、「Excel表を生成」画面の基本入力設定で、*(ワイルドカード)を指定することにより、抽出された複数のXMLを入力することができます。

また、「抽出データの並べ替え」処理で、一つのXMLファイルに連結(マージ)しておいてから入力する手法もとれます。