Microstrategyノウハウ集

# MicroStrategyの基本オブジェクト

## レポートとは

> レポートは、データ ソースへの特定の書式設定済データ セットの要求を表す MicroStrategy オブジェクトです。最も基本的な形式では、以下の 2 つの部分で構成されます。
>
> > レポート テンプレート（通常は単にテンプレートと呼ばれる）。レポートの基礎となる構造です。
> >
> > テンプレートに配置されるレポート関連オブジェクト。アトリビュート、メトリック、フィルタ、プロンプトなどです。

１画面１レポートの場合もあれば複数レポートで構成される場合もある？
単純なレポートは少なくとも１アトリビュート、１メトリック、１フィルタを持ちます。

## アトリビュートとは

> アトリビュートは、データ ソース内に保存されたビジネス データに反映されるビジネス上の概念であり、ビジネス ファクトや計算をレポートおよび分析するためのコンテキストを提供します。会社の総売上を知ることが有益である一方で、その売上がいつどこで発生したものかがわかれば、ユーザーは必要な詳細分析を日々行うことができます。

うん、意味不明ですね。
以下のページのほうが分かりやすいでしょうか。そのまま訳すと**属性**なのでそのままの意味でしょう。

> "Age"（年齢）アトリビュートには従業員の年齢データが数値として含まれています。異なる部門の従業員の平均年齢を計算することができます。"Age"（年齢）アトリビュートから派生メトリックを作成し、すべての従業員の年齢を集計します。続いて、各部門の"Age"（年齢）メトリックの平均を求めることができます。

## メトリックとは

> メトリックは、ビジネスの測定値および主要業績評価指標 (KPI) を表す MicroStrategy オブジェクトです。実際的には、メトリックはデータベースに保存されたデータに対して実行される計算であり、その結果はレポートに表示されます。メトリックは、スプレッドシート ソフトウェアにおける式に似ています。たとえば、南東部での売上を示すレポートでは、"売上" がメトリックです。

メトリックという言葉からして、何かを測る**物差し**的な意味合いがあるかと思いっます。KPIってのもそういう意味なんでしょう。何かしら指標値を計算する際に使うもの、という認識です。

## フィルターとは

> データ ソースのデータを選別して、そのデータがレポート結果の計算に含まれるか除外されるかを決定します。スタンドアロン フィルタを作成してレポートに追加することや、レポート内で直接フィルタを作成することができます。

これは説明が不要かと思います。名前のとおりデータソースから特定のデータのみ抽出することができます。

## プロンプトとは

> レポート実行時にユーザに提示される質問です。プロンプトをレポートに追加して、ユーザが質問にどのように回答するかによって、どのデータをレポートに表示するかを指定できます。

これも分かりやすいですね。対話的に抽出するデータを絞り込むイメージです。

## ドシエとは

> ドシエは、ビジネスデータを紹介および探索するために作成できる、対話型の表示です。データの視覚的表現 (ビジュアリゼーションと呼ばれる) をドシエに追加することによって、データを解釈しやすくしたり、データを操作して表示する情報をカスタマイズしたり、複数の章およびページにデータを整理してドシエに論理的なフローを提供したりすることができます。デザインに長い時間をかけなくても、洗練されたドシエを、すばやく簡単に作成できます。

Ajax的？にビジュアル表示された画面をドリルダウンで更新していくようなものでしょうか。ここはもう少し勉強が必要です。

## レポートの表示形式

レポートは**グリッド**, **グラフ**, またはその両方の組み合わせで表示することができる。

# よく使うDOM操作
下方で書いているCustom Pluginで画面をごりごりするときに使うかも。

### ID取得

```javascript
var sample = document.getElementById('sample');
```

### Class取得

```javascript
var sample = document.getElementsByClassName('sample');
```

### タグで囲まれた中身取得

```javascript
//一旦IDを取得します（勿論Classでもtagでもいい）
 var sample = document.getElementById('sample');
//IDを取得したら、.で区切りinnerHTMLと記述します
 var sampleInner = sample.innerHTML;
```

