3

データセットが計算列を返す SQL クエリを実行する SSRS 2008 レポートがあります。このデータセットは、レポートのテーブルを埋めます。

計算列は小数点以下 4 桁までを返します。小数点第 2 位まで四捨五入したい。つまり、8660.125 は 8660.13 になり、1487.8521 は 1487.85 になります。

クエリのサンプル:

select [Hours] * [Rate] * [Complexity] * [Efficiency] from Hours

この丸めは、SSRS テーブルではなく SQL クエリで実行することをお勧めします。これは、テーブルを「非インテリジェント」に保ち、すべてのロジックを SQL クエリ自体にカプセル化できるようにするためです。提案?

4

2 に答える 2

7

ここには 2 つの問題があります。

まずは丸めです。Roundこれは、SQL の関数を使用して簡単に実行できます。

SELECT Round(8660.125, 2);
-- returns 8660.130

2 つ目は、ご覧のとおり、これでも小数点以下 3 桁が返されることです。これはデータ型によるものです。丸められた値を取得しましたが、まだ余分な桁が表示されています。

次の方法で修正できます。

SELECT Convert(decimal(16, 2), 8660.125);
--returns 8660.13 by implicitly rounding--you could round first but not needed

ただし、上記の 2 つの値は数値的には同じです。私の意見では、SQL Server 側でプレゼンテーションを扱うべきではありません。小数点以下 2 桁が必要な場合は、SSRS レポートでセルの形式を に設定するだけです#.00。これにより、必要な (四捨五入された) 小数点以下の桁数が得られます。必要な機能はありません。単純なプロパティです。

日付についても同じ原則です。日付の基になる値は単なる数値です。しかし、ユーザーに日付を表​​示する方法は無数にあります。長い名前を付けたり、パーツの順序を変えたり、区切り文字を変えたりします。日付形式を変更するたびに、SQL に戻ってConvert()スタイルを変更しますか?

レポート内のこれらの数値のフォント、色、サイズ、パディング、スタイル、位置、または可視性が SQL Server によって決定されるとは考えていません。これらもすべて設計時に手動で設定する必要があります。では、値の表示方法 (値が完全に等しい場合) が異なるのはなぜでしょうか? 私の意見では、これを SQL クエリに押し込むと、問題の領域が間違った場所に移動します。それは、そこにある必要のないクエリに複雑さ (「インテリジェンス」ではない) を追加しています! また、セルの数値形式を「インテリジェンスの追加」に設定することもわかりません。

これはプレゼンテーションの問題なので、他のすべてのプレゼンテーション要素が扱われる適切な場所 (SSRS レポート) に保管してください。

アップデート

クエリで変換を実行したい 1 つのシナリオを考えることができます。それは、値がさらに多くの計算で使用され、その計算に関するビジネス ルールでそれが必要になる場合です。たとえば、銀行の利息を計算する場合、「ステップ 1 の後、小数点以下 4 桁に丸め、ステップ 3 の後、最後に小数点以下 2 桁 (ドルとセント) に丸める」などのルールを設定できます。しかし、それは別の話です。現在は、その表示だけでなく、値が重要になっています。

于 2013-01-31T21:09:48.067 に答える
0

使用するようなものを試してくださいCAST-丸めを処理する必要があります。

SELECT CAST(col as DECIMAL(10,2))

これがSQL Fiddleです。

上記のサンプル クエリでは、次を使用します。

select CAST([Hours] * [Rate] * [Complexity] * [Efficiency] as DECIMAL(10,2)) from Hours

幸運を。

于 2013-01-31T21:09:29.753 に答える