AppSheetでノーコードアプリ開発、Googleスプレッドシートから簡単にアプリが作れますが、ちょっとしたことで引っかかることも。そんな悩み、今回は割り算したのに小数点以下が表示されない!を解決します。
数値を取り扱う型は複数ある
AppSheetでは通常、数値はNumber型として取り扱われます。金額(Price型の場合もある)や個数などです。AppSheetでもこうした項目には自動でNumber型を充ててきます。
ということで、AppSheetではNumber型は数値を表すように感じがちですが、実際にはNumber型は「整数」を表しています。Number型の他に小数値を持つDecimal型、割合などを扱うPercentage型もあります。そして、それぞれの型の性質や挙動は、ノーコード開発ツールの割には厳格に決まっているのです(と思います)。
AppSheetのデータの型については、こちらもご覧ください。

【AppSheet】データの型を一気に見てみる!
AppSheetのデータ型について、タイプごとに何があるのか見ていきます。
Number型の演算はNumber型の結果を返す
さて、AppSheetではテーブルのデータを使って演算を行うことがあります。演算といっても足し引きなどの四則演算が中心ですが、関数を使って算術演算することももちろん可能です。
この場合、演算結果のデータ型は何になるのでしょうか?
例えば仮想列で演算する場合、その結果は仮想列の値となります。仮想列にも型を設定することができますが、どのように影響するのでしょうか。
答えは、演算結果の型は演算する数値の型で決まる、です。
AppSheetでは、Number型のデータの演算ではNumber型の結果を返します。x+yという計算をするとき、xとyがいずれもNumber型であれば、答えはNumber型で返ってきます。
ここで、値が返ってくる列にその他の型を定義するとどうなるでしょうか。Decimal型の列でいずれもNumber型のデータx+yを計算させた場合、計算はNumber型で行われ結果はDecimal型で格納されます。つまり、Decimal型で小数点以下3桁と設定しているとすると、Number型すなわち整数の返り値は小数点3桁までついて「z.000」という値になるのです。
割り算したらどうなる?
では、割り算したらどうなるのでしょうか?x=10、y=3の場合、x/y=3.3333...となりますが、xもyもNumber型で定義していると結果もNumber型になりますので「3」という結果が返ってきて小数点以下がなくなってしまいます。
問題は、計算結果が返ってくる列の型をDecimal型にしても、計算結果がNumber型になってしまうので値としては「3.000」になってしまうことです。これは他の型、例えばPercentage型にしても同じことになります。割合などを算出したい場合、小数点以下が出てこなければ値がゼロになってしまい、割合の計算ができません。
例えば、注文数の中からセットの注文数の率を計算してみます。
元データは以下の通りです。
仮想列「セット注文率」で計算式を以下のように設定しました。列の型はDecimalとし、小数点以下3桁まで表示させるようにしてあります。
結果はこの通り、「0.000」になってしまいます。
計算結果の型は計算する変数の型で決まる
ところで、Number型の演算はNumber型の結果を返すことはわかりますが、もし変数xがNumber型・変数yがDecimal型だったら、結果はどうなるでしょうか?
AppSheetではこれも決まっています。演算子の左右の変数が両方Number型なら計算結果はNumber型、そうでなければDecimal型になります。つまり、演算に使われる変数のひとつがNumber型以外であればDecimal型になる、ということになります。重要なことは、結果ではなく、計算の元になる変数の型によって計算結果の型が決まるということです。
DECIMAL関数を使って型を変える
では、10/3の結果を小数点以下まで得るにはどうしたら良いのでしょうか。これを解決してくれるのがDECIMAL関数です。
DECIMAL関数は、値の型をDecimal型にする機能があります。これを使って、計算するときに変数の一つをDecimal型とすることで、結果もDecimal型となり値の小数点以下まで出てくるようになります。このような感じになります。
x / DECIMAL (y)
なお、y=3だった場合、DECIMAL (y)自体は「3」となります。元がNumber型で小数点以下がないからです。
気をつけなければいけないのは、DECIMAL (x/y)とすると、小数点以下の結果は得られないということ。Number型のx、yの計算結果はNumber型ですので、それをDECIMAL関数の引数としても小数点以下の値が無いためです。
また、Text型などはDecimal型になる値がありませんので、DECIMAL関数ではゼロが返されます。
先ほどのサンプルの計算式もあらためてDECIMAL関数を使ってみます。分母・分子どちらでも良いのですが、今回は分母にDECIMAL関数を当ててみました。
結果がどうなったかというと・・・
割り算の結果が小数点3桁まで表示されるようになりました。データの型を「Percentage」にすると、パーセントで表示することができます。
DECIMAL関数を使うことで、整数同士の割り算で小数点以下まで値を求めることができるようになりました。
AppSheetのヘルプに書いてあるが・・・
ここで説明していること、実はAppSheetのヘルプに書いてあります。
Math expressions
Calculate numeric values from other numeric values. The following sections describe the components for building Math expressions:
DECIMAL()
Decimal from any value
問題は、ヘルプに到達するのが面倒ということ。AppSheetのヘルプはサラッと書いてあることが多く、書いてあることに気が付かなかったり、書いてあっても実際のケースに繋がらないこともありますね。
でも、やはり頼りになるのはAppSheetのヘルプ。根気よく、何度もヘルプを読みながら問題解決の糸口を見つけたいものです。
AppSheetを使ってアプリ開発
AppSheetを使ったデータ管理や生活の効率化、こちらの記事もご覧いただければと思います。

【AppSheetで在庫管理】ノーコードで食料在庫管理アプリを作る(はじめに)
素人がノーコードで在庫管理アプリを簡単に作る・・・実際に作ってみるとどうなるのか?AppSheetを使って食料品の在庫管理アプリを作ってみました。実際の開発時間は、夕食後の時間を使って一週間程度です。

【自分で作るAppSheet】アプリのイメージとAppSheetへのサインアップ(旅行のホテルと思い出写真を一緒に管理するアプリを作る(1))
AppSheetで旅の思い出を残すアプリを作ります。旅行で泊まったホテルを写真と一緒に管理するアプリ、まずは作成開始でアプリのイメージ作りとAppSheetへのログインを行います。
AppSheetの参考書
AppSheetをさらに研究するなら、こちらの参考書もどうぞ!
0 件のコメント:
コメントを投稿