pentaho data integration を使ってSalesforceのデータを抽出したり更新したりする話11(文字列結合)

2つの文字列を結合するときに、nullが存在する可能性がある場合は注意が必要です。

例として。
入力ファイルに適当な文字列を作る。
2015-09-14_pentaho06.jpg

ktrは計算を入れる。
2015-09-14_pentaho07.jpg


計算はA+Bにして文字列を結合させる。
2015-09-14_pentaho08.jpg

その結果。
2015-09-14_pentaho09.jpg

nullな項目があると、結合してくれないです。空文字として扱ってくれないのですね。



そこで対処ですが、どうしても計算でがんばりたい場合はちょっとしんどいですが各項目をnullかどうかフィルタをかけ、場合分けしていけばなんとかなります。
2015-09-14_pentaho10.jpg

片方がnull、もう片方は値ありの場合は、計算の「フィールドAの値をコピー」で結合結果の列に値をコピーします。
または、、フィールド値設定のステップでコピーをしてもいいかもしれません。
2015-09-14_pentaho11.jpg

両方nullの場合は、結合結果の列に空文字を入れるという意味で、定数追加を入れておいてあげます。

これで、無事結合できました。
2015-09-14_pentaho12.jpg



しかし、このやり方は見づらい、しんどい。
ので、javascriptまたは数式を使うとすっきりします。
javascriptだと以下のような例になります。
2015-09-14_pentaho13.jpg

javascript内で結合の式を書いてあげる。っと
2015-09-14_pentaho14.jpg


var ketugou = "";
if(文字列その1 != null && 文字列その2 == null){
    ketugou = 文字列その1;
}else if(文字列その1 == null && 文字列その2 != null){
    ketugou = 文字列その2;
}else if(文字列その1 != null && 文字列その2 != null){
    ketugou = 文字列その1 + 文字列その2;
}

これで、だいぶすっきりしました。



数式の場合は以下のような感じです。
2015-09-14_pentaho15.jpg

数式でもNullチェックは入れてあげる必要があるみたいです。IFNAを使ってみました。
2015-09-14_pentaho16.jpg

IF(ISNA([文字列その1]);"";[文字列その1])&IF(ISNA([文字列その2]);"";[文字列その2])


数式を使ったほうが処理が早いってうわさをどこかで聞きましたが、javascriptのほうがメンテナンスしやすいかと思います。
お好みでしょうか?






pentaho data integrationの話は、ここでネタ切れのため、いったん終了です。
また何か新しい発見があった場合はメモしていきます。

データローダの代わりに使うってことで勉強したけれど、まあ意外とクセがあってどっちもどっちですね。
データ量が多くてExcel操作をするとよく固まる。っていう場合は試してみてもいいかと思います。
少量のデータでうまくいくか試しておけば、大量データでもkrtを使いまわせるのは強みだと思っています。

--------------------------------------------------------------------------------------

pentaho data integration を使ってSalesforceのデータを抽出したり更新したりする話10(テキストファイル入力)

Excelではなく、文字コードがShift-JIS形式のcsvファイルでデータを取り込んで頂戴。
という話をいただいたのでやってみたら、あらら?となったのでメモです。

適当なShiftJISのテキストファイルを用意して。
2015-09-14_pentaho01.jpg

pentahoではテキストファイル入力(またはCSV入力)を選択。

2015-09-14_pentaho02.jpg

Shift-JISのファイルだから、文字コードをShift-JISにして・・・。
2015-09-14_pentaho03.jpg

プレビューしてみる。
2015-09-14_pentaho04.jpg

この時点でダッシュ―がハイフンかな?に変換されてしまいます。
たまたま見つけた例がこれだったのですが、他の文字でも起こるかも?


っで、対処。
案1。入力ファイルをUTF-8する。pentaho設定もUTF-8に。そうするとうまくいくようです。
案2。これは絶対とはいえないのですが、入力ファイルはShift-JISの場合、pentahoでは『whindows-
31j』にするとうまくいくみたいです。

2015-09-14_pentaho05.jpg

--------------------------------------------------------------------------------------

pentaho data integration を使ってSalesforceのデータを抽出したり更新したりする話9(環境変数)

「環境変数をテスト環境・本番環境で簡単に切り替えるには、kettle.propertiesを使ってね。」
なんて記述がいろいろあります。

参考
http://forums.pentaho.com/showthread.php?137008-kettle-properties%E3%81%AE%E9%85%8D%E7%BD%AE%E5%A0%B4%E6%89%80%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B

http://www.pentaho-partner.jp/blog/2010/07/tipskettledb.html

