SSブログ

プログラマではないけど Visual Studio LightSwitch でカンタン業務アプリを作ってみる(2)~パラメター入力窓からの検索 [BI]

最近じわじわいじり始めています。どうやったら機能を実現できるかを調べるTODOはいろいろあるのですが、今回は画面にパラメター入力窓を用意して検索する、を解説します。

○意外と説明が無いパラメター入力窓からの検索
LightSwitchで標準的に用意されている検索窓(1行入力ウィジェット)があります。しかしこれは全項目のあいまい検索のため、例えばある一定以上の数量を抜き出して表示、などができません。割と解説されていそうなんですが、How Do Iシリーズを見ても説明が無く、テキトーにごちゃごちゃやってもうまくいっていなかったので困窮していたんですが、この前ようやく使い方が分かりました

○データセットクエリと画面クエリ
まずこれを簡単に解説します。LightSwitchは1つのデータセットに対して複数の画面を作ることができます。クエリはデータセットに対してと画面に対して作ることができます。なので、複数画面で同じデータセットを利用する場合、同時に同じフィルタをかけたい場合はデータセットに対するクエリを変更し、ある画面だけにフィルタをかけたい場合は画面に対するクエリを作ってください。

(画面のクエリとフィルタの関連のつけ方)
scrn1.png

ちなみにパラメターもデータセットに対するクエリパラメターと画面のプロパティというのが分かれています。これを繋げるには(パラメターバインド)画面のようにパラメターバインドすると関連を取ることができます。

(スクリーンプロパティとクエリパラメターの関連のつけ方)
scrn2.png

○パラメターを入れられる場所
さて、これでスクリーンパラメターを画面のどこかに作れれば望むものができるのですが、若干コツがあります。基本的には新しい項目は縦横のグリッドかマトリックスに入力するか、コマンドバーに入力するか、の方法しかありません。レイアウトを詳細に調整したいときは縦横のグリッドかマトリックスに入力、とりあえず試してみたいときは画面コマンドバーにスクリーンパラメターをドラッグして配置してください。

