Quantcast
Channel: web pakun
Viewing all 247 articles
Browse latest View live

OracleODIのリポジトリを手動で作成する方法(How to create custom repository on ODI)

$
0
0

OracleODIを使った実際の開発では、rcuを使ったリポジトリ作成ではなく、手動でいくつかのリポジトリをセットアップして、開発や検証に利用することが多いですよね。

この記事では、OracleODIのマスタリポジトリと作業リポジトリを手動でセットアップする方法をご紹介します。

 

マスタリポジトリの作成

最初に、リポジトリ用のスキーマを作成し、さらに、このスキーマへの接続などの適切な権限を与えておきます。

create user ODI_REP identified by odi_rep
default tablespace DEV_ODI_USER
temporary tablespace DEV_ODI_TEMP;

grant connect, resource to ODI_REP;

 

リポジトリ用スキーマを作成したら、次にそのスキーマにマスタリポジトリを作ります。作成にはODIのリポジトリ作成ウィザードを利用します。ODIを起動し、「ファイル」→「新規」から「新規ギャラリ」を開き、「新規マスターリポジトリを作成します」を選択します。

image

 

ウィザードのステップ1ではリポジトリへのデータベース接続を定義します。以下の情報を設定しましょう。

テクノロジ:Oracle

JDBCドライバ:oracle.jdbc.OracleDriver

JDBC URL:jdbc:oracle:thin:@localhost:1521:<DBインスタンス名>

ユーザー:リポジトリ用スキーマのユーザ

パスワード:リポジトリ用スキーマのユーザパスワード

DBAユーザー:DBA権限を持つユーザ

DBAパスワード:DBAユーザパスワード

 

image

リポジトリ構成のIDは、他と重ならないものを指定します。初めて作成した場合は「0」でOKです。

設定したら、「テスト接続」で、接続できることを確認しておきます。

 

 

次に、認証モードとそのパスワードの設定を行います。「ODI認証」で、管理者権限を持つ「SUPERVISOR」のパスワードを設定します。また、パスワード記憶域は「内部パスワード記憶域」で結構です。

image image

 

上記まで設定して、「終了」ボタンを押せば、マスタリポジトリの作成が開始されます。しばらく待って、下記のように「マスタリポジトリは正常に作成されました」のダイアログが表示されればOKです。

image

 

 

作業リポジトリの作成

作業リポジトリ(ワークリポジトリ)は、最初にマスタリポジトリに接続して、そこで作成します。

最初に、上記で作成したマスタリポジトリに接続します。ODIの左側の「リポジトリへの接続」をクリックするとログイン用のダイアログが開きますので、緑の「+」ボタンを押して、接続を作成しましょう。

image

接続情報は以下のように入力します。下部の「作業リポジトリ」の部分は、この時点では作業リポジトリを作成していないので、「マスターリポジトリのみ」を選択しておきます。

image

 

接続すると、以下のようになります。左側に、「開発リポジトリに接続されていません」と表示されていますね。これから、作業(開発)リポジトリを作成していきます。

image

 

左ペインのタブで「トポリジ」を選択し、「リポジトリ」→「作業リポジトリ」を右クリックして、「新規作業リポジトリ」を選択します。その後、作業リポジトリを作成したいスキーマに対しての接続情報を入力します。今回は、マスタリポジトリと同じスキーマに作成することにします。

image image

 

作業リポジトリのプロパティの設定は、以下のようにします。

ID:マスタリポジトリや他のリポジトリと重ならないID

名前:作業リポジトリ名です。分かり安ければ何でもOKです。

パスワード:作業リポジトリのパスワードです。空白でも構いません。

作業リポジトリタイプ:「開発」と「実行」がありますが、「実行」はリポジトリ情報をREADするだけになるので、「開発」を選択しておきましょう。

image

上記で「終了」ボタンを押すと、作業リポジトリの作成が開始されます。ログインを作成するか聞かれますが、特に作成の必要性はありませんので、「いいえ」を選んでかまいません。

 

これで、作業リポジトリも作成されました。一度、リポジトリへの接続を切って、再度ログインします。その時、リポジトリ接続を編集して、作業リポジトリの部分を設定しましょう。

image

 

お疲れ様でした。これで、手動でのリポジトリ作成が完了です。


アンインストール時などに残ってしまったWindowsのサービスを手動で削除する

$
0
0

OracleやWeblogicに限らず、ソフトウエアをアンインストールしたときに、Windowsサービスが削除されないまま残ってしまうことがあります。

そんなときには、2つの方法がありますので、ご紹介します。

①コマンドラインからコマンドを入力して削除

②上記でもダメな場合、ソフトを使う

 

①コマンドラインから削除する場合

コマンドラインからサービスを削除するには、「sc.exe」を利用します。

削除する前に、削除対象のサービスを確認しておきましょう。

スタート ⇒ コントロールパネル ⇒ 管理ツール ⇒ サービス

を選択すると、サービスの一覧が確認できます。

image

そこで、対象のサービスを探して、右クリック ⇒ プロパティ を開きましょう。「サービス名」を確認します。「表示名」ではないので気を付けてください。

image

 

サービス名が分かったら、コマンドラインで、

sc.exe delete [サービス名]

と入力すればOKです。

 

②ソフトを使う

上記のコマンドを使えば、たいていのサービスは削除できますが、まれにそれでも削除できないサービスがあります。(私も、1つありました。。)

そのような場合には、ソフトを使うと便利です。私の場合はこのソフトを使うことで、無事削除できました。

その名は、「COMODO Programs Manager」。セキュリティソフトとしても有名な会社ですが、このソフトは、Windowsサービスやドライバ、プログラムなどを管理できます。

image

