確認に使用しているチャート・リージョンのソースのSQL問合せとして、以下を設定しています。
SELECT 1000 + (LEVEL - 1) * 80000 AS val, level l
FROM dual
CONNECT BY 1000 + (LEVEL - 1) * 80000 <= 2000000;
チャートのシリーズの列のマッピングとして、ラベルにL、値にVALを割り当てています。
Y軸のラベルのフォーマットですが、主に値の書式および書式スケールで決定されます。
チャートの初期化JavaScriptファンクションで設定できるのは、基本的にConverterOptionsなので、Converterインターフェースを実装したクラスが持つformatファンクションは定義できません。そのため、数値ラベルを変換するIntlNumberConverterのインスタンスを生成し、formatファンクションを置き換えた上で、チャートのY軸ラベルのConverterとして使用します。
Converterの置き換えはチャートのリフレッシュ後に実施します。
Y軸ラベルを置き換えるチャートに動的アクションを作成します。タイミングのイベントはリフレッシュ後です。
TRUEアクションとしてJavaScriptコードの実行を選択し、設定のコードに以下を記述します。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Create the base converter from IntlNumberConverter. | |
let baseConverter = new oj.IntlNumberConverter({}); | |
// Create a custom converter that wraps the base and overrides `format` | |
let customConverter = { | |
format: (value) => { | |
/* | |
* custom formatting rule. | |
*/ | |
if (value >= 10 ** 3 && value < 10 ** 6) { | |
value = (value / 1000).toFixed(0) + 'K' | |
} else if (value >= 10 ** 6) { | |
// change arg of toFixed from 0 to 1 | |
value = (value / 1000000).toFixed(1) + 'M' | |
}; | |
return value; | |
}, | |
/* Delegate all other methods. */ | |
getHint: () => { | |
return baseConverter.getHint(); | |
}, | |
parse: (value) => { | |
return baseConverter.parse(value); | |
}, | |
getOption: () => { | |
return baseConverter.getOption(); | |
}, | |
resolvedOptions: (options) => { | |
return baseConverter.resolvedOptions(options); | |
} | |
}; | |
let chart = apex.region("test").widget(); | |
chart.ojChart( | |
'option', | |
'yAxis.tickLabel.converter', | |
customConverter | |
); |
IntlNumberConverterのインスタンスを生成しformatファンクションを置き換えた後、チャートのyAxis.tickLabel.converterに設定しています。
JavaScriptからチャートを参照するために、詳細の静的IDとしてtestを設定しています。
また、チャートのY軸の値の書式に少数を選択します。yAxis.tickLabel.converterに設定したIntlNumberConverterのインスタンスは、書式が少数のときに限り有効になるようです。
以上の設定で、アプリケーションが日本語でもY軸のラベルにK、Mといった略記が表示されます。
今回の記事は以上になります。
作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/sample-y-axis-ticklabel-format.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完