---
title: "高度な関数"
canonical: "https://wiki.yellowfin.co.jp/space/yfcurrent/1901402/%E9%AB%98%E5%BA%A6%E3%81%AA%E9%96%A2%E6%95%B0"
format: markdown
---
> Macro (anchor)



> Macro (toc)

## 概要

高度な関数は、最初のクエリ―結果に対して後処理の計算を適用することで、結果を変換するために使用します。これらの関数は、SQLクエリ―の一部ではなく、Javaコードにより実行されるため、データベースには依存しません。


### 利用可能な関数

Yellowfinは、定義済みの関数を用意していますが、管理者によって、組織やレポート要求に特化した関数が追加されることもあります。利用可能な関数は、以下の一覧を展開して確認をしてください。


<details>
<summary>分析</summary>

|  |  |
| --- | --- |
| **累積比率** | 選択したフィールドの合計に対する累積比率を返します。最大値は100%です。 |
| **累積値同士の百分率（%）** | 選択したフィールドの合計値を、他のフィールドの合計値に対するパーセンテージで表示します。 |
| **切り捨て累積百分率** | 選択したフィールドの合計の累積百分率を、特定の比率で切り捨てます。切り捨てる比率は、固定することもできますし、ユーザープロンプトとして設定することもできます。 |
| **累積合計** | 選択したフィールドの累積合計を返します。 |
| **昇順（1-9）ランク** | 選択したフィールドの総合順位を昇順（1-9）で返します。最上位は1です。数値が高い方が好ましい値に対して使用されます。例：利益 |
| **最下位から10位** | 選択したフィールドの最下位から10位までの値を返します。 |
| **最下位からN位** | 選択したフィールドの最下位からN位までの値を返します。ユーザーは、返される値を定義しなくてはいけません。 |
| **前値からの増分** | 連続するロウ（行）間の、計算された変更を表示します。 |
| **前値Nからの増分** | 現在のロウ（行）から「現在－N行」間の、計算された変更を表示します。 |
| **降順（9-1）ランク** | 選択したフィールドの総合順位を降順（9-1）で返します。最下位は1です。数値が低い方が好ましい値に対して使用されます。例：経費 |
| **前値からの偏差** | 前値からの偏差を表示します。使用される式は：（現在値-前値）/前値 |
| **カラム間の差** | 選択した2つのカラム（列）間の差を表示します。 |
| **差異の切り捨て** | 2つのメトリック列間の切り捨てられた差を表示します。 |
| **カラムで除算** | 選択した2つのカラム（列）の除算を返します。現在のカラム（列）は分母になり、分子は設定中に定義されます。 |
| **カラムの除算** | 選択した2つのカラム（列）の除算を返します。現在のカラム（列）は分子になり、分母は設定中に定義されます。 |
| **合計の百分率（%）フィルター** | 選択したフィールドの合計に対する百分率（%）を、定義した閾値より上か下かで返します。 |
| **合計のグループ化百分率（%）** | 特定のフィールド/カラム（列）の上位を百分率（%）で返します。 |
| **成長率切り捨て** | 2つのメトリックフィールド間の切り捨てられた成長をパーセンテージで表示します。 |
| **カラムの乗算** | 選択した2つのカラムの乗算を返します。 |
| **自然対数** | 与えられたフィールドの値のeを底とする対数を与えます。 |
| **Nullをゼロ** | フィールドのすべてのNull値をゼロに置き換えます。 |
| **絶対最大値に対する百分率（%）** | 選択したフィールドの絶対最大値に対する百分率（%）を返します。 |
| **累積値に対する百分率（%）** | 他のフィールドの実行中の合計値に対する選択したフィールドの割合を表示します。 |
| **カラムに対する百分率（%）** | 選択したカラム（列）の、他のカラム（列）に対する比率を返します。 |
| **最大値に対する百分率（%）** | データセット内の属性の最大値と比較した場合の、属性の百分率（%）を返します。 |
| **カラムに対する変化百分率（%）** | 選択したフィールドの、他のカラム（列）に対する変化を百分率（%）で返します。 |
| **初期値の百分率（%）** | カラム（列）の初期値と比較した値の百分率（%）を返します。 |
| **セグメントにおける割合** | ディメンションで分割した小計値に対する百分率（％）を返します。 |
| **合計値に対する百分率（%）** | データセット全体の属性の合計値と比較した場合の、属性の百分率（%）を返します。 |
| **期間平均** | 一定期間の平均を表示します。 |
| **値の削除** | 特定の閾値を上回る、または下回る値を削除します。 |
| **スパークライン用の配列** | 日付フィールドでデータを集約して、選択したメトリック（数値）の配列を作成します。**<span style="color: #FF0000">ヒント：</span>**これをスパークラインフォーマッターと使用することで、レポートにスパークライングラフを作成します。手順は、[こちら](https://yellowfinjp.atlassian.net/wiki/spaces/yfcurrent/pages/1901583#id-レポートテーブルスパークライン-手順)を参照してください。 |
| **カラムの集約** | 選択した2つのカラム（列）の集約を返します。 |
| **最上位から10位** | 選択したフィールドの最上位から10位までの値を返します。 |
| **最上位からN位** | 選択したフィールドの最上位からN位までの値を返します。ユーザーは、返される値を定義しなくてはいけません。 |
| 最上位**からN位 ****（同順位を含む）** | 選択したフィールド（関連づけあり）の最上位からN位の値を返します。これはつまり、同順位に複数のレコードがある場合、これをN個の合計順位に制限することを意味します。 |
| **合計値に対する上位/下位N百分率（%）** | 指定したカラム（列）を構成する上位、または下位N位の百分率（%）を返します。 |
| **上位/下位 N位** | 選択されたフィールドの上位または下位の値を表示します。ユーザーは、表示する項目の数を指定したり、ユーザープロンプトとして設定したりすることができます。方向 (上または下)、閾値を満たさない値の処理方法、フィールドをランクとして表示するか実際の値として表示するかも設定できます。 |
| **データセット切り捨て** | データセットの上位、または下位から指定したN行を削除します。 |
</details>

<details>
<summary>日付＆時間</summary>

|  |  |
| --- | --- |
| **日付の外挿** | 指定した期間により、表に表示される日数範囲を延長します。期間内の日数、または単位の両方で定義することができます。 |
| **日付****期間の抽出** | 指定した期間から日付、またはタイムスタンプコンポーネントを取得します。 |
| **日付間の日数** | 選択した2つの日付カラム（列）間の日数を返します。 |
| **日付間の日数（オフセット付き）** | 選択されたフィールドの日付（終了日）と別の列の日付（開始日）の間の日数を表示し、日数をオフセットするオプションもあります（例：終了日 +/- オフセット - 開始日）。 |
| **現在までの日数** | 選択した日付カラム（列）と現在の間の日数を返します。（期間の日数） |
| **日付間の月数** | 選択した2つの日付カラム（列）間の月数を返します。 |
| **現在までの月数** | 選択した日付カラム（列）と現在の間の月数を返します。（期間の月数） |
| 期間平日数 | 選択した日から現在までの平日数を返します。 |
| **日付間の年数** | 選択した2つの日付カラム（列）間の年数を返します。 |
| **現在までの年数** | 選択した日付カラム（列）と現在の間の年数を返します。（期間の年数） |
</details>

<details>
<summary>統計</summary>

|  |  |
| --- | --- |
| **デシル（十分位数）** | デシル（十分位数）は、結果を降順（10-1）に並べ十区分し、ランク付けしたもので、分散を見るために使用します。 |
| **偏差****（****Deviation****）** | 平均からの偏差の数です。 |
| 線形回帰 **（Linear Regression）** | 線形近似曲線は、シンプルな線形データの分析に適しています。データポイントが線形パターンを描くとすれば、そのデータは線形と考えられます。線形近似曲線は通常、一定の割合で増減していることを示します。 |
| **相加平均 ****（Mean）** | 数値一覧の算術平均（または、単なる平均）は、一覧内のすべてを合計した値を、一覧内のアイテム数で除算した値を示します。 |
| **中央値 ****（Median）** | 中央値は、サンプル、母集団、または確率分布の上半分と下半分を分ける値を示します。 |
| 最頻度 **（Mode）** | 最頻度は、データセット内で最頻の値を示します。 |
| **移動平均 ****（Moving Average）** | 移動平均の近似曲線は、データのパターンや傾向をより明確に示すために、データの変動をスムーズにします。<br>移動平均は、期間オプションで設定された特定数のデータポイントを平均し、その平均値を線で描くためのポイントとして使用します。<br>例えば、期間を2に設定した場合、最初の2つのデータポイントの平均が、近似曲線の最初のポイントとして使用されます。そして、二番目、三番目のデータポイントが、二番目のポイントとして使用される、という具合に曲線を形成していきます。 |
| **移動合計 ****（Moving Total）** | 直近のN期間の合計です。 |
| **単純予測 ****（Naïve Forecasting）** | 単純予測は、移動平均予測の特殊な形態で、平滑化に使用される期間を1に設定したものです。そのため、期間tの予測はシンプルに、期間t-1となります。<br>単純な予測モデルのため、ひとつの期間しか予測することができず、中長期間の予測ツールには適していません。 |
| **多項式回帰 ****（Polynomial Regression）** | 多項式近似曲線は、変動するデータの表示に使用される曲線です。例えば、大きなデータセットの増減を分析する場合に適しています。多項式の次数は、データの変動数や、描く曲線数（山や谷の数）により決まります。二次多項式近似曲線には通常、山と谷がひとつずつあり、三次多項式近似曲線には、ひとつか2つ、四次多項式近似曲線には、最大で3つあります。 |
| 四分位数 **（Quartile）** | 四分位数は、結果を降順（4-1）に並べ四区分し、ランク付けしたもので、分散を見るために使用します。 |
| **SPC - 関数** | ユーザー定義の機能を追加した、高度な移動平均機能です。<br>- 信頼度の上限値と下限値を表示
- 移動平均から指定した標準偏差を加算または減算することで、外れ値をハイライト表示。 |
| **SPC - ステップの変化** | ユーザーが設定した値だけ、データが平均値の上または下に移動したことを検出します。 |
| **標準偏差 ****（Standard Deviation）** | 標準偏差は、値のセットの分散の尺度です。これは、確率分布、確率変数、母集団、複数集合に適用することができます。 |
| **平均値からの標準偏差（Standard Deviation from Mean）** | 選択されたフィールドの平均値から離れた標準偏差の各値の数を計算します。また、選択したしきい値に基づき値を削除します。 |
| **標準得点 ****（Standard Score）** | 標準得点は、平均値を上回る、もしくは下回る標準偏差数を示します。これにより、調査で頻繁に実施される様々な正規分布での観測と比較することができます。 |
| **デジタル回帰（Digital Regression）** | 指定されたカラム（列）に対して、階段関数を実装します。 |
| **傾向（Trend）** | 日付期間の延長線上に、メトリック（数値）の傾向を表示します。 |
| **三重指数平滑法（Triple Exponential Smoothing）** | 入力されたデータセットに基づき、三重指数平滑法の結果を返します。 |
| **分散（Variance）** | データセット間の分散を返します。 |
| **加重移動平均****（****Weighted Moving Average**<br>**）** | より新しい値に重きをおいた、加重移動平均を返します。 |
</details>

<details>
<summary>テキスト</summary>

|  |  |
| --- | --- |
| **カラムを連結** | 2つのカラム（列）を連結して、ひとつの文字列にします。 |
</details>

<details>
<summary>データ変換</summary>

データ変換により、データベースから返された結果を調整することができます。例えば、データベースに保存された通貨価格を、全桁の通貨価格表示から、1,000で除算した通貨価格表示に変換する場合に、使用することができます。
</details>


### 高度な関数のカスタマイズの例　–　Rの統合

高度な関数のカスタマイズの例として、レポートでRを使用する方法を示します。

#### Rスクリプトを記述する

<details>
<summary>クリックして展開する</summary>

YellowfinにRスクリプトを理解させ、実行させるためには、以下に記載されているように、若干異なるスクリプト構造を使用します。

サンプルスクリプト、<R_file_name>.Rを見てみましょう。Yellowfinから渡された入力パラメーターは、<R_file_name>.R.input.csvで利用可能になります。処理が進むと、Rスクリプトは、結果（ひとつのカラム（列）のみ）を<R_file_name>.R.result.csv に書き込みます。

以下は、Neural NetworksのためのRスクリプトのサンプルです。こちらのスクリプトをコピーすれば、エラーを発生することなくRが動作します。

##### **Sample R-Script : neural-net-script.R**

```
setwd("C:/R/R-3.2.3/bin/x64")
library(rattle)   #
To access the weather dataset and utility commands.
library(magrittr) # For the
%>% and %<>% operators.
building <- TRUE
scoring  <- ! building
# A pre-defined value is used
to reset the random seed so that results are repeatable.
crv$seed <- 42 
# Load the data.
rPATH  <-
Sys.getenv("RSCRIPT_PATH")
rINPUT <- paste0(rPATH ,"/neural-net-script.r.input.csv")
rOUTPUT <- paste0(rPATH
,"/neural-net-script.r.result.csv")
dataset <-
read.csv(file=rINPUT, header=FALSE, sep=",")
# Note the user
selections. 
# Build the
training/validate/test datasets.
set.seed(crv$seed) 
crs$nobs <- nrow(dataset) #
366 observations 
crs$sample <- crs$train
<- sample(nrow(dataset), 0.7*crs$nobs) # 256 observations
crs$validate <-
sample(setdiff(seq_len(nrow(dataset)), crs$train), 0.15*crs$nobs) # 54
observations
crs$test <-
setdiff(setdiff(seq_len(nrow(dataset)), crs$train), crs$validate) # 56
observations
# The following variable
selections have been noted.
crs$input <-
c("V1", "V2", "V3", "V4","V5")
crs$target 
<- "V6"
#============================================================
# Neural Network 
#============================================================
# Build a neural network model
using the nnet package.
library(nnet, quietly=TRUE)
# Build the NNet model.

set.seed(199)
crs$nnet <-
nnet(as.factor(V6) ~ .,data=dataset[crs$sample,c(crs$input, crs$target)],size=10,
skip=TRUE, MaxNWts=10000, trace=FALSE, maxit=100)
#============================================================
# Score a dataset. 
#============================================================
# Obtain probability scores for
the Neural Net model on weather.csv [validate].
#crs$pr <- predict(crs$nnet,
newdata=dataset[crs$validate, c(crs$input)], type="class")
#crs$pr <- predict(crs$nnet,
newdata=dataset[crs$validate, c(crs$input)], type="class")
crs$pr <- predict(crs$nnet,
newdata=dataset, type="class")
write.table(crs$pr,
file=rOUTPUT, row.names=FALSE, col.names = FALSE)
```
</details>

#### Rスクリプトの呼び出し

<details>
<summary>クリックして展開する</summary>

一度インストールをすれば、高度な関数メニューから、こちらの機能を使用することができます。

![image](media://8fa8ff3a-1cdc-4e3a-b74b-2dc7671e0bcf)
</details>

## 関数の適用

### レポートビルダー - データステップ

高度な関数を適用する場合、まず始めに、関数を適用するフィールドを表に追加しなくてはいけません。関数を適用する場合、表内にフィールドのコピーが2つ必要になることがあります。ひとつは元の値（売上額、など）を表示するため、もうひとつは関数（例えば、売上額の最上位から10位を表示、など）を適用するために必要です。

レポートビルダーのデータステップで、表内のフィールドに関数を適用するためには、以下の手順を実行します。


1. 以下のいずれかの方法で、フィールドのドロップダウンメニューを開きます。
  
  1. カラム（列）/ ロウ（行）一覧から
    
  2. 表のプレビューから
    
2. 一覧から「**高度な関数**」オプションを選択し、高度な関数設定画面を開きます。
3. 以下の関数オプションを入力します。
  
  1. フィールドに適切な集約を適用します。これにより、必要なすべての集約の最上位に、この関数が適用されます。
  2. 「**分析**」、「**統計**」、「**テキスト**」から、適用したい関数タイプを選択します。
  3. 一覧から使用したい関数名を選択します。関数名を選択すると、その関数の説明が横のボックスに表示されます。いくつかの関数は、関数を選択してから、パラメーターの定義を要求されます。
  4. 関数を「**グラフ**」ページのみに表示するように設定することもできます。これはレポートの表から対象のフィールドを非表示にしますが、カラム（列）/ ロウ（行）一覧から、これを閲覧、編集することが可能です。これにより、表示目的で関数を適用するフィールドのコピーを追加する場合に、追加されたフィールドで表を煩雑にすることがありません。
    
4. 関数の定義が完了したら、「**保存**」ボタンをクリックして、適用します。

### レポートビルダー - グラフステップ

レポートビルダーのグラフステップから、表内のフィールドに関数を適用する場合は、以下の手順を実行します。

1. 画面の左下部にある「**+**」ボタンをクリックします。
  
2. 「**高度な関数**」を選択して、使用するフィールドを一覧から選択し、高度な関数設定画面を開きます。
3. 関数オプションを入力します。
  1. フィールドに適切な集約を適用します。これにより、必要なすべての集約の最上位に、この関数が適用されます。
  2. 「**分析**」、「**統計**」、「**テキスト**」から、適用したい関数タイプを選択します。
  3. 一覧から使用したい関数名を選択します。関数名を選択すると、その関数の説明が横のボックスに表示されます。いくつかの関数は、関数を選択してから、パラメーターの定義を要求されます。
  4. 関数を「**グラフ**」ページのみに表示するように設定することもできます。これはレポートの表から対象のフィールドを非表示にしますが、データステップのカラム（列）/ ロウ（行）一覧から、これを閲覧、編集することが可能です。これにより、表示目的で関数を適用するフィールドのコピーを追加する場合に、追加されたフィールドで表を煩雑にすることがありません。
    
4. ．関数の定義が完了したら、「**保存**」ボタンをクリックして、適用します。

### レポートビルダー　–　デザインステップ

レポートビルダーのデザインステップで、表内のフィールドに関数を適用するには、以下の手順を実行します。

1. フィールドのドロップダウンメニューを開きます。
  
2. 一覧から「**高度な関数**」オプションを選択して、高度な関数設定画面を開きます。
3. 関数オプションを入力します。
  1. フィールドに適切な集約を適用します。これにより、必要なすべての集約の最上位に、この関数が適用されます。
  2. 「**分析**」、「**統計**」、「**テキスト**」から、適用したい関数タイプを選択します。
  3. 一覧から使用したい関数名を選択します。関数名を選択すると、その関数の説明が横のボックスに表示されます。いくつかの関数は、関数を選択してから、パラメーターの定義を要求されます。
  4. 関数を「**グラフ**」ページのみに表示するように設定することもできます。これはレポートの表から対象のフィールドを非表示にしますが、データステップのカラム（列）/ ロウ（行）一覧から、これを閲覧、編集することが可能です。これにより、表示目的で関数を適用するフィールドのコピーを追加する場合に、追加されたフィールドで表を煩雑にすることがありません。
    
4. 関数の定義が完了したら、「**保存**」ボタンをクリックして、適用します。

## データ変換の適用

以下の手順を実行することで、フィールドのデータを変換することができます。


1. 上記で説明されているように、「**高度な関数**」表示を開きます。
2. 「**データ変換**」タブを選択します。 こちらの画面から、変換したいデータを選択します。
3. 変換に適切な集約を選択します。
4. 選択した変換を適用するために、「**追加**」ボタンをクリックします。選択したデータタイプで使用可能な変換の一覧が表示されます。デフォルト設定では、「**Javaデータコンバーター**」と「**数値除算コンバーター**（値を1,000で除算します）」表示されます。
5. 画面の指示に従って操作し、「**保存**」ボタンをクリックします。
6. 必要に応じて、「**追加**」ボタンをクリックして新しいタイプを作成することで、複数のコンバーターをデータに追加することができます。