使い方は、簡単で、ソフトをインストール後、画面左のタブで「Drivers and Services」を選択すると、インストールされているドライバやサービスが一覧表示されます。

その中から、該当のサービスを探し出して、「Uninstall」ボタンを押すだけです。

inner join と outer join の違いと覚え方の自分用まとめ(外部表、駆動表もメモ)

$
0
0

テーブルの結合は、技術者であれば様々な局面で使用することが多いですが、少し間が空いてしまうと、忘れることが多い自分のために、まとめておこうかと。。

まず、例として以下のようなテーブルを用意。

CREATE TABLE 売上
(	"売上ROW_ID" NUMBER,
	"売上日" DATE,
	"顧客CD" VARCHAR2(4)
);

CREATE TABLE 顧客
(	"顧客CD" VARCHAR2(4),
	"顧客名" VARCHAR2(255)
);

 

各々のテーブルには以下のようにデータが入っていることにします。

【売上テーブル】

売上ROW_ID 売上日 顧客CD
1 13-01-01 C001
2 13-02-01 C002
3 13-03-01 C003
4 13-04-01  
5 13-05-01 TMP
6 13-06-01 C001

 

【顧客テーブル】

顧客CD 顧客名
C001 田中さん
C002 鈴木さん

 

①INNER JOIN

select * from 売上 inner join 顧客 on (売上.顧客CD = 顧客.顧客CD)

 

INNER JOINは、結合する両方のテーブルに存在するレコードを取得します。

売上ROW_ID 売上日 顧客CD 顧客CD 顧客名
1 13-01-01 C001 C001 田中さん
2 13-02-01 C002 C002 鈴木さん
6 13-06-01 C001 C001 田中さん

 

 

②LEFT OUTER JOIN

select * from 売上 left outer join 顧客 on (売上.顧客CD = 顧客.顧客CD)

 

LEFT OUTER JOINは、左のテーブルのレコードを全て抽出したうえで、結合条件にしたがって、右の表のレコードを結合していきます。このとき、結合できない場合は、NULLとなります。

売上ROW_ID 売上日 顧客CD 顧客CD 顧客名
1 13-01-01 C001 C001 田中さん
2 13-02-01 C002 C002 鈴木さん
3 13-03-01 C003 NULL NULL
4 13-04-01 NULL NULL NULL
5 13-05-01 TMP NULL NULL
6 13-06-01 C001 C001 田中さん

 

③RIGHT OUTER JOIN

select * from 売上 right outer join 顧客 on (売上.顧客CD = 顧客.顧客CD)

 

RIGHT OUTER JOINは、右のテーブルのレコードを全て抽出したうえで、結合条件にしたがって、左の表のレコードを結合していきます。このとき、結合できない場合は、NULLとなります。

下の結果で少し注意したいのは、売上テーブルには、「C001」という顧客CDをもつレコードが2件あるため、結果の行数も全3件になっていることです。

売上ROW_ID 売上日 顧客CD 顧客CD 顧客名
1 13-01-01 C001 C001 田中さん
2 13-02-01 C002 C002 鈴木さん
6 13-06-01 C001 C001 田中さん

 

 

自分の覚え方

上記を見ても分かるように、OUTER JOINのLEFT、RIGHTは、どちらのテーブルを基準にするかを指定しています。

①「select * from 基準のテーブル」 で基準テーブルのレコードを全件抽出する。 ⇒外部表(OUTER)、駆動表

{

       LOOP

       {

             ②上記で抽出したレコードに対して、結合条件に合致するレコードを

             もう1つのテーブルから取得していく

        }

       END LOOP

}

のようになっているとイメージすると良いです。

つまり、①で、LOOPの外側(OUTER)となっているテーブルが基準となり、それを指定しているのがLEFTの方なのか、RIGHTの方なのかというわけです。

そのため、①の方のテーブルを「外部表」と言ったり、「駆動表」と呼んだりします。

SQLで、複数テーブルから他方に無い(存在しない)レコードを抽出する

$
0
0

たまに必要に駆られるのが、2つのテーブルを比較して、1つのテーブルには存在するが、もう一方のテーブルにはないレコードを抽出するというもの。

いくつか方法がありますが、今回は主な2つをご紹介。

①差集合演算を使う・・・簡単ですが、比較するテーブルの列数、型を合わせる必要あり。

②SQLのみで抽出・・・汎用的に使えます。一度原理を覚えると応用が利きます。

 

では、さっそくやってみます。比較するテーブルは、この記事で用意した【売上テーブル】と【顧客テーブル】を使うことにしましょう。

各々のテーブルには以下のようにデータが入っていることにします。

【売上テーブル】

売上ROW_ID 売上日 顧客CD
1 13-01-01 C001
2 13-02-01 C002
3 13-03-01 C003
4 13-04-01  
5 13-05-01 TMP
6 13-06-01 C001

 

【顧客テーブル】

顧客CD 顧客名
C001 田中さん
C002 鈴木さん

 

①差集合演算を使う

各DBには演算のための組み込み関数があり、差分を演算するものもあります。

PostgreSQL、Oracle、DB2・・・minus

MySQL、SQLServer・・・except

上記は、あるSQLの結果セットから、他方のSQLの結果セットを「引き算」した結果を返すというものです。つまり、

select 顧客CD from 売上
minus
select 顧客CD from 顧客

 

というSQLをOracleで発行すると、

顧客CD(売上) minus(except) 顧客CD(顧客)
C001              ー C001
C002              ー C002
C003    
(NULL)    
TMP    

 

ということになり、「C003,(NULL),TMP」が戻ります。この演算子を使うときに気をつけるべきなのは、「両方のテーブルからのselect結果の列数、型が同じでなければならない」とうことです。単純に引き算するのですから、同じでなければ比較ができないということになっているのですね。

 

