除算を含むフィールドが 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