TypeUtils
TypeUtils
は Power BI カスタムビジュアルでよく扱う型について、多くの機能を提供します。特にデータの集計や軸に対する数値の設定など、Power BI では小数点をよく扱うため、小数点が絡む数値の扱いが行える Double は便利なモジュールです。
インストール
以下手順で追加。
1. npm コマンドでインストール。
npm install powerbi-visuals-utils-typeutils --save
2. tsconfig.json の files に型情報を追加。
{
"compilerOptions": {
...
},
"files": [
...,
"node_modules/powerbi-visuals-utils-typeutils/lib/index.d.ts"
]
}
3. pbiviz.json の externalJS に追加。
{
...
"externalJS": [
...,
"node_modules/powerbi-visuals-utils-typeutils/lib/index.js"
],
...
}
機能
- Double - 数値側の精度を操作
- Prototype - オブジェクトの継承をサポート
- PixelConverter - ピクセルとポイントの相互変換
Double
Double
は数値側の精度を操作する機能
powerbi.extensibility.utils.type.Double
モジュールでは以下の機能を提供
- pow10
- log10
- getPrecision
- equalWithPrecision
- lessWithPrecision
- lessOrEqualWithPrecision
- greaterWithPrecision
- greaterOrEqualWithPrecision
- floorWithPrecision
- ceilWithPrecision
- floorToPrecision
- ceilToPrecision
- roundToPrecision
- ensureInRange
- round
- removeDecimalNoise
- isInteger
- toIncrement
pow10
10 ベースにを指定した数乗する。
function pow10(exp: number): number;
pow10 の例
import Double = powerbi.extensibility.utils.type.Double;
Double.pow10(3); // 100
Double.pow10(5); // 10000
Double.pow10(25); // 1e+25
log10
10 をベースに指定した数の対数を取得する。
function log10(val: number): number;
log10 の例
import Double = powerbi.extensibility.utils.type.Double;
Double.log10(100); // 2
Double.log10(500); // 2
Double.log10(10000); // 4
getPrecision
元の数字に対して、指定した数の精度に対する桁の 10 の累乗を返す。
function getPrecision(x: number, decimalDigits?: number): number;
getPrecision の例
import Double = powerbi.extensibility.utils.type.Double;
Double.getPrecision(2345, 0); // 1000 (2345.0 -> 4 桁)
Double.getPrecision(2345, 1); // 100 (234.5 -> 3 桁)
Double.getPrecision(2345, 2); // 10 (23.45 -> 2 桁)
equalWithPrecision
指定した精度で、1 つ目の数と 2 つ目の数が同じか確認
function equalWithPrecision(x: number, y: number, precision?: number): boolean;
equalWithPrecision の例
import Double = powerbi.extensibility.utils.type.Double;
Double.equalWithPrecision(1.11, 1.12, 1); // true (1 = 1)
Double.equalWithPrecision(1.11, 1.12, 0.1); // true (1.1 = 1.1)
Double.equalWithPrecision(1.11, 1.12, 0.01); // false (1.11 = 1.12)
lessWithPrecision
指定した精度で、1 つ目の数が 2 つ目の数より小さいか確認
function lessWithPrecision(x: number, y: number, precision?: number): boolean;
lessWithPrecision の例
import Double = powerbi.extensibility.utils.type.Double;
Double.lessWithPrecision(1.11, 1.12, 1); // false (1 < 1)
Double.lessWithPrecision(1.11, 1.12, 0.1); // false (1.1 < 1.1)
Double.lessWithPrecision(1.11, 1.12, 0.01); // true (1.11 < 1.12)
lessOrEqualWithPrecision
指定した精度で、1 つ目の数が 2 つ目の数以下か確認
function lessOrEqualWithPrecision(x: number, y: number, precision?: number): boolean;
lessOrEqualWithPrecision の例
import Double = powerbi.extensibility.utils.type.Double;
Double.lessOrEqualWithPrecision(1.11, 1.12, 1); // true (1 <= 1)
Double.lessOrEqualWithPrecision(1.11, 1.12, 0.1); // true (1.1 <= 1.1)
Double.lessOrEqualWithPrecision(1.11, 1.12, 0.01); // true (1.11 <= 1.12)
greaterWithPrecision
指定した精度で、1 つ目の数が 2 つ目の数がより大きいか確認
function greaterWithPrecision(x: number, y: number, precision?: number): boolean;
greaterWithPrecision の例
import Double = powerbi.extensibility.utils.type.Double;
Double.greaterWithPrecision(1.12, 1.11, 1); // false (1 > 1)
Double.greaterWithPrecision(1.12, 1.11, 0.1); // false (1.1 > 1.1)
Double.greaterWithPrecision(1.12, 1.11, 0.01); // true (1.12 > 1.11)
greaterOrEqualWithPrecision
指定した精度で、1 つ目の数が 2 つ目の数以上か確認。
function greaterOrEqualWithPrecision(x: number, y: number, precision?: number): boolean;
greaterOrEqualWithPrecision の例
import Double = powerbi.extensibility.utils.type.Double;
Double.greaterOrEqualWithPrecision(1.12, 1.11, 1); // true (1 >= 1)
Double.greaterOrEqualWithPrecision(1.12, 1.11, 0.1); // true (1.1 >= 1.1)
Double.greaterOrEqualWithPrecision(1.12, 1.11, 0.01); // true (1.12 >= 1.11)
floorWithPrecision
指定した精度での切り捨て
function floorWithPrecision(x: number, precision?: number): number;
floorWithPrecision の例
import Double = powerbi.extensibility.utils.type.Double;
Double.floorWithPrecision(5.96, 0.001); // 5
// returns: 5
ceilWithPrecision
指定した精度での切り上げ
function ceilWithPrecision(x: number, precision?: number): number;
ceilWithPrecision の例
import Double = powerbi.extensibility.utils.type.Double;
Double.ceilWithPrecision(5.06, 0.001); // 6
floorToPrecision
指定した精度への切り捨て
function floorToPrecision(x: number, precision?: number): number;
floorToPrecision の例
import Double = powerbi.extensibility.utils.type.Double;
Double.floorToPrecision(5.96, 0.1); // 5.9
ceilToPrecision
指定した精度への切り上げ
function ceilToPrecision(x: number, precision?: number): number;
ceilToPrecision の例
import Double = powerbi.extensibility.utils.type.Double;
Double.ceilToPrecision(-506, 10); //-500
roundToPrecision
指定した精度への丸め
function roundToPrecision(x: number, precision?: number): number;
roundToPrecision の例
import Double = powerbi.extensibility.utils.type.Double;
Double.roundToPrecision(596, 10); // 600
Double.roundToPrecision(594, 10); // 590
ensureInRange
値が指定された範囲にあるか確認。いる場合は元の数が、小さい場合は min, 大きい場合は max が返る。
function ensureInRange(x: number, min: number, max: number): number;
ensureInRange の例
import Double = powerbi.extensibility.utils.type.Double;
Double.ensureInRange(20, 10, 30); // 20
Double.ensureInRange(5, 10, 30); // 10
Double.ensureInRange(35, 10, 30); // 30
round
値を丸める
function round(x: number): number;
round の例
import Double = powerbi.extensibility.utils.type.Double;
Double.round(27.45); //27
removeDecimalNoise
数値が小さすぎる小数点のノイズを削除する
function removeDecimalNoise(value: number): number;
removeDecimalNoise の例
import Double = powerbi.extensibility.utils.type.Double;
Double.removeDecimalNoise(21.493000000000002); // 21.493
isInteger
値が整数か確認する
function isInteger(value: number): boolean;
isInteger の例
import Double = powerbi.extensibility.utils.type.Double;
Double.isInteger(21.493000000000002); // false
Double.isInteger(21.0); // true
toIncrement
指定された数だけ増やし、丸めた値を返す。
function toIncrement(value: number, increment: number): number;
toIncrement の例
import Double = powerbi.extensibility.utils.type.Double;
Double.toIncrement(0.6383723, 0.05); //0.65
Prototype
Prototype
はオブジェクトを継承する機能を提供
powerbi.extensibility.utils.type.Prototype
モジュールで以下の機能を提供
inherit
指定したオブジェクトを継承した、新しいオブジェクトを作成
function inherit<T>(obj: T, extension?: (inherited: T) => void): T;
inherit の例
import Prototype = powerbi.extensibility.utils.type.Prototype;
let base = { Microsoft: "Power BI" };
Prototype.inherit(base);
/* returns: {
__proto__: {
Microsoft: "Power BI"
}
}*/
inheritSingle
inherit と同じだが、protptype がない場合に限り指定したオブジェクトを継承したオブジェクトを作成。
function inheritSingle<T>(obj: T): T;
inheritSingle の例
import Prototype = powerbi.extensibility.utils.type.Prototype;
let base = { Microsoft: "Power BI" };
Prototype.inheritSingle(base);
/* returns: {
__proto__: {
Microsoft: "Power BI"
}
}*/
PixelConverter
PixelConverter
はピクセルとポイントを相互変換する機能や文字列にする機能を提供
powerbi.extensibility.utils.type.PixelConverter
モジュールは以下の機能を提供
toString
ピクセルを文字列に変換
function toString(px: number): string;
toString の例
import PixelConverter = powerbi.extensibility.utils.type.PixelConverter;
PixelConverter.toString(25); //25px
fromPoint
ポイントをピクセルに変換し、文字列の形式で返す。
function fromPoint(pt: number): string;
fromPoint の例
import PixelConverter = powerbi.extensibility.utils.type.PixelConverter;
PixelConverter.fromPoint(8); // 33.33333333333333px
fromPointToPixel
ポイントからピクセルに変換
function fromPointToPixel(pt: number): number;
fromPointToPixel の例
import PixelConverter = powerbi.extensibility.utils.type.PixelConverter;
PixelConverter.fromPointToPixel(8); // 10.666666666666666
toPoint
ピクセルからポイントに変換
function toPoint(px: number): number;
toPoint の例
import PixelConverter = powerbi.extensibility.utils.type.PixelConverter;
PixelConverter.toPoint(8); // 6
まとめ
TypeUtil では Double の操作やピクセル変換など、ビジュアルを描写するのに必要な機能が提供されています。ここで紹介したものは一部の関数となるため、必要な関数がここにない場合は、Intellisense などを活用して探してみてください。