②SQLのみで抽出

両方が同じ出なければいけないなんて、実際に使う場面はそう多くないかもしれません。現実的には、両方のテーブルで同じ項目はいくつか持っているものの、異なる項目も多い中で、比較することが大半なのではないかと思います。

そんなときには、次の原理を覚えておくと便利です。

前回の記事で、「OUTER JOIN」の原理を説明しました。これを使うと、「片一方の結合元のテーブルはそのままに、もう一つのテーブルを、結合条件で結合していく」のでしたね。結合する方のテーブルに値がない場合は、NULLとなりました。

つまり、

select * from 売上 left outer join 顧客 on (売上.顧客CD = 顧客.顧客CD)

 

というSQLを発行すると、

売上ROW_ID 売上日 顧客CD 顧客CD 顧客名
1 13-01-01 C001 C001 田中さん
2 13-02-01 C002 C002 鈴木さん
3 13-03-01 C003 NULL NULL
4 13-04-01 NULL NULL NULL
5 13-05-01 TMP NULL NULL
6 13-06-01 C001 C001 田中さん

 

という結果が返ります。ここで、上記の表の赤い太文字の「NULL」のある行(レコード)に注目してみましょう。このレコードはまさに、「複数のテーブルを(顧客CDで)比較して、他方にないレコードを探す」という目的に合った結果であることが分かります。

これを、SQLに直すと、

select * from 売上 left outer join 顧客 on (売上.顧客CD = 顧客.顧客CD)
where 顧客.顧客CD is null

 

ということになりますね。これが原理です。2つのテーブルを外部結合でくっつけて、もう一方のテーブルにない行を抽出すると覚えておくと、いろいろな場面で役立ちますよ!

Oracleのデータをエクセルでインポート/エクスポートする方法(ORA-01821の対処含む)

$
0
0

Oracleを使っているときに、テーブルのデータを一時的に保存したり、テストデータなどをインポートしたい場面があります。
そのような場合、ファイルに保存しておくとよいですが、特にエクセルの形式で保存しておくと、値の加工もできて、非常に便利なので、その方法をメモしておきます。

利用するのは、Oracleのクライアントをインストールするとデフォルトで付いてくる「SQL Developer」です。

 

データのエクスポート

最初にデータをエクスポートする方法です。
エクスポートの場合は、数クリックで完了するので、簡単です。

エクスポート対象のテーブルがあるデータベースに接続したら、対象のテーブルを右クリックして、「データのエクスポート」を選択しましょう。
ここで出力するファイルの形式を選べます。Csvやloader形式もありますが、今回は「xls」形式を選択することにします。

image

 

後は、ファイルを保存する場所を指定して「適用」ボタンを押すだけです。

image

 

ちなみに、エクスポートするレコードを選択することもできます。

上記のダイアログの上部に、「列」というタブと「WHERE」というタブがあります。
「列」タブでは出力する対象の列を絞り込むことができます。

image

 

「WHERE」タブでは出力する対象のレコードを絞り込むことができます。
SQLのwhere句が利用できるので、必要なレコードのみに絞るのも楽ですね。

image

 

データのインポート

データのインポートにもエクセルを使用できます。
上記でエクスポートしたエクセルファイルをひな形として利用すると、インポート用ファイルの作成の手間が省けて良いでしょう。
エクセルのインポート時には取り込み対象のシート名を指定できますので、複数のテーブルのデータを1つのエクセルブックにまとめたりもできますね。

早速インポートしてみましょう。
インポート対象のテーブルがあるデータベースに接続したら、対象のテーブルを右クリックして、「データのインポート」を選択します。

image

 

ファイルの選択ダイアログが開きますので、そこでインポートするエクセルを指定します。
すると、以下のようなデータのインポートウィザードが開きます。
最初の画面では、インポートするシートを指定します。
シートにヘッダー行を含む場合には、「ヘッダー」のチェックボックスにチェックを入れると、それを無視してくれます。

image

 

次の画面では、取り込む列を指定します。ここで指定した列を、次の画面で、テーブルの各カラムにマッピングすることになります。

image

 

次の画面では、ソースデータの各列をテーブルの各カラムにマッピングします。

image

 

最後の画面では、インポート内容を検証することができます。
右上部の「検証」ボタンを押すと、検証が開始されます。
全てのステータスが「SUCCESS」と表示されていることを確認して、「終了」ボタンを押しましょう。

image

 

注意
DATE型やTIMESTAMP型をインポートする場合
には日付書式を指定します。
ファイルに保存されたデータは文字列ですので、インポート時に
to_date(’13-05-21′, ‘yyyy/mm/dd’)
のように変換されるためです。
そのため、ファイルに記述してある日付またはタイムスタンプの内容に従って、適切な日付書式を指定しましょう。
例えば、
「2013/05/13」と書いてある場合には、「yyyy/mm/dd」などと指定します。

注意2
TimeStamp型の場合
は、その書式に注意する必要があります。
エクスポートする前にSQL Developerの「ツール」⇒「プレファレンス」から、「データベース」⇒「NLSパラメータ」を選択し、
タイムスタンプ書式を「YY-MM-DD HH24:MI:SS」等(XFFがない形)に変更しておけば、インポート時の書式設定で、「YY-MM-DD HH24:MI:SS」を設定すればよいです。
「FF」(秒の小数点以下)を含む書式だと、インポート時に
SQL Error: ORA-01821: date format not recognized
SQLエラー: ORA-01821: 日付書式コードが無効です
というエラーが発生してしまいます。

Windowsで、ファイルのタイムスタンプのみを更新する

