2012-02-13 17 views
0

私はこのレポートを初めて知っているので、この質問は狂気かもしれません。私は、私たちのシステムのすべてのクライアントに対して1つずつ作成するのではなく、空の「テンプレート」レポート(基本的にフォームレター)を作成する方法を探しています。このフォームレターの一部は、25の特定のフィールドの任意の数を持つセクションです。セクションでは、このようなとして配置されていますReporting Servicesと動的フィールド

Name:   Jesse James 
Date of Birth: 1/1/1800 
Address:  123 Blah Blah Street 
       Anywhere, USA 12345 
Another Field: Data 
Another Field2: More Data 

もの(とクライアントが指定する他のフィールドのいずれかの)任意の順序で配置することができ、左側のラベルは、クライアントが(たとえば決めるものは何でもすることができます:「DOB」を「生年月日」の代わりに)。理想的には、必要なフィールドをクリックして表示される順序を指定し、カスタムラベルが何であるかを指定できるWebインターフェイスを用意したいと考えています。私は、ラベルを指定して順番に並べ替える方法を考え出しましたが、ダイナミックなフィールド(右側)の選択と並べ替えを可能にすることができれば、さらに一歩進めたいと思っていました。キャッチは、私は動的SQLを使用せずにこれをやりたいです。私は序数、カスタムラベルのテキスト、実際の列名を含む構成テーブルを持っていて、実際にinformation_schema.columnsを介してデータを含むテーブルとそのテーブルを結合しようとしました。たぶん、すべての潜在的なフィールドを照会し、INNER JOINにフィルタリングを行います( 'configuration'テーブルなどからの一致がある場合)。それは私が思ったように動作しません:)私はデータセットの機能をシミュレートできると思っていたと思います(値とフィールド名がオブジェクトに焼き付けられています)。私はこれがこのような偉業を試みる最適なツールではないことを認識しています。

設定テーブルは、多くの顧客/レポートの設定を保持するため、私は顧客IDでフィルタリングします。設定テーブルは次のように気にいらになります:

お客様ID LabelText ColumnNameに序 1姓ます。FName 1 1姓LNAME 2 出生DOBirthの1日3 2クライアントIDのClientID 1 2姓LNAME 2 2アドレス1アドレス1 3 2住所2アドレス2 4

言ってすべてのこと:

  1. を上記のクエリをやってのけるする方法はありますか?
  2. 問題のセクションが1行だけ戻ってくるので、動的SQLを使用しないのはあまりにも気になりませんか?ただし、このレポート(レター)を1日に2〜3回実行する何百ものクライアントがいます。

また、レポートにテキストボックスを動的に作成しようとしていないことに注意してください。私はフィールドを単一の文字列に連結し、それをテキストボックスにダンプするか、ジェネリックフィールド名( "field1"など)を想定したテキストボックスの数を設定した複数のレポートを作成します。もっとタイプすると、この音が響きます。 これを行う方法がない場合、私はカスタムコードで何かを突き詰めるでしょう。私のOCD側は、これをもっと巧妙に行うことができる現在の権限を超えてSQLがあると信じたいと思っています。

答えて

0

これをすべて1行で返す必要があるのか​​どうかわかりません。SSRSではこれをさらに正規化したいと思われます。現在のレポートの構成表の各行に1行を戻します。連結して、レポートの埋め込みコードで実際に行う必要がある場合、またはフォームレターにテーブルを置くことを検討してください。以下のクエリでは、構成テーブルについていくつかの前提があります。それは現在のレポートの設定を保持するだけですか、それとも一度に多くの顧客/レポートの設定を保持していますか?また、適切なレコードにフィルタリングする方法について多くの情報を提供していないので、私はちょうど顧客IDを使用しました。

SELECT 
    config.ordinal, 
    config.LabelText, 
    CASE config.ColumnName 
     WHEN 'FName' THEN DataRecord.FirstName 
     WHEN 'LName' THEN DataRecord.LastName 
     WHEN 'ClientID' THEN DataRecord.ClientID 
     WHEN 'DOBirth' THEN DataRecord.DOB 
     WHEN 'Address' THEN DataRecord.Address 
     WHEN 'Field' THEN DataRecord.Field 
     WHEN 'Field2' THEN DataRecord.Field2 
     ELSE 
     NULL 
     END AS response 
FROM 
    ConfigurationTable AS config 
LEFT OUTER JOIN 
    DataTable AS DataRecord 
ON config.CustID = DataRecord.CustomerID 
WHERE DataRecord.CustomerID = @CustID 
ORDER BY 
    config.Ordinal 

SSRSまたはSQLでこれを行うには、他にも要件があります。

+0

返信いただきありがとうございます。はい、構成テーブルが実際に多くの顧客/レポートの構成を保持していて、顧客IDでフィルタリングしていました。 お客様ID LabelText ColumnNameに序 1姓ます。FName 1 1姓LNAME 2 出生DOBirthの1日3 2クライアントIDのClientID 1 2姓LNAME 2つの 2住所1:設定表には、このように気にいらに見えるでしょうアドレス1 3 2アドレス2アドレス2 4 – DerPflug

+0

私はこれらの詳細を考慮して私の答えを少し編集しました。 (BTW、スタックオーバーフロー時に、元の質問を編集して、必要に応じて詳細を追加することをお勧めします) –

+0

答えは私のニーズに完全に合っています。ご協力いただきありがとうございます。 – DerPflug

関連する問題