ただ個人趣味で使うだけならそれでいいのですが、
-------------------------
ITリテラシーのちょっと低めな顧客相手に、
『「/home//.kettle」にこちらで用意したkettoke.propertiesを配置してね。』
と依頼するのはちょいと厳しい。
------------------------
とPMや顧客のIT担当に言われる。
「パラメータのファイルがある場所は万人共通の場所にしてほしい」と頼まれてしまいました。
また、「pentahoで提供されているbatを書き換えるのは禁止」とも。


というわけで、考えた対処は以下の通り。

まずはExcelにパラメータ扱いさせるデータを用意。
2015-09-11_pentaho02.jpg

次にExcel⇒変数設定をするだけのktrを作成。
2015-09-11_pentaho01.jpg

変数設定はフィールドの取得で自動としました。変数のスコープは用途によると思いますが、「Valid in the root job」にしておく。
2015-09-11_pentaho07.jpg


次にジョブを作成。
ジョブの最初に変数設定のktrを配置し、次に本命のktrを動かす。っと
2015-09-11_pentaho03.jpg

ジョブにある本命のktrプロパティのパラメータ設定にて、値を${パラメータ名}にしてktrに値を渡す。
2015-09-11_pentaho04.jpg


本命のktrでは、パラメータは空文字でOK
2015-09-11_pentaho05.jpg

そして、本命処理のステップにパラメータを設定してあげる。
2015-09-11_pentaho06.jpg


これで、pentaho配布する際にパラメータ込みでzipに固めて顧客に渡す。っというようにしてむりやり解決させました。


--------------------------------------------------------------------------------------

pentaho data integration を使ってSalesforceのデータを抽出したり更新したりする話8(日付時刻)

日付項目をSalesforceに登録・更新するときは、ずれたりずれなかったりしますけど、日付/日時の場合はどうなんですかね?

以下のようにExcelに「2015/9/1 16:00」という時刻項目(書式:日付yyyy/m/d h:mm)を用意しまして。
2015-09-07_pentaho01.jpg

単純にSalesforce更新につなげてみる。
2015-09-07_pentaho02.jpg

Excel入力のフィードはこんな感じ。
2015-09-07_pentaho03.jpg

その結果、あら普通に入ったわ。
2015-09-07_pentaho04.jpg


--------------------------------------------------------------------------------------

pentaho data integration を使ってSalesforceのデータを抽出したり更新したりする話7(日付項目)

日付項目をSalesforceに登録・更新するときは、データローダのときと同様1日ずれたりずれなかったりとしますので、注意が必要みたい。


たとえば、以下のようにExcelに「2015/9/1」という日付項目(書式:日付yyyy/m/d)を用意しまして。

2015-09-04_pentaho01.jpg

こんな感じで単純にSalesforce更新につなげてみる。
2015-09-04_pentaho02.jpg

ちなみに、Excel入力のフィードはこんな感じ。
2015-09-04_pentaho03.jpg

これで実行ってしてみると、1日ずれてしまいます。
2015-09-04_pentaho04.jpg


対処方法について。
Excelのフォーマットを直接いじる・・・ってするとデータローダ使えばいいじゃーん。ってなるので、できるだけPentahoでできる方法を模索していきます。


案その1.文字列にしちゃう。

更新の前に選択/名前変更を入れてあげる。
2015-09-04_pentaho05.jpg

メタ情報タブにて、データタイプをString、書式をSalesforceにあわせてyyyy-MM-ddにします。
2015-09-04_pentaho06.jpg

こうすると、2015/09/01で登録・更新される模様。
2015-09-04_pentaho07.jpg


--------------------------------------------------------------------------------------

このブログについて
  • 全記事一覧(時間順)
  • このブログについて
  • 私のプロフィール
  • 当ブログで扱っている動画について
  • 記事違いなコメントのお返事

  • カテゴリー
    twitter
    カレンダー
    08 | 2015/09 | 10
    - - 1 2 3 4 5
    6 7 8 9 10 11 12
    13 14 15 16 17 18 19
    20 21 22 23 24 25 26
    27 28 29 30 - - -
    Amazon
    でたらめな当ブログにぴったりな商品を自動で表示するみたいです。



    月別アーカイブ
    プロフィール

    たづみ

    Author:たづみ
    ・1981年生まれの男
    ・もう少し詳細なプロフィールはこちらで

    最新コメント
    アクセスランキング
    [ジャンルランキング]
    日記
    1757位
    アクセスランキングを見る>>

    [サブジャンルランキング]
    会社員・OL
    357位
    アクセスランキングを見る>>