$
0
0

Linuxではファイルのタイムスタンプを更新する場合、「touch」コマンドが使えますが、Windowsではどうするのかのメモ。

Windowsの場合、「copy」コマンドで代用することができます。

 

copy /B filename +,,

 

 

上記のようにすると、ファイルの日付(タイムスタンプ)が更新されます。

(filename の部分を変更したいファイルの名称に変えてコマンドプロンプトで実行してください。)

実際には、

「/B(バイナリモード)でファイルの連結を行うが、+の後ろに何もないので、結局は「空白」を追加(=何も追加しない)」

ということになり、更新日付だけが変わるということになります。

SQLDeveloperでのOracleデータのimport/export sqlldr(SQLローダー)編

$
0
0

前回の記事でOracleのインポート/エクスポートをエクセルにて行いました。
エクセルを利用するとデータの加工や、各テーブルのデータをまとめて保存しておけるのが便利ですが、
大量のデータとなると、「テキストファイル&SQLローダー」の組み合わせで処理した方が便利です。
そこで今回の記事では、SQLローダー(sqlldr)を利用した方法をご紹介します。

 

データのエクスポート

あるテーブルのデータをエクスポートするには、今回は「SQLDeveloper」を使います。
というのも、SQLDeveloperには非常に便利な機能があり、ワンクリックで、ファイルにエクスポートできるからです。
しかも、出力されたファイルには、sqlldrでのインポートに利用できる制御情報がデフォルトで埋め込まれていますから、
面倒な記述なしで、sqlldr形式でのデータのエクスポート⇒インポートができるというわけです。

では、早速エクスポートしてみます。

image

 

SQLDeveloperでDBに接続し、対象のテーブルを右クリックします。表示されたメニューで、「データのエクスポート」⇒「loader」を選択してください。
やることはこれだけです。
ファイルの保存場所を指定すれば、そこにエクスポートしたデータが「.ldr」の拡張子で保存されます。
なお、そのファイルには制御情報も含まれると言いました。
実際に吐かれるファイルは以下のようなものです。

LOAD DATA
INFILE *
TRUNCATE
INTO TABLE "SAMPLE1"
FIELDS TERMINATED BY '|'
TRAILING NULLCOLS (
CUST_CODE ,
CUST_NAME ,
DATE_COL timestamp "YY-MM-DD" ,
TIME_COL timestamp "YY-MM-DD HH24:MI:SS" )
begindata
aa|aa1|13-05-21|13-05-21 10:35:26
bb|bb1|13-05-21|13-05-21 10:35:52

 

注意

日付やTIMESTAMP型のデータをエクスポート/インポートする場合には、前回の記事の注意を参考にしてください。

でないと、失敗するかもしれません。

 

データのインポート


データをインポートするには「sqlldr」を使います。Sqlldr.exeのあるディレクトリにパスが通っていることを確認して、以下のコマンドを入力しましょう。

sqlldr username/password@sid control=上記で出力したファイル log='ログファイル名'

 

制御ファイルとinファイルが同じファイル内に記述されていますので、上記のコマンドでOKです。

OracleBIをインストール後、DBの接続設定を変更する場合の手順

$
0
0

OracleBIのDB接続設定は、インストール時に行い、通常は変更することはありません。
ただ、DBの接続先や設定を変更することもまれにありますので、その時に変更する箇所を、自分の経験からメモしておこうと思います。

設定を変更する箇所は以下のところになります。

●weblogicのコネクション設定
●リポジトリファイル用のOCI設定
●OracleBISchedulerComponent

では、早速変更していきます。

 

weblogicのコネクション設定

OracleBIのユーザインターフェース(answers等)は、Webアプリケーションとして、Weblogicサーバ上に配備されています。

また、OracleはMiddlewareFusionのひとつですので、コアコンポーネントも同じくWeblogic上に配備されています。

そのため、Weblogicが使用しているコネクションプールの設定を変更する必要があります。
設定は、Weblogic側の管理コンソールから行いましょう。

管理コンソールにログインしたら、画面左側の「ドメイン構造」⇒「ドメイン名」⇒「サービス」⇒「データソース」を選択します。

image

 

すると、定義されているデータソースが画面右側に表示されるはずですので、それぞれの接続設定を変更します。

image

 

上記でデータソース名をクリックすると、下記のような接続プールの設定画面が開きます。
設定変更は、多くの場合は、「URL」の項目を編集すればOKだと思います。
変更した設定の反映には、サーバの再起動が必要です。

image

 

 

リポジトリファイル用のOCI設定

リポジトリファイル(メタ構造が定義されており、分析クエリを発行する先のDBの接続情報が記述してある)でOCIを使って接続している場合は、Oracleクライアントの設定を使用します。

ここを直すと、サブジェクトエリアでの分析(rpdからの参照)も、rpdのメタデータインポート(テーブル情報のインポートなどに使用)もOKになります。

その設定がどこにあるかですが、以下のファイルを見てみると分かります。

<BIインスタンスディレクトリ>\bifoundation\OracleBIApplication\coreapplication\setup\bi-init.cmd

です。

このファイルの中に、「set TNS_ADMIN=E:\dbclient\network\admin」のように「TNS_ADMIN」という環境変数を設定している箇所があり、そこにあるtnsnames.oraなどの設定ファイルを用いて接続していますので、該当の「tnsnames.ora」を特定して、それの記述を変更しましょう。

特に、複数のOracle環境が存在しているBIサーバでは、そのサーバがどのOracleクライアントの設定を使用しているか分かりにくくなってしまうので、この場所を知っておくと便利です。

 

OracleBISchedulerComponentの設定

BIで利用するスケジューラの設定情報を変更します。

