除算で項目が 0 になっているのはなぜですか?

Postgres や Redshift などの特定の言語では、結果が通常の小数点以下であっても、整数の除算などの数値を計算すると小数が返されます。たとえば、次のような対策を講じることができます。

measure: sold_ratio {
    type: number
    sql: ${sold_count} / ${total_count} ;;
    value_format: "0.00" # Number with exactly 2 decimals (1.23)
}

measure: sold_percent { type: number sql: 100 * ${sold_count} / ${count} ;; value_format: "0.00" }

ただし、Explore でメジャーを実行すると、[Sold Ratio] 列がゼロを返し、[Sold Percent] 列には小数点以下の桁が入力されません。不正解です。

インベントリ アイテムの Sold Percent 在庫項目の Sold Ratio 在庫アイテム数 在庫アイテムの販売数
48.00 0 1,165,224 560,223

解決策: フィールドを浮動小数点数としてキャストする

計算で整数以外の乗算を行うと、値は浮動小数点数としてキャストされ、小数値は想定どおり返されます。分子に 10 進数(1.0、100.0 など)を乗算すると、SQL は強制的に 10 進数の結果を返します。

measure: sold_ratio {
    type: number
    sql: 1.0 * ${sold_count} / ${total_count};;
    value_format: "0.00"
}

measure: sold_percent { type: Number sql: 100.0 * ${sold_count} / ${count};; value_format: "0.00" }

結果の Explore データテーブルには、期待される結果が表示されます。

インベントリ アイテムの Sold Percent 在庫項目の Sold Ratio 在庫アイテム数 在庫アイテムの販売数
48.08 0.48 1,165,224 560,223