2

Visual Studio 2008 で SQL ベースのレポートを作成し、CRM にアップロードしました。「関連レコードタイプのフォーム」でのみ実行できることを示しました。これにより、現在のレコードのレポートが 1 つ生成されると思いました。

そうではありません。特定のエンティティ (注文) のレコードごとにレポートを生成し、レポートのページごとに 1 つのレコードを生成します。

Data-Prefiltering (自動または特定の?) を使用する必要があることはわかっていますが、オンラインで良い例はなく、stackoverflow にはスレッドもありますが、私はそれを理解できません。

スレッドへのリンク: CRM 2011 での CRMAF フィルタリング

SELECT FilteredSalesOrder.customerid AS x1, FilteredAccount.accountid AS x2, FilteredSalesOrderDetail.salesorderid AS x3, FilteredSystemUser.systemuserid AS x4,
FilteredProduct.productid AS x5, FilteredAccount.address1_city, FilteredAccount.address1_line1, FilteredAccount.address1_postalcode, FilteredAccount.name AS AccountName, 
FilteredSalesOrder.ordernumber, FilteredSalesOrderDetail.quantity, FilteredSystemUser.fullname, FilteredProduct.fmcg_erpreference, FilteredProduct.name AS ProductName
FROM FilteredSalesOrder INNER JOIN FilteredAccount 
ON FilteredSalesOrder.customerid = FilteredAccount.accountid INNER JOIN FilteredSalesOrderDetail 
ON FilteredSalesOrderDetail.salesorderid = FilteredSalesOrder.salesorderid INNER JOIN FilteredProduct 
ON FilteredProduct.productid = FilteredSalesOrderDetail.productid INNER JOIN FilteredSystemUser 
ON FilteredSystemUser.systemuserid = FilteredSalesOrder.ownerid

現在の注文のみを使用するようにデータを事前にフィルター処理するには:

  • SalesOrder テーブルのみでCRMAF_ を使用するだけで十分ですか?

FROM FilteredSalesOrder AS CRMAF_FilteredSalesOrder INNER JOIN FilteredAccount

  • すべてのテーブルで CRMAF_ を使用しますか?

編集:

これは、FilteredSalesOrder で CRMAF_ を使用した新しい SQL 全体です。しかし、残念ながらそれはうまくいきません。それでも、すべてのレコードに対して実行する機会しか与えられないため、存在するすべての Salesorders が生成されます (幸いなことに、それほど多くはありません)。

SELECT CRMAF_FilteredSalesOrder.customerid AS x1, CustomerAccount.accountid AS x2, 
FilteredSalesOrderDetail.salesorderid AS x3, FilteredSystemUser.systemuserid AS x4,
FilteredProduct.productid AS x5,CRMAF_FilteredSalesOrder.fmcg_supplierid as x6,
CustomerAccount.address1_city as customerCity, CustomerAccount.address1_line1 as 
customerStreet1, CustomerAccount.address1_postalcode as customerPostalCode,
CustomerAccount.name AS CustomerAccountName, CRMAF_FilteredSalesOrder.ordernumber,
FilteredSalesOrderDetail.quantity, FilteredSystemUser.fullname, 
FilteredProduct.fmcg_erpreference, FilteredProduct.name AS ProductName, 
SupplierAccount.name as supplierAccountName, SupplierAccount.address1_city AS 
supplierCity,SupplierAccount.address1_line1 as supplierStreet1, 
SupplierAccount.address1_postalcode as supplierPostalCode, 
CRMAF_FilteredSalesOrder.requestdeliveryby, CRMAF_FilteredSalesOrder.createdon 

FROM FilteredSalesOrder AS CRMAF_FilteredSalesOrder INNER JOIN FilteredAccount AS CustomerAccount
ON CRMAF_FilteredSalesOrder.customerid = CustomerAccount.accountid INNER JOIN FilteredSalesOrderDetail 
ON FilteredSalesOrderDetail.salesorderid = CRMAF_FilteredSalesOrder.salesorderid INNER JOIN FilteredProduct 
ON FilteredProduct.productid = FilteredSalesOrderDetail.productid INNER JOIN FilteredSystemUser 
ON FilteredSystemUser.systemuserid = CRMAF_FilteredSalesOrder.ownerid INNER JOIN FilteredAccount AS SupplierAccount
ON CRMAF_FilteredSalesOrder.fmcg_supplierid = SupplierAccount.accountid

解決策: レポートを削除し、再デプロイしました。

4

1 に答える 1

5

MSDNの「サンプル: レポートを状況依存にする」を参照してください。

現在のSalesOrderのみをフィルタリングする必要があります。

CRM 2011 での自動事前フィルタリングに関するドキュメントはまばらですが、CRM 2011 と CRM 4 の間であまり変わっていないと思います。そのため、CRM 4 での SSRS レポートに関する MSDNのレポートでフィルターを使用するを参照してください。

レポートでよく使用するCRM_FilteredSalesOrderのは、次のような SQL クエリと組み合わせたようなパラメーターです。

EXEC('
    SELECT FSO.*
    FROM (' + @CRM_FilteredSalesOrder + ') AS FSO
')

これは自動プレフィルター処理と同じ原理ですが、プレフィルターが挿入される場所を制御できるようになりました。また、自動プレフィルターは、SSRS レポートの 1 つのクエリで複数回使用できないことにも注意してください。

編集:わかりました、文字通りあなたの例を使用させてください:

EXEC('
  SELECT
    FSO.customerid AS x1,
    FilteredAccount.accountid AS x2,
    FilteredSalesOrderDetail.salesorderid AS x3,
    FilteredSystemUser.systemuserid AS x4,
    FilteredProduct.productid AS x5,
    FilteredAccount.address1_city,
    FilteredAccount.address1_line1,
    FilteredAccount.address1_postalcode,
    FilteredAccount.name AS AccountName, 
    FSO.ordernumber,
    FilteredSalesOrderDetail.quantity,
    FilteredSystemUser.fullname,
    FilteredProduct.fmcg_erpreference,
    FilteredProduct.name AS ProductName
  FROM (' + @CRM_FilteredSalesOrder + ') AS FSO
  INNER JOIN FilteredAccount ON FSO.customerid = FilteredAccount.accountid
  INNER JOIN FilteredSalesOrderDetail ON FilteredSalesOrderDetail.salesorderid = FSO.salesorderid
  INNER JOIN FilteredProduct ON FilteredProduct.productid = FilteredSalesOrderDetail.productid
  INNER JOIN FilteredSystemUser ON FilteredSystemUser.systemuserid = FSO.ownerid
')

CRM が何を挿入するかを理解したい場合は、CRM_FilteredSalesOrderパラメーターをレポートのテキスト ボックスに入力します。SELECT f0.* FROM FilteredSalesOrder AS f0 WHERE f0.salesorderid = '3641478b-5022-40fa-90c1-a4d407e8b99b'「関連するレコードの種類のフォーム」にある場合は、フォーム内のクエリになります。これは事実上、この特定の Order のサブクエリです。これが「事前フィルタリング」と呼ばれるもので、サブクエリをクエリするだけです。

于 2012-09-26T16:27:55.957 に答える