スケジューラを使用しているプロジェクトはそう多くないでしょうが、DBを切り替える場合など、今まで接続できていたDBに接続できなくなると、BIサーバの起動時にエラーが出て、起動できなくなってしまうので、ここも変更が必要です。

設定するファイルは、

<BIインスタンスディレクトリ>\config\OracleBISchedulerComponent\coreapplication_obisch1\instanceconfig.xml

です。

以上で、DB接続情報の変更の完了ですね。


sqlのcountやsumの集計対象をフィルタリングする方法が便利すぎる

$
0
0

sqlでselectする際に、ある項目でGroup byしながら、countしたりsumしたりすることがあります。

その際に、カウントもしくは合計するレコードにフィルタ条件をつけたい場合のやり方です。

 

よく、BIなどで利用される構文ですが、慣れるとすごく便利なので、メモしておきます。

 

【例】

select count(distinct case when 項目B = 0 then 項目A else NULL end) as cont_a
from TBLA

 

 

上記のように集計関数の中にCASE文を使用し、カウントしたい条件の時にだけ、その値を評価するようにします。

上記の場合は、「項目B = 0」のときにだけ、「項目A 」を有効にし、それ以外の場合にNULL(無効)とします。

トランザクションテーブルのレコードの件数をカウントする場合に、ある項目の値によって、カウントする/しないを判断するのに使えます。

例えば、サイトのアクセスのレコードを集計する際に、ある項目が「1」ならクリック、「2」ならボタン押下などを判断して、そのレコード件数を集計する場合などです。

OracleBIで、別の分析の結果(絞り込んだテーブル情報)を分析に適用する方法

$
0
0

通常、OracleBIのFactテーブルとDimentionテーブルは、論理層と物理層で適切に紐づけられており、
例えば、売上のFactを、Dimの組織コードで絞ったり、GroupByして分析を行うことができます。

ただ、複雑なメタデータ定義になると、どうしても直接結びつけられるテーブルばかりとは限りません。

そんな時には、ある分析の結果レコードを保存しておき、次の分析のインプットとして使える機能が便利です。

これを使うと、ある条件で顧客を絞り、その顧客に対して、いろいろな分析を行うなど、ある意味セグメンテーションに近いことが柔軟にできます。
また、セグメンテーションは、通常、あらかじめ定義したID(顧客など)に対してしか行えませんが、
分析の結果を使用する方法では、抽出したカラムをなんでも利用できます。

以下では、例として、売上のFactを、組織で絞り込んでみましょう。(ふつうは、この程度であれば、メタ定義でテーブル同士を結びつけますが、簡便な例としてということで。。。)

 

最初に、レコードを絞り込む前の売上のレコードを見てみましょう。

image

 

次に、上記に対して、特定の組織のみを絞り込みするため、新たに分析を行います。
新しい分析では、フィルタ条件として、特定のROW_IDで組織を絞り込んでみます。
こうすることで、組織の分析の結果は、ROW_IDが1000000001、1000000002、1000000003に絞られました。

 

image  ⇒ image

 

この絞り込んだ分析は、名前を付けて保存しておきます。後ほど、売上の分析の画面から利用するためです。

ここでは、「絞った組織」という名前で分析を保存しました。

image

 

 

それでは、売上側の分析に戻って、組織をフィルタするのに、先ほど保存した分析を使用することにします。

 

image

 

上記のように、フィルタしたい項目で「フィルタ」を選ぶと、下記のような「新規フィルタ」ダイアログが開きます。

このダイアログでは、
演算子 ⇒ 別の分析結果に基づく
保存済分析 ⇒ 先ほど保存した「絞った組織」分析
を指定しましょう。

なお、「次の列の値を使用」の項目には、保存した分析の項目を選択します。

 

image

 

この作業により、具体的には、裏側で一時テーブルが生成され、上記で選択したカラム(上の例ではROW_ID)がInsertされます。

 

フィルタを適用すると、以下のように表示されるはずです。

image

 

それでは、実際に結果を見てみましょう。
下記のように、売上のFactデータが、1000000001、1000000002、1000000003に絞られていることが確認できると思います。

 

image

PL/SQLのコンパイルが「PLS-00302: コンポーネント’xxxxx’を宣言してください。」で失敗する問題の対処

$
0
0

PL/SQLの作成中に以下のようなエラーが出てコンパイルに失敗することがあります。

直接的な原因は、
PLS-00302: コンポーネント’xxxxx’を宣言してください。
のように、コンポーネントの宣言が間違っているため、認識されていないことによります。
たいていは綴りの間違いや記述場所が間違っている場合が多いですが、どう見てもあっているのに、、と思う場合があります。
というより、ありました。
その際は小文字のテーブル名、カラム名を使用していたため、うまく認識されていなかったのです。

まず、Oracleは通常、テーブル名やカラム名で大文字・小文字を区別しません。
そのため、小文字のテーブル名、カラム名を使用する場合は、「"」で囲って、"table_name"のように記述することで、区別することができます。

さて、記事のエラーですが

DECLARE

  sql_stmt VARCHAR2(400);

  CURSOR cur_tbls IS
    SELECT "column_a" FROM  "table_a";

BEGIN

  FOR w_rec IN cur_tbls LOOP

    sql_stmt := 'UPDATE "table_a" SET "column_a" =  '''' || w_rec.column_a  || '''';

    EXECUTE IMMEDIATE sql_stmt;

  END LOOP;
END;
/

 

のように記述すると、

PLS-00302: コンポーネント’column_a’を宣言してください。

のようなエラーが出てしまいます。

これは、該当のコンポーネントが「column_a」 ではなく、「COLUMN_A」で認識されているためです。

そのため、このエラーを回避するためには、

