2013年7月31日水曜日

Report Server で円グラフを使う

Microsoft SQL Server 2008 R2 のReporting Serivce についてです。

レポートに円グラフを使ってみたんですが、
円グラフで重要な指標といえば構成比。
要は全体に対するパーセンテージですね。

グラフ上にパーセンテージを表示させるのは比較的簡単で、
データラベルを表示させて、
データラベルのプロパティで、「#PERCENT」 を選べばグラフ上にパーセンテージが表示されます。


ただ、このままでは小数点以下が2桁表示されていて
表示が込み入ってくると見づらくなってくるので、小数点以下の桁数を調整したいんですが、
ここに罠が。


データラベルのプロパティを見ると"Format"プロパティがあるので、
ここかなーと思って設定しても全然反映されない。

正解は、先の「#PERCENT」に桁数の指定をつけて、「#PERCENT{P1}」と設定します。
(正確に言うと、データラベルのLabelプロパティ)

分かりにくっ!!


<参考URL>
http://msdn.microsoft.com/ja-jp/library/dd239373(v=sql.105).aspx

2013年3月8日金曜日

ピボットテーブルが便利すぎる

最近SQL Serverのピボットテーブルを覚えました。
こんな感じで出来ます。

データソースのテーブルとしては、
<uriage_t>
 商品コード | 売上月 | 売上金額
-------------------------------------------
 A          | 1月    |  \1,000
 A          | 2月    |  \2,000
 A          | 3月    |  \3,000
 B          | 1月    |  \4,000
 C          | 3月    |  \5,000

で、ピボットテーブルを作成するSQLは、
SELECT *
FROM uriage_t
PIVOT (
  SUM(売上金額) FOR 売上月 IN ([1月], [2月], [3月])
)

すると、こんな感じに集計されます。
 商品コード | 1月    | 2月    | 3月
-------------------------------------------
 A          | \1,000 | \2,000 | \3,000
 B          | \4,000 | <NULL> | <NULL>
 C          | <NULL> | <NULL> | \5,000

SQLのポイントとしては、次の通り

  • 集計対象のテーブルにくっつけてPIVOT句を書く
  • SUM指定された項目を集計する
  • FORで指定された値が列として出力
  • 集計対象のテーブルの項目の内、SUMとFORで指定された列以外で、GROUP BY が自動的にかかる


一覧表をバーンと出すのに便利なんですが、それでも足りない点がいくつかあります。
  • 集計列は固定で指定しなければいけない(動的SQLを使えば一応できる)
  • 集計の軸は1つのみ(例えば、金額と数両を同時に集計できない)
特に動的SQLは、C#やVBなどのアプリケーション側であれば簡単といえば、簡単なんですが、ストアド内で動的SQLを使おうとすると、一挙にソースの見通しが悪くなるのが辛い。

とはいえ、これが使えると『SQLでデータを取得して、主キーが同じ値の間ループして、該当する列に値を入れていく』とか言うめんどっちいことが要らなくなります。

便利なんで、ついつい使っちゃうんですが、単発のレポートを作るんだったら
Excelのピボットの方が10倍簡単なのが悲しいところですな。

2013年1月26日土曜日

とほほ・・

SSASの開発のために、開発環境にカレンダーテーブルとビューを作ってあったんですが、 本番環境の一部のテーブルを戻すために本番バックアップを開発環境にリストアしたら、上書きされてなくなってしまった。 なくなったことに気づいて、開発環境のバックアップから戻そうにも、バックアップの保持期限が2週間のため既に存在せず・・・ 同じように作ってみたものの、ディメンションの処理でエラーを起こしてしまう。 これから解析かと思うとうんざりですな。 開発環境=いつでもいじくりまわして良い環境とか思っていると痛い目にあうという話でした。