(配置した後のスクリーンパラメター
scrn3.png

さて、これでビルドするとようやく望むものが出来上がります。

(完成画面)
scrn4.png

次回以降もLightSwitchの小技を掲載していきます。

Jasper Server (CE 4.2.1) でMobile BI を試す [BI]

Jasperserverはバージョン4.2.0からモバイル端末からのアクセスができるようになっています。試してみたところ最新版のCommunity Editionでも使えるようでしたので、簡単な設定方法と使用感を書いておきたいと思います。
○そもそも今のMobile端末のブラウザからJasperserverにアクセスするとどうなるのか?
iPhoneのSafariから見るとこうなります(笑)。
IMG_0585.PNG

○設定
iPhone(iPad)の場合で説明します。
(1)アプリをダウンロードします。JasperMobileという名前です。
IMG_0583.PNG

(2)アプリの設定をします。Community EditionではOrganizationを設定できない(と思います)ので適当な名前を入力します。
IMG_0584.PNG

(3)アクセスします。Mobile版で最もMobileっぽく実装されているのはレポジトリのところです。Reports→Samplesという階層をiPhoneのUIでたどれます。
IMG_0587.PNGIMG_0586.PNGレポートを開こうとすると以下の画面になります。HTMLとPDFは結果を見ると何が違うのか分からないのですが自分の環境ではPDFがこけることが多かったです。IMG_0588.PNG
HTMLのボタンを押すと以下のようになります。IMG_0589.PNG
なるほどー。まあダッシュボード機能が使えないCommunity Editionの場合はレポートを拡大縮小しつつ見る、というモバイルの使用形態になりそうです。IMG_0592.PNGIMG_0591.PNGIMG_0590.PNG

いわゆるモバイルBIとしてはまだまだですが、Jasperserverを使用していてモバイル端末を使用しなくてはいけない場合などに役に立つでしょう。

SQL Server で線形回帰するためのSQL コード生打ち [BI]

メモです。

PostgreSQLあたりだとLinear regression (線形回帰) の関数があるのですが、SQL Serverにはそういう関数がありません。SSASだとできるらしいのですがSSRSで使いたいだけなのでSSASを設定するのもめんどくさい。ということで大学生の実験以来、線形回帰をSQLで手計算しました(-"-;;。

test というテーブルでx,yというコラム名があったときのa,b (slope, intercept)は以下になります。

SELECT
bunshi_a/bunbo_a AS a
,avg_y - bunshi_a/bunbo_a*avg_x AS b
FROM
(SELECT
SUM((x - avg_x)*(y - avg_y)) AS bunshi_a
,SUM((x - avg_x)*(x - avg_x)) AS bunbo_a
,avg_x ,avg_y
FROM
(SELECT
x,y
,(SELECT Avg(CAST(x AS REAL)) from test) AS avg_x
,(SELECT Avg(CAST(y AS REAL)) from test) AS avg_y
FROM test
) src1 /* シグマ内の必要な要素を一列に準備 */
GROUP BY avg_x,avg_y
) src2 /* 最後の計算の一歩手前 */

実際にはtestテーブルのx,yはエラー値を除去したビューかサブクエリにすると良いでしょう。
出てきたa,bから、またtestテーブルのx,yの横に回帰した値とか追加しようとすると6重サブクエリとかになりますな…。数百行なら大丈夫だろうけど。

Talend Open Studio (ETLツール) でデータ統合(7)~SCD Type2 の実装 [BI]

商品カテゴリをSCD Type2で実装したディメンジョンテーブルを使って集計する必要が出てきました。さて、集計の仕方ですが単純に時間スライスでJOINしてもいいのですが、商品カテゴリの世代毎の売り上げを比較したいという要件や、そもそもSCD Type2のテーブルは日付で条件をかけるというひと手間あるので、スタースキーマ前提のBIに突っ込むには適していないので、工夫が必要です。

そこで悩んだ末に「ファクトテーブルにカテゴリをつっこむ」という解決法をとることにしました。まあもともとちゃんとした階層構造ではないし商品マスタに持たせられないので、美しくは無いがパフォーマンスを考えると現実的な解かなとは思っています。

さて、上記のような背景をもとに以下のようにTalendで実装しました。

○テーブル
・ソースとなるファクトテーブル
 商品コード
 日付
・カテゴリマスタ
 商品コード
 カテゴリコード
 販売開始日
 販売終了日

○手順1
上記2つのテーブルをLEFT OUTER JOINします。カテゴリのカバレッジが100%ではない場合はCASE句などを使用して、カテゴリコード、販売開始日、販売終了日からNullを撲滅してください。

○手順2
上記データをtMapで処理します。tMapでポイントになるのは入力行を処理する際の条件式を追加するところです。出力項目のレンチのアイコンをクリックすると条件式が入力できます。
無題.png
ここでは以下のような式を入れました(項目は雰囲気で察してください)。

TalendDate.compareDate(row1.date, row1.startdate,"yyyy-MM-dd") >= 0 && TalendDate.compareDate(row1.date, row1.enddate,"yyyy-MM-dd") <= 0

要は販売の日付が販売開始日・終了日の間の場合は、、、という条件です。

○手順3
上記出力をDB側で受け取ります。

まあここまでやって思ったのは、SCD Type2 って大変ですね(泣)。業務側からは非常に要望の強い部分ではあるので、MDM含めてちゃんとできるとデータ分析のレベルを上げられる要素ではあります。
タグ:Talend TOS RDBMS SCD

Talend Open Studio (ETLツール) で業務の自動化~Excel→PDF→メール送信(2)コード詳細 [BI]

Komlog内の人気記事、「Talend Open Studio (ETLツール) で業務の自動化~Excel→PDF→メール送信」の実際のコード、設定などを紹介したいと思います。
http://komlog2.blog.so-net.ne.jp/2010-09-23

まず全体感として以下のように各コンポーネントを結合します。帳票となるExcelの構造としては、整形シートとデータのシート(シート名:出力データ)を分けており、データシートをVBS経由のVBAマクロでデータ更新し、整形シートをPDFで出力、その出力済みファイルをtSendmailで送信するという手順になります。
talend1.png

(1)Access からExcelに吐き出す
基本的な使い方通りです。AccessのクエリをtFileOutputExcelで拾います。ここで出力ファイルは「data.xls」、出力シートは「sheet1」とします。

(2)Excelのデータを更新しPDF出力する
・Excel VBAをVBSで実行
以下が単純にマクロを呼ぶVBSの例です。ファイルはc:\\tmp\\genreport.vbs とします。

Set objArgs = Wscript.Arguments
runXLmacro objArgs(0), objArgs(1)

Function runXLmacro(BookName, MacroName)
Dim XL
Set XL = CreateObject("Excel.Application")
XL.Visible = True
XL.Workbooks.Open BookName
XL.Run MacroName
XL.ActiveWorkbook.Close False
XL.Quit
Set XL = Nothing
End Function

これは引数としてブック名、マクロ名(関数名)をつけることでそのExcelマクロを実行することができます。これをtSystem で実行しますが、「コマンド」欄は以下のように記載します。

"cmd /c c:\\tmp\\genreport.vbs c:\\tmp\\final_report.xls genreport"
※final_report.xls のExcelに紐づいている genreport 関数を実行します

・実行されるExcel VBAマクロ
実行するマクロは以下のような内容となります。

Public Sub genreport()

Application.DisplayAlerts = False

' 他のブックの内容をデータシートに表示して、コピーする
Sheets("入力データ").Select
Sheets("入力データ").Range("A1").FormulaR1C1 = _
"='C:\tmp\[data.xls]sheet1'!RC"
Sheets("入力データ").Range("A1").Copy
Sheets("入力データ").Range("A1:R1000").PasteSpecial Paste:=xlPasteFormulas
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues

' ExcelからPDFを吐き出す。Office2010の場合、以下のようなコードになります。この例では
' 2つのシートをPDFで吐き出すため、複数選択してからエクスポートしています。
Sheets(Array("整形後1", "整形後2")).Select
With ActiveSheet
.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:="C:\tmp\report.pdf", Quality:=xlQualityMinimum, OpenAfterPublish:=False
End With

Application.DisplayAlerts = True

End Sub

(3)メール送信
tSendMail コンポーネントの設定項目は上記添付画像を参考にして下さい。ここではCCに複数人を指定したり、件名にその日の日付を埋め込むといった時の設定を参考にしてください。

タグ:Talend Excel VBA

最高峰のセルフサービスBI PowerPivot [BI]

今回は PowerPivot for Excel2010 の紹介をしてみます。

◯PowerPivotはSQL Serverとは独立して動く、Excel2010のフリーアドイン
PowerPivotが紹介されている文書に、SQL Serverがなんちゃらかんちゃらって文章が必ずくっついているので、てっきりPowerPivotはSQL Server Analysis services (SSAS) 無しでは動かないのかと思っていたのですが、そうではなく、「独立したアドイン」です。

◯SSASとPowerPivotの違いは何か?
・DB、データの場所
基本的にVeriPaqというインメモリDBを使用して解析することには変わりません。そのDB(=データ)がサーバ側にあるのがSSAS、ローカルにあるのがPowerPivot です。例外としてPowerPivotをSharepoint経由でサイト共有する場合、サーバのSQL ServerのDBエンジンが使用されます。
・モデリングの要否
SSASは従来のBIツールと同様に、キューブ・ディメンジョンのモデリングが必要です。またデータ構造はスタースキーマ、スノーフレークスキーマである必要があります。一方でPowerPivotはリレーションを張るだけで、モデリング無しでデータ解析を始めることができます。ここらへんの手軽さはQlikviewに匹敵するものがあります。

実際使ってみた限り無敵の様相を見せており、ただいま絶賛負荷テスト中です。レポートはしばしお待ちください。
タグ:BI Powerpivot

Talend Open Studio (ETLツール) でデータ統合(6)~ファイル連続処理 [BI]

今更ですが、基本的な使い方の一つを書いておこうと思います(笑)

ETLはデータソースをいろいろ指定できますが、業務アプリ的な使い方以外に、普段繰り返しやっていることを自動化するような使い方も可能です。ExcelやAccessでマクロを組んで対応することも可能ですが、Talendでのやり方をわかってしまえばマクロより簡単にジョブを組むことができます。今回は、複数のファイルを読み込み→文字コード変換→ファイル名にある日付をDBのコラム名として格納というジョブを組んでみます。

全体的なコンポーネントのつなぎ方、tFileListの設定。
tf1.png
ファイルマスクは画面のように設定すると、csvの拡張子を持つファイルすべてという指定ができます。

複数ファイルを開いた先の最初のコンポーネントの設定方法。入力ファイル名はこのように記述します。
tf2.png

最後に今回のハイライト、ファイル名に日付を含む場合に日付部分のみを取出し、DBのコラムとして格納します。tMapのエクスプレッションに以下の式を入れました。
tf3.png

StringHandling.LEFT(StringHandling.RIGHT("((String)globalMap.get("tFileList_1_CURRENT_FILE"))",12),8)

これで日別のデータを日付データ込みでざくざくDBに投入することができます。
タグ:Talend BI ETL

Talend Open Studio (ETLツール) でデータ統合(5)~ELTコンポーネント [BI]

TalendにはELTコンポーネントがありますので試してみました。

ETLとELTの違いをとっても簡単に説明すると、変換をETLツールで行うのがETL、DBで行うのがELTです。コンポーネントの組み合わせでいかようにもなってしまうのですが、TalendのELTコンポーネントを使うと若干簡単にELTを組むことができます。
talend_elt.png

・利点
 ちまちま一個づつコンポーネントを使用しなくてもMapを使用した変換が可能。

・注意点
 スキーマは準備しておく。
 テーブル名を実際のテーブル名を指定する。
 INSERTしか対応していない。そのため、差分データテーブルがポンっとある場合以外は使用できません。
タグ:Talend ETL ELT

AlfrescoでSharepoint のワークスペース機能を利用する [BI]

企業内でOfficeファイルをやりとりする上での問題点はバージョン管理が破綻してしまうということです。これに対処するにはファイルサーバを用意して、それを書き換えるプロセスにする、というのがありますが、それでも誤操作による消失、ロールバックができないことによる情報の喪失の恐れが拭いきれません。
上記に対応するにはSharepointサーバを立ててワークスペースの機能を使うことで可能です。しかし当然ながらSharepointサーバが転がっていることはないので、とりあえず自作して使い心地を試してみましたw。
◯インストール
ハマった部分としてはMySQLです。MySQLがインストール済みなので、それを利用しようとしたのですが、All-in-oneのインストールパッケージを使用した場合、既存のMySQLを利用することはできません。Tomcatなど地道に設定するか、MySQLのインスタンスを2つ作ってポートを変えて利用するかの2択になりますので注意してください。
インストール設定としては「Quicker, Notes 統合」をオフにしました。またMySQLなど「ポートが他のソフトとカブっていないか」に注意してください。

◯Sharepointプロトコル利用のための設定
alfresco-global.properties に以下を追加します。
vti.server.port=7070
vti.alfresco.deployment.context=/alfresco
vti.alfresco.alfresoHostWithPort=http://ipaddress:8080
vti.share.shareHostWithPort=http://ipaddress:8080
vti.share.shareContext=/share

◯UIの日本語化のための設定
ここらへんを参考に進めてください。
http://www.bnote.net/windows/windows/alfresco_install.shtml

◯ワークスペースにアクセス
InternetExplorerで「信頼済みサイト」にAlfrescoサーバを追加する必要があります。なんとなく同じような設定項目がMS Office側にもありますがそちらは関係ありません。

ツール→インターネットオプション→「セキュリティ」タブで信頼できる場所にAlfrescoサーバを追加して下さい。

◯アクセス
上記設定が終わった後に、Officeのリボンからワークスペースのアドレスを設定するとワークスペースにアクセスできるようになります。適当なサイト名をつけて下さい。Officeだけでなく、ブラウザ経由でファイルを取得することももちろん可能です。

◯Sharepointと異なる部分
SharepointにあってAlfrescoに無い機能としてはExcelサービス、Accessサービスなどがあります。一方でポータルサイトの機能は利用可能なので、あまり混み入った使い方をしていない場合はAlfrescoで代用可能ではないでしょうか?

Jedox(Palo) (ExcelベースBI) の小ネタいろいろ(2) [BI]

※2012/02/28追加 Paloは商用版の名称を会社名のJedoxに変更しました。よってJedox(Palo)と併記しています。

◯連続コピーができなくなる??
実はJedox(Palo)のアドインを使用すると、Ctrl+Cでコピーした領域がCtrl-Vで貼り付けた際に選択が解除されるという問題があります。通常ならコピー領域はアクティブなままですがPaloがデータをセルにPutする際にセル内容を全て書き換えるため、上記の挙動となります。これを回避するには二種類方法があります。
1 自動再計算をオフにする
2 Paloの自動起動をオフにする
残念ながらこれは仕様なので上記挙動が気になる場合は回避してください
タグ:Excel Palo BI Jedox

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。