SELECT "column_a" as COLUMN_A FROM  "table_a";

のように、大文字で別名を付けてあげるとよいです。

GoogleReaderに代わるRSSサービス

$
0
0

ずっと使ってきたGoogleReaderのサービス提供が終わってしまいました。

良く見るサイトの最新の記事を効率よく閲覧できるRSSサービスの終了で、それに代わる代替サービスを探す必要に迫られ、いくつかのサービスを探してみました。

私自身は以下の2つのサービスが使いやすいと感じました。

 

1.Feedly

image

もともと、「Web上の面白い情報を、ユーザが収集しやすくする」というコンセプトで設立された企業の提供するサービスで、Web版、Android版、iOS版があります。

ユーザインターフェースが洗練されていて、使いやすいのはもちろんのこと、デザインもいいので使っていて楽しいところが良いですね。

GoogleReaderのサービス終了によりユーザ数が大幅に増え、GoogleReaderの後継と目されているサービスです。

各種サービスへの連携やソーシャル連携も充実しています。

 

 

2.DiggReader

image

こちらは、すでにソーシャルニュースアグリゲータとして有名なdiggが出したサービスです。Feedlyと比べてReaderとしての歴史は浅いですが、シンプルなインターフェースで使いやすいと思います。

こちらもWeb版、Android版、iOS版があります。

歴史が浅い分、使い勝手や連携機能の豊富さではまだFeedlyの方に分がありますが、今後、機能の充実を宣言しており、楽しみなサービスだと思います。

特に、Web版の動きやデザインは、こちらの方が好きですね。

iTunesなしでiPhoneの音楽や動画を管理できる無料ソフト「CopyTrans Manager」

$
0
0

iPhoneでの音楽や動画の管理には、普通iTunesを使いますが、iPhoneと同期を開始するまでの時間が掛かりすぎて、非常にイライラすることってありませんか?

新しく入手したお気に入りの楽曲をiPhoneに移したいだけなのに、1分も待たされるなんて。。。そうして持ち運びのできない音楽が増えていっている管理人でした。

しかし、探せばあるんですね。Windowsのエクスプローラから音楽ファイルをドラッグして、ボタンを押すだけで簡単にPC上のメディアをiPhoneに移すことのできるソフト。

その名は、「CopyTrans Manager」。しかも、無料だというから驚きです。

image

 

それではさっそく、インストール方法と使い方を。

 

1.ソフトをダウンロード

まず、「CopyTrans Manager」のサイトにいって、インストーラをダウンロードします。

ページの少し下の方に行くと、「CopyTrans Manager – フリー」がありますので、それをダウンロードしてインストールしましょう。私は、ZIP版をダウンロードしました。上級者向けと書いてありますが、落としたファイルを解凍するだけですぐに使えるので、問題ありません。

image

 

2.ドライバをダウンロード

iPhoneとCopyTrans Managerを同期させるには、iTunesのドライバが必要になります。そのためiTunesをインストールするか、専用のiTunesドライバをインストールします。

すでにiTunesがインストールされている人はそのまま次に進みましょう。(※後程、iPhoneを接続しても認識されないという人は、iTunesを最新にするといい場合があります。)

iTunesを入れたくないという人は、必要なドライバだけをインストールすることもできます。私はこの方法を選びました。

そのためには、ここから「CopyTrans Driver Installer」をダウンロードしてインストールします。

image

 

3.ソフトを起動して音楽ファイルを移動してみる

image

それでは、「1.」でダウンロードした「CopyTrans Manager – フリー」のzipファイルを解凍します。その中に「CopyTransManager.exe」がありますので、ダブルクリックしてソフトを起動してください。

それから、USBケーブルでiPhoneとWindowsをつなぎます。

すると、以下のような画面になると思います。これが、iPhoneの中のメディアファイルです。

ここに、Windowsのエクスプローラから、iPhoneに移したいファイルをドラッグ&ドロップしていきます。

image

 

ドラッグ&ドロップが終わったら、最後に上記の画像の赤枠の「アップデート」ボタンを押して、iPhone側に実際にファイルを転送します。このボタンを押さないと反映されませんので、気を付けてくださいね。

 

いかがでしたでしょうか。実際にUSBでiPhoneをつないでから同期できる状態になるまでの早いこと早いこと。これから私もストレスのない音楽生活が送れそうです。

中国プロキシを設定せずにYoukuで見れない動画を見る方法(Unblock Youku編)

$
0
0

以前、中国のプロキシーサーバを経由することで、以下のようなメッセージがyoukuで表示されて、動画が見れない場合の対処法を記事にしました。

Sorry,this video can only be streamed within Mainland China.

http://web.plus-idea.net/wp-content/uploads/2012/07/image17.png

 

その後、Chromeに限ってですが、「Unblock Youku」というプラグインを使うことで、めんどくさい設定をしなくても簡単に日本で閲覧できなかった動画を見ることができるようになっています。

早速以下に設定方法を。繰り返しますが、Chromeの拡張機能(プラグイン)なので、以下の手順、閲覧にはChromeブラウザを使用してくださいね。

 

インストール編

まず最初に、Chromeで「Unblock Youku」のプラグインサイトにアクセスします。

image

上記のような画面が開きますので、右上の「CHROMEに追加」ボタンを押してください。

その後開く、「Unblock Youku」を追加しますか?のダイアログで「追加」ボタンを押すと、プラグインがお使いのChromeに追加されます。

image

これだけで、いままで見えなかったYoukuの動画サイトに再アクセスするか、F5ボタンを押してブラウザをリロードすると、見えるようになっていますよ。

 

 

設定編

Unblock Youkuにはいくつかのモードがあります。

