1

レポートパラメータを入力するためのクエリがあります。

select distinct [Source No_] from _report_sales_master
where [Industry] = @Industries
and [posting date] >= dateadd(year,datediff(year,'01/06/2000',@year)-1,'01/06/2000') 
and  [posting date] < dateadd(year,datediff(year,'01/06/2000',@year),'01/06/2000')
order by [Source No_]

クエリの結果、複数値のレポートパラメータを入力するために使用するリストが作成されます。

クエリを実行すると、正しい結果が生成されます。

レポートを実行すると、@ yearまたは@industriesのどちらを選択しても、「SourceNo_」パラメーターは空のままになります。

クエリから「postingdate」句を削除すると、パラメータリストが入力され、正しく機能します。

私は何が欠けていますか?

4

2 に答える 2

0

ハードコーディングされた日付 (文字列リテラル) を format に入れてみてください'yyyy-mm-dd'。日付を dd/mm/yyyy または mm/dd/yyyy の形式で入力すると、SSRS が月と日付を混同する可能性があることがわかりました。

日付のローカリゼーションのために db レベルと SSRS レベルの両方でさまざまな設定を試してみたところ、形式の日付文字列が問題を引き起こす可能性があることがわかりました (具体的な原因はわかりません)。

文字列リテラルを使用しているため、次のいずれかに解決するために実行される暗黙的な変換があります: time, date, smalldatetime, datetime, datetime2、またはdatetimeoffset値。

日付の不正を防ぐもう 1 つの方法は、文字列リテラルを明示的なキャストに置き換えることです。次に例を示します。

  • CONVERT(datetime, '2012-06-01', 101)月 = 6 月と仮定します
  • CONVERT(datetime, '2012-01-06', 101)月 = 1 月と仮定します

他に確認できる唯一のことは、レポートのパラメーターが列の正しいデータ型に設定されていること[Source No_]です。

于 2012-10-29T02:25:27.143 に答える
0

これをデータベースに入れて、遊んでください:

DECLARE @year DATETIME
SELECT @year = TypeDateTimeInputHere
SELECT dateadd(year,datediff(year,'01/06/2000',@year)-1,'01/06/2000') [GT posting date]
,dateadd(year,datediff(year,'01/06/2000',@year),'01/06/2000') [LT posting date]

より大きいか等しい (GT) とより小さい (LT) ロジックで何をしようとしているのかわかりませんが、期待または望んでいることはうまくいかないと思います。[投稿日] を強制的に 2000 年 1 月 6 日より前の日付にしない限り、テストするたびに同じ結果が得られます。

明らかに、「TypeDateTimeInputHere」を、[posting date] にあることがわかっている、または予想されるサンプル値に置き換えます。

于 2012-10-30T14:07:53.353 に答える