ODS
Operational Data Store
データ取込時にDWHに格納する前に一時的に格納する領域のこと。
Staging領域との違いがいまいちまだ理解できていない。
(http://www.geekinterview.com/question_details/242 )
まぁ言い方を変えただけなのかな?
http://www.atmarkit.co.jp/aig/04biz/ods.html
(情報ソース:情報マネジメント辞典)
http://en.wikipedia.org/wiki/Operational_data_store
(original source: wikipedia)
SQL Server のフェールオーバーに必要な時間
検証してみたところ大体平均30秒くらいだった。
ただクラスタリソースがオンラインになってもサービスをしようとするとエラーが出る場合があったので、
実際にサービスとして使用可能な切り替え時間は1分ぐらいかかるかなと。
データ量によってもそれほどの誤差はなかったです。
MDX:複数選択
売上のキューブを作って、メジャーとして「Sales」と「Cost」が存在する場合
ビジネスユニットAとBを選択し他場合、下記の様に表示したい:
Business Unit Sales Costs
-------------------------------
All 1,000 800
-------------------------------
A 600 450
-------------------------------
B 400 350
ビジネスユニットを複数選択して、下記の表を表示させるMDX例
SELECT {[Measures].[Sales], [Measures].[Costs]} ON COLUMNS,
{ Intersect ( {[Business Unit].[Business Unit].members}, { STRTOSET(@BusinessUnitBusinessUnit, CONSTRAINED)} ) } ON ROWS
FROM [Sales Cube]
Cubeベースのレポートモデル
モデルを一度生成したら変更ができないみたい。
レポートモデルを作って、切り口とかを後で変えたりしたいのに。
やるならキューブの分析観点で対応するしかいないのか???
"Cube perspectives become report model perspectives. In addition, each cube becomes a perspective within the model. Therefore, Report Builder users must select a perspective within the model and not the top-level model."
This BOL (Sept. 2007) gives you the complete list of rules for creating and using cube-based report model.
http://msdn2.microsoft.com/en-us/library/aa337350.aspx
SQLインジェクション考
SQLインジェクションについて調べてみた。
Wiki
価格.com、ワコールの事件とか、この技で情報を盗まれてたんだ。それは知らなかった
@ITだとわかりやすく書いてある。
http://www.atmarkit.co.jp/fsecurity/rensai/hoshino09/hoshino01.html
こんな防御の仕方があった。
http://www.wwwcoder.com/main/parentid/258/site/2966/68/default.aspx
SUM() by GROUPS
下記データを1つのテーブルに格納してたい。
<データ>
Skiff Medical: $10
Skiff Medical: $20
Skiff Medical: $30
Straub Medical: $10
Straub Medical: $15
Straub Medical: $25
<求めたい結果>
Need to produce:
Skiff Medical: $60
Straub Medical : $50
CREATE TABLE #OneColumnOnly
(
TheOneColumn) VARCHAR(100)
)
INSERT INTO #OneColumnOnly(TheOneColumn))
SELECT 'Skiff Medical: $10'
INSERT INTO #OneColumnOnly(TheOneColumn)
SELECT 'Skiff Medical: $10'
INSERT INTO #OneColumnOnly(TheOneColumn)
SELECT 'Skiff Medical: $20'
INSERT INTO #OneColumnOnly(TheOneColumn)
SELECT 'Skiff Medical: $30'
INSERT INTO #OneColumnOnly(TheOneColumn)
SELECT 'Straub Medical: $10'
INSERT INTO #OneColumnOnly(TheOneColumn)
SELECT 'Straub Medical: $15'
INSERT INTO #OneColumnOnly(TheOneColumn)
SELECT 'Straub Medical: $15'
INSERT INTO #OneColumnOnly(TheOneColumn)
SELECT 'Straub Medical: $25'
<回答例>
SELECT
LEFT(TheOneColumn,CHARINDEX(':',TheOneColumn)) ,
SUM(CAST(RIGHT(TheOneColumn,LEN(TheOneColumn) - CHARINDEX('$',TheOneColumn)) AS INT))
FROM #OneColumnOnly
Group by
LEFT(TheOneColumn,CHARINDEX(':',TheOneColumn))
Skiff Medical: 70
Straub Medical: 65
(2 row(s) affected)