通常は、デフォルトである「通常モード」が選ばれており、変更することはないと思います。

image

Windowsのコマンドプロンプトやバッチ内で文字列置換を簡単な記述で行う

$
0
0

Windowsのバッチ内などで、文字列の置換を行いたい場合があります。

よく使うのは、現在日付や時間を取得して、そのスラッシュ(/)などを置換し、「YYYYMMDD」形式の文字列にして、ファイル名などに利用するシーンでしょうか。

このような場合、%date%で取得した文字列の何番目から何番目を取って。。。という風に加工してもよいですが、文字列置換の方法を使うと記述がすっきりします。

文字列の置換は以下のような構文で可能です。

%[元の文字列]:[置き換え前の文字列]=[置き換え後の文字列]%

[置き換え前の文字列]をスラッシュ、[置き換え後の文字列]をにしておくと、

YYYY/MM/DD ⇒ YYYYMMDD

に変換することができますね。

@echo off

set dateStr=%date%
set timeStr=%time%

echo %dateStr%
echo %timeStr%

set formtDateStr=%dateStr:/=_%
set formtTimeStr=%timeStr::=%

echo %formtDateStr%
echo %formtTimeStr%

 

上記が、具体的な記述方法になります。

実行すると、

2013/08/14

12:20:39.54

2013_08_14

122039.54

 

のようになりますね。


OracleのCLOBデータを文字列(VARCHAR2)で取得・表示する

$
0
0

Oracleで4000バイトを超える文字列を格納する場合、CLOB型を利用しますよね。

その項目のデータをWebアプリケーションやOracleBIで、文字列として表示させたい場合には、以下のSQLを利用すると便利です。

select dbms_lob.substr(CLOB型のカラム名,1000,1) AS column1 from テーブル名

 

dbms_lob.substr関数の引数の最初の1000は1000文字分という意味、後ろの1は1バイト目からという意味になります。
なので、CLOB型のカラムの最初から1000文字を取得するということになりますね。

ここで注意したいことは、上記でも書いたように、文字で1000文字だということです。
つまり、我々日本人などが良く使うUTF8だと、1文字で3~4バイト使いますので、1000文字で3000~4000バイト使うことになります。

 

dbms_lob.substr(CLOB型のカラム名,1000,1) AS column1 で、column1に実際の文字列データが入りますが、column1はVARCHA2型に暗黙で変換されるので、最大値は4000バイトということになるんですよね。。。

 

SQLを投げたときに下記のエラーが出てしまう場合は、バイト数がVARCHAR2に入る最大値を超えていないか確認してみましょう。

ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます。が発生しました。
ORA-06512 "PL/SQL: numeric or value error%s"

OracelBIで、ある時刻からの差分や経過を判断する関数(TIMESTAMPDIFF、TIMESTAMPADD)

$
0
0

OracleBIで分析しているときに使える関数をメモしておきます。

今回は、日付や時間に使える関数です。

例えば、分析の対象を、ある日から一定期間経過した人に絞りたいときなどに便利です。

TIMESTAMPDIFF(interval, first_date, second_date)

TIMESTAMPADD(interval, volume, from)

 

上記のintervalは、差分を取ったり、加算する単位を指定します。
指定には以下の定数が利用できます。

・SQL_TSI_SECOND
・SQL_TSI_MINUTE
・SQL_TSI_HOUR
・SQL_TSI_DAY
・SQL_TSI_WEEK
・SQL_TSI_MONTH
・SQL_TSI_QUARTER
・SQL_TSI_YEAR

 

利用例

・ある項目Aの経過日が今日から30日以内のデータに絞る
ColumnA >= TIMESTAMPADD(SQL_TSI_DAY, -30, CURRENT_DATE)

・ある日付型の項目に12カ月を足す
TIMESTAMPADD(SQL_TSI_MONTH, 12, ColumnA)

・今月の最初の日を算出
TIMESTAMPADD( SQL_TSI_DAY , DAYOFMONTH( CURRENT_DATE) * -(1) + 1, CURRENT_DATE)

iPhoneの写真で、位置情報の付与をON/OFFする設定

$
0
0

iPhoneで写真を撮ると、ジオタグと呼ばれる位置情報が写真に埋め込まれることがあります。

埋め込まれたジオタグを参照すれば、その写真がどこで撮影されたのかが分かってしまうため、むやみにそれらの写真をネット上に公開するのは危険だとも言われます。

ジオタグをうまく使えば、旅の記録や日々のライフログを残す作業が効率化することもありますが、正しく使わなければ、個人的な情報をネット上に垂れ流すことにもなりかねませんので、少し、自分のiPhoneの設定を見直してみましょう。

iPhoneで写真を撮った時に位置情報を埋め込めるかどうかは、以下の「設定」で決まります。

「設定」⇒「プライバシー」⇒「位置情報サービス」

image image image

まず、「位置情報サービス」が「オン」になっていることで、iPhoneが位置情報を取得できるようになります。ここを「オフ」にしておけば、位置情報サービス自体を使わないわけですから、GoogleMapや乗り換え案内など、他のアプリでも位置情報を利用することはできません。

 

image撮影する写真にのみ位置情報を埋め込まないようにするには、上記の一番右側の図の下の方にスクロールして、以下の画面を表示します。そこに、「カメラ」というアプリがありますので、そこの「オン」「オフ」を切り替えることで設定が可能です。

Vaio P50にUbuntu 12.04 LTSをインストール&サスペンド有効化

$
0
0

軽くて持ち運びに便利なnetbookの「Vaio VGN P50」。

今回これに、「Ubuntu 12.04 LTS」をインストールしたので、その顛末を。

2013-10-05 14.53.24

 

起動用USBの作成