## イベントハンドラの種類

取り敢えず１つだけ。

| onClick | クリックしたとき |
| ------- | ---------------- |
|         |                  |

# Javascriptによる動的URL作成方法

適当なサンプルをWebから拾ってきました。

```html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
	<meta charset="utf-8" />
  <script type="text/javascript">
    function button_click(value) {
      var target = document.getElementById("searchLink");
      if (value == 0) {
        target.href = "http://google.co.jp";
        target.innerText = "サイトへのリンク (google)";
      }
      else if (value == 1) {
        target.href = "http://yahoo.co.jp";
        target.innerText = "サイトへのリンク (Yahoo)";
      }
      else if (value == 2) {
        target.href = "https://www.bing.com/?cc=jp";
        target.innerText = "サイトへのリンク (Bing)";
      }
      else if (value == 3) {
        target.href = "http://ja.wikipedia.org";
        target.innerText = "サイトへのリンク (Wikipedia)";
      }
    }
  </script>
</head>
<body>
  <a id="searchLink" href="http://www.google.co.jp">サイトへのリンク (Google)</a><br/>
  <hr />
  <input type="button" value="Google" onclick="button_click(0);" />
  <input type="button" value="Yahoo" onclick="button_click(1);"/>
  <input type="button" value="Bing" onclick="button_click(2);" />
  <input type="button" value="Wikipedia" onclick="button_click(3);" />
</body>
</html>
```




#Custom Pluginについて
* ほぼ全てのPageにはglobal.jsというJavascriptが含まれている。
 - Custom Javascipt（Pluginに入れるやつ）だと認証を組み込まないといけないが、global.jsを使えば組み込む必要がない？

* JavascriptでPromptを弄るのであればreportPage.jsとrwdPageを弄る必要がある。それぞれ、レポートの実行・ドキュメントの実行時に使われるJSファイルである。

* Custom Pluginを作るときはMicrostrategy SDKを使うと良い。SDKのなかに含まれる「Web Customization Editor」で作成・編集できる。

* Custom Plugin置き場は以下である。
 - plugins\pluginName\javascript
 - 慣習的にJSファイルの名前は以下にすること。
  - [Name of the page]Page.js


## テキストマクロ

勝手に展開される変数、と思ってる。

| AUTOTEXT                  | DESCRIPTION                                                  |
| ------------------------- | ------------------------------------------------------------ |
| {&PAGE}                   | Display the current page.                                    |
| {&NPAGES}                 | Display the total number of pages.                           |
| {&DATETIME}               | Display the current date and time.                           |
| {&USER}                   | Display the user name that is executing the Report Services Document. |
| {&DOCUMENT}               | Display the document name.                                   |
| {&DOCUMENTID}             | Display the document ID.                                     |
| {&DESCRIPTION}            | Display the document description.                            |
| {&PROJECT}                | Display the project name.                                    |
| {&EXECUTIONTIME}          | Display the execution time.                                  |
| {&SERVERNAME}             | Display the Intelligence Server name                         |
| {&*REPORT*:FILTERDETAILS} | Display the filter details of that report.                   |
| {&*REPORT*:PROMPTDETAILS} | Display the prompt details of that report.                   |
| {&*REPORT*:REPORTDETAILS} | Display the report details.                                  |
| {&NOTES}                  | Display the Report Services Document notes.                  |
| {&Prompt1&}               | Display the answer of the first prompt.                      |
| {&WEBSERVER}              | Display the Web server URL.                                  |
| {&TITLE}                  | Display the Report Services Document inbox title.            |
| {&PROMPTXML}              | Display the prompt answers XML.                              |
| {&DOCUMENTMESSAGEID}      | Display the message ID of the Report Services Document.      |
| {&*REPORT*:GUID}          | Display the GUID of that particular report.                  |
| {&*ATTRIBUTE*@ELEMENTID}  | Display the Element ID of that attribute.                    |
| {&*ATTRIBUTE*@GUID}       | Display the GUID of that particular attribute.               |

## Command Managerの使い方