1

SSRSのフィールドを小数点以下の桁数に丸める方法を探しています。私はそれを動的にフォーマットすることができ、最終的にそれになるかもしれないことは知っていますが、多くのユーザがこのレポートをExcelに直接持ち帰り、実際の数値フィールドが必要になります。SSRSの小数点以下桁数を丸める

 NumLong01     DECIMAL(23,8) 
    , NumLongDP01    INTEGER 

この表のエントリの最初のセットはヘッダと丸めパラメータのためのものである:

マイT-SQLコードでは、これらの宣言された変数を含みます。だから私は、これらの2の値を追加します。

NULL 
,4 

そして私はと実際のテーブル値を追加します。私はテーブルに数字のシリーズ全体を置くことができますこの方法

987654321.87654321 
,NULL 

しかし、それらはすべて持っています同じようにフォーマットされます。

enter image description here

私はReportBuilderに行くとき、私のフィールドは、この表現があります:私は、小数点以下の一定数をフォーマットしたい場合は

=Fields!NumLong01.Value

をこのクエリの収量を実行

私はちょうどこれを行うことができます:

=Round(Fields!NumLong01.Value,2)またはそのようなものです。私が実行しようとしましたどのような、しかし、それを動的にすることでした。

=Round(Fields!NumLong01.Value,First(Fields!NumLongDP01.Value, "DataSet1"))

これは0小数点以下の桁数に丸めてしまいました。私はその後、自分のフィールドで後半を使うだけで、これがNULL値であることを学びました。だから私はSumの代わりにSumを試してみました。私のフィールドでは、私は4を得ました。グレート、今、私は私の番号を持っていた、と私はちょうど私の丸めなどのことを中に入れた:

=Round(Fields!NumLong01.Value,Sum(Fields!NumLongDP01.Value, "DataSet1"))

唯一の問題は、これはエラーを生成します。次に何らかの理由でこれを数字と見なしていないのかどうか、私は自分自身に尋ねました。だから私は自分のフィールドに追加しました。問題はありません。だから私は本当にそれが何をしているのか分からない。このフィールドが長くなりすぎて、不規則な数の小数点以下の桁に丸められると考えていますか?

=IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 8,Round(Fields!NumLong01.Value,8),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 7,Round(Fields!NumLong01.Value,7),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 6,Round(Fields!NumLong01.Value,6),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 5,Round(Fields!NumLong01.Value,5),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 4,Round(Fields!NumLong01.Value,4),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 3,Round(Fields!NumLong01.Value,3),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 2,Round(Fields!NumLong01.Value,2),IIf(Sum(Fields!NumLongDP01.Value, "DataSet1") = 1,Round(Fields!NumLong01.Value,1),Round(Fields!NumLong01.Value,0))))))))) 

を...、それは動作します:

今、私はこれを行うことができます。しかしそれはそれについて行くそのようなばかげた方法のように思えます。

また、t-SQLから四捨五入した数値だけを渡すことも快適です。しかし、数値書式で何らかの理由で小数点以下の桁数が動的に変化することはないため、レポートには一定の数の小数しか表示されないという問題があります。

すべてのアイデアをいただければ幸いです。

+0

その後、私は、フォーマットとして「N4」を使用してみました、そしてそれは実際にこれまでのところ、私としてExcelで働いていました伝えることができます。それは私が他のレポートを修正したときに過去に必ずしもそうではなかったが、私はなぜそれがわからない。それで私がそれをそのように動作させることができれば、私は満足しています。しかし、私が望んでいたように私の初期の丸めアプローチがなぜうまくいかなかったのかを知ることは、まだ興味があります。 – DaveX

+0

新しいアップデート:これまで私が以前使っていたExcelと同じ問題があります。ただ1行で、私は追加することが何もなかったので、私はちょうどそれに4のような固定数を追加し、それは私に合計を与えた。したがって、それはExcelの数値フィールドでなければなりません。違う。私は複数の行をすると、右下隅に(合計ではなく)カウントが得られます。そして、私の数の合計は0です。私はIIfの私の狂気のセットに戻ります。 – DaveX

+0

私は解決策を提案する前に、ほんの数回の短い質問をします。小数点以下はデータセットの最初の行として指定する必要があります。また、テーブル構造を変更することは許可されていますか?最後に、なぜあなたは具体的に小数点の可変(動的)番号を持つ必要がありますか? 0のパディングを避けるのですか? –

答えて

1

これは、レポートでカスタムコードを使用したり、データセットのSQLクエリを適用したりすることで、動的な丸めや数値書式設定を行う方法の完全なリストではありません。丸めを使用

この表のエントリの最初のセットはヘッダと丸めパラメータのためのものです。そうすれば、一連の数字をテーブルにまとめることができますが、それらはすべて同じ方法でフォーマットする必要があります。

Firstなどと Sum、あなたはその後、削除する必要が空白行を生成し、ちょうど行ごとに小数点以下の桁数を入力する代わりに、ヘッダー行の使用を検討して集約関数が必要なレポートの建物の表現を避けるために、 。コスト(記憶と表現の評価)は、たとえ冗長であっても低いです。 =Round(Fields!NumLong01.Value,First(Fields!NumLongDP01.Value, "DataSet1"))あなたはどちらか 表現として、あるいは、あなたのデータセットが呼び出された 計算フィールドDataSet1または何として =Round(Fields!NumLong01.Value,Fields!NumLongDP01.Value)を使用することができます。

これは、代わりに使用することを意味します。

をしかし、私はの動的な数のために許可されていません、それをフォーマットするための数で、レポート上の小数点以下の桁のみ一定数を示すの問題に遭遇:

は番号の書式を使用して何らかの理由で小数点以下の桁数。

レポート内のNumLong01フィールドにカスタム書式を定義し、カスタム書式設定文字列を作成する式を使用して動的にすることができます。

NumLong01テキストボックスまたはTablixのフィールドの
  1. オープンテキストボックスのプロパティ
  2. オープンNumberタブやFX]ボタンをクリックし、次の式="0." + StrDup(First(Fields!NumLongDP01.Value, "DataSet1"), "0")

を使用して、カテゴリリストから[カスタム

  • を選択あなたのサンプルデータを使用すると、この式はカスタムフォーマット文字列0.0000を生成し、987654321.87654321を987654321.8765に変更します。あなたの情報については、StrDupは、指定された文字列X回数を複製します。

    数値の小数部分が必要な小数精度よりも小さい場合、この書式設定文字列には0が埋め込まれます。それが望ましくない場合は、複製する文字列を"#"に変更してください:StrDup(First(Fields!NumLongDP01.Value, "DataSet1"), "#")

    また計算フィールド、データセット内のしかしあなたはヘッダー行を削除しているし、先に述べたように、すべての行の小数点以下の桁を入力している場合にのみとしてこの方法を使用することができます。これは、計算されたフィールド式で集計関数を使用できないためです。これを行うには

    、表現を使用してデータセットに計算フィールドを追加:この投稿へ=Format(Fields!NumLong01.Value, "0." + StrDup(Fields!NumLongDP01.Value, "0"))

  • 関連する問題