Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

ダッシュボードでの表示方法について(その2)

Tsukuru Yuasa
Tera Contributor

お世話になっております。
ダッシュボードでの表示方法について伺いたく、投稿しました。

 

やりたい内容としては、あるテーブルのフィールドAとフィールドB(ともに件数などの値が入っている想定)が
入っているときに、(フィールドAの合計)/(フィールドBの合計)(=以下Cと記載)を%で表示させ、

 

さらにそのC(%)と、基準値D(%)を比較して、C=<Dであれば「達成」、C>Dであれば「未達」のように
ダッシュボードに表示したいです。どのようにすれば良いでしょうか?

 

よろしくお願いいたします。

5 REPLIES 5

iwai
Giga Sage

Widget の Dynamic Content で 計算して 比較した結果を表示する方法はどうでしょうか。コードは下記のようになります。Configure dynamic blocks (servicenow.com)

<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
	<g:evaluate var="jvar_result" object="true" >
		var result = {};
		var sumA;
		var sumB;
		var valueC;
		var valueD;
		var gr = new GlideAggregate('u_test_excel_20221031');
		gr.addAggregate('SUM', 'u_field_a');
		gr.addAggregate('SUM', 'u_field_b');
		gr.setGroup(false);
		gr.query();
		if (gr.next()) {
			sumA = parseFloat(gr.getAggregate('SUM', 'u_field_a'));
			sumB = parseFloat(gr.getAggregate('SUM', 'u_field_b'));
			valueC = sumA / sumB;
			valueD = parseFloat(1);
			if (valueC &lt;= valueD) {
				result = {"result":'達成 A '+sumA+', B '+sumB + ', valueC ' + valueC.toFixed(2),"valueC":(valueC*100).toFixed(2)};
			} else {
				result = {"result":'未達成 A '+sumA+', B '+sumB + ', valueC ' + valueC.toFixed(2),"valueC":(valueC*100).toFixed(2)};
			}
		}
		result;
	</g:evaluate>
	<p style="text-align:center; font-size: xx-large;">${jvar_result.result}</p>
	<p style="text-align:center; font-size: xx-large;">${jvar_result.valueC} %</p>
</j:jelly>

リプライありがとうございます。
こちらもContent BlocksのDynamic Contentで、いただいた情報を試してみます。

本件、コメントありがとうございました。

いただいた情報で実現できそうでした。


追加でご存じでしたら教えていただきたいのですが、
本件のように達成/未達成の判定を複数の対象で実施し、

その結果を「3件/5件達成」のように表示させたいと

考えているのですが、実現方法わかりますでしょうか?

判定を複数の対象で実施する場合は、下記のような処理になります。

<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
	<g:evaluate var="jvar_result">
        var tassei=0;//達成件数
        var count=0;//全体件数
        // 達成判定 1
		var gr = new GlideAggregate(/*データテーブル*/);
        if (/*判定*/) {
            tassei++;
		}
        count++;
        // 達成判定 2
		gr = new GlideAggregate(/*データテーブル*/);
        if (/*判定*/) {
            tassei++;
		}
        count++;
        // 達成判定 3
		gr = new GlideAggregate(/*データテーブル*/);
        if (/*判定*/) {
            tassei++;
		}
        count++;
        result = tassei + '件/' + count + '件達成';
		result;
	</g:evaluate>
	<p style="text-align:center; font-size: xx-large;">${result}</p>
</j:jelly>