CD-ROMのついていないVaio PにLinuxをインストールするには、BootableなUSBディスクを作成する必要があります。Linux環境があれば簡単に作成できますが、近くになかったので、Windowsでそれを作成することにしました。

・まず最初に2GのUSBを用意しました。

・次に、ubuntu のダウンロードサイトから、イメージファイル(ubuntu-12.04.3-desktop-i386.iso)を落としてきます。

さて、WIndows環境でBootableUSBStickを作成するには、「Universal-USB-Installer」を利用すると便利です。ここからダウンロードしましょう。ダウンロードしたファイルをダブルクリックすると、以下のような画面が開きます。

image

①最初に、USBに作成するLinuxのバージョンを選択します。

②次の項目には、ダウンロードしてきたisoファイルを指定します。

③最後にUSBのディクスを選択してください。

設定が終われば「Create」ボタンを押すと、作成が始まります。どんなステップで作成が行われるかの確認画面も以下のように開かれますが、「はい」を押して結構です。

image

image

以上でインストール用のUSBスティックができました!

 

USBからの起動設定

次に、VaioをUSBから起動するための設定をBIOSで行います。

①VAIOの電源を入れ、「Sony」ロゴ、または「VAIO」ロゴが表示されている時に、キーボードの[F2]キーを連続して押す。

②BIOS画面が表示されるので矢印キーで「Boot」を選択。

③「Boot configuration」で「External Device boot」の項目でEnterキーを押し、「Disable」になっているのを「Enabled」に変更する。

④「Exit」で「Save Changes」で設定を保存。

 

インストール

上記の設定でUSB起動が可能になっているので、作成したUSBを差し込み、Vaioを再起動します。

後は、特に難しいところはありません。ただ、インストール環境を確認する画面が最初に開きますが、そのタイミングで、ワイヤレス・ネットワークの設定を行って、インターネットに接続できるようにしておきましょう。

desk1

 

サスペンド対応

外に持ち歩くときにできると非常に便利なのがサスペンド&レジューム機能です。これがないと使い物にならないといっても過言ではないと、個人的には思っており。。

で、設定方法ですが、本家のこのページにも記述があります。

①まず、自分のPCでサスペンド&レジュームを使えるか、次のコマンドで確認する。

sudo pm-suspend –quirk-vbemode-restore

これを打つと、サスペンドします。電源を軽く入れるなどして、レジュームしてみましょう。復帰したら、大丈夫ですので、実際に、ファイルに記述を行い、機能するように設定します。

②上記で効くことを確認したら、

sudo vi /etc/pm/config.d/gma500

でファイルを作成し、

ADD_PARAMETERS=’–quirk-vbemode-restore’

の一文を追加します。これで、OKです。

・・・と思ったが、何だかうまくレジュームしてくれず。。

上記の本家ページに書いてあるように、画面の解像度を「1360×768」に変更してsuspendしてみるとうまく復帰してくれます。

そこで、マネをして、

/etc/pm/sleep.d/01_survive_modeswitch

ファイルを作り、

#!/bin/bash

case "$1" in
    hibernate | suspend)
        { xrandr --output LVDS-0 --mode 1360x768 ; }
        ;;
    thaw | resume)
        { xrandr --output LVDS-0 --mode 1600x768 ; }
        ;;
esac

 

と編集して、

sudo chmod a+x /etc/pm/sleep.d/01_survive_modeswitch

しました。

これで無事にsuspend/resumeするようになったよー!

VaioにLXDEをインストールして軽快なデスクトップに!計画

$
0
0

さて、先日、我が家のVaio VGN-P50に「Vaio P50にUbuntu 12.04 LTS」をインストールしたわけですが、何だかやけにもっさりした動きなんだよな。。

調べてみると、ubuntuはいろいろユーザのアクティビティを記録しているようで、それを

「システム設定」⇒「プライバシー」から、「アクティビティの記録」の設定をOFFにしました。これで、結構軽くなったんだけど、まだもっさり感が抜けない。。

そこで、動作が軽いことで有名な"Lightweight X11 Desktop Environment"(LXDEを試してみることにしました。

 

まずはインストールですが、とても簡単です。

$ sudo apt-get install lxde
$ sudo apt-get install lubuntu-desktop

 

とやるだけで終了。後は、いったんログオフして、ログイン時の上のubuntuアイコンをクリックして「LXDE」を選んでログインします。

すると、以下のように無事LXDEの画面が表示されました。

で、先日設定したsuspend/resumeが効いているか確認してみると、うまく動いてくれているようです。

これで快適な環境で過ごすことができる!と思ったのもつかの間、なんだか、PCをたたんでも、バッテリーが熱いまま。。

調べてみると、LXDEはデフォルトで電源管理の機能を持っていないらしい。。。

ということで、追加で電源管理も行う設定を行う必要があります。

これを行うには、「Gnome-power-manage」をデスクトップ起動時に起動してあげればよいのですが、最近ではこれをコマンドラインから起動できないらしい。

で、「xfce4-power-manager」を使うといいよーということが書いてあったので、試してみます。

始めに、「xfce4-power-manager」のインストール。

sudo apt-get install xfce4-power-manager

これが終わったら、LXDEの起動時に「xfce4-power-manager」も起動するように設定してあげます。

①/etc/xdg/lxsession/LXDE/autostart を編集する。

② 「@xscreensaver -no-splash」の次の行に「@xfce4-power-manager」という1行を追加する。

③/usr/bin/xfce4-power-manager-settings と打って、起動を行う。

 

すみません。ここまで来たところで、起動できず。。。

Gnomeの電源管理マネージャと相性が悪いようです。

次回Tryします。

Viewing all 247 articles
Browse latest View live