2011-02-04 64 views
2

我在特定的Crystal報表中有兩種參數 - 我直接在SQL查詢中使用的兩個日期,以及一個將基於查詢中的銷售代表。動態參數不在字段外拉列表中的值

我在創建命令時定義了兩個日期(如果你願意的話),這些工作正常。但是,當添加動態參數以選擇'銷售代表'字段所需的值時,只會顯示一個文本框,這意味着參數列表尚未像廣告一樣動態生成。

我知道原因 - 查詢還沒有運行,所以沒有任何動態值拉。日期範圍也是一個必要的弊端,因爲如果日期範圍沒有設置是由於如此之多的舊記錄(需要堅持歷史記錄),報告需要五分鐘才能運行。

是否有可能動態生成此列表,或者我堅持不得不用靜態值更新列表?

謝謝。

回答

1

要使動態參數起作用,您必須將任何表格添加到包含「銷售代表」字段的報表中。您可以將表格拉到正在創建的SQL命令旁邊,然後只需將它們鏈接到外連接,以便不限制您的記錄(您甚至可以根本不鏈接它們,但Crystal會抱怨具有「多個起點」或其他

現在,您可以將銷售代表拖入動態參數中,並將其作爲參數用於SQL命令本身,也可以在記錄選擇公式中使用它來過濾在這兩種情況下,CR都會查詢數據庫兩次;第一次只是獲取整個列表的代碼,第二次是運行SQL命令。

這裏的主要問題是表,而不是命令,需要在報告中才能成爲人口的候選人e動態參數...即使您不會在報告中再次使用該表格。希望這會有所幫助,即使晚了7個月。

+0

呵呵,在我使用CR後的七個月裏,我學到了一些關於多表導入的知識 - 所以我用自己的設備糾正了這種情況。我很欣賞這一切。 – ryebr3ad

+0

根據Crystal Reports版本的不同,我已閱讀Crystal將僅編譯基於前200或1000行的列表。我遇到了拉昇銷售代表不全的問題,因爲Crystal在初始選擇後編譯了唯一列表。所以,我的解決方法是使用靜態列表。好處是報告標準列表更快地上傳,但列表必須保留。 – Sun

+0

我還沒有得到一個動態值列表。動態值填充當且僅當我使用報表參數。只要我包含命令參數,Crystal就不會顯示報告參數的值列表。 – Sun

1

終於想通了這一點:

  1. 使用SQL創建收集報表數據的存儲過程。此存儲過程不能有參數。它必須在執行時

實施例生成的所有的報告數據1:Exec MyReportStoredProcedure

  • 創建另一個存儲過程來收集你的參數列表中的值。在存儲過程中再次沒有使用參數。
  • 實施例2:Exec MyCrystalParameterList

  • 在Crystal Reports下數據庫 - >數據庫專家都存儲過程(稱爲表)添加到 「選定的表」 部分。點擊「確定」。然後Crystal將嘗試在兩個表格之間建立鏈接。點擊「刪除所有鏈接」。點擊後面的所有鏈接警告中的「確定」。
  • 現在使用MyReportStoredProcedure中的列生成報告
  • 運行您的報告。你將不會得到提示輸入參數。所有可能的數據將顯示在報告中。
  • *現在可以將參數鏈接到數據。 *

    • 一旦打開報告,Crystal報告將立即執行兩個存儲過程。
    • Crystal報表不會根據參數(如報表服務(SSRS))提取數據。
    • 在收集完所有數據後,Crystal會根據您選擇的參數值過濾數據。

    運行MyReportStoredProcedure返回如下:

    1 Stop XX 7A [columns5] [columns6] [columns7] [columns8] 
    1 Gone CC 88 [columns5] [columns6] [columns7] [columns8] 
    1 Gone CC 88 [columns5] [columns6] [columns7] [columns8] 
    2 Nice XX C3 [columns5] [columns6] [columns7] [columns8] 
    3 Loop EE C3 [columns5] [columns6] [columns7] [columns8] 
    3 Loop DD C3 [columns5] [columns6] [columns7] [columns8] 
    3 Loop DD C3 [columns5] [columns6] [columns7] [columns8] 
    ... 
    ... 700,000,000 Additional records 
    ... 
    

    運行MyCrystalParameterList返回如下:

    1 Stop XX 7A 
    1 Gone CC 88 
    2 Nice XX C3 
    3 Loop EE C3 
    3 Loop DD C3 
    >> A distinct list of values only 5 rows << 
    

    *關聯的參數數據列相應的報告列*

    現在將參數Column1鏈接到報告欄1。此鏈接將主要報告值(MyReportStoredProcedure)與參數值(MyCrystalParameterList)綁定。

    在數據庫下的Crystal Reports - >數據庫專家中單擊名爲Links的選項卡。

    在本節中,將表/列鏈接在一​​起。您可以在上面的步驟中完成此操作,但爲了更好地理解,我希望您在顯示兩個存儲過程(表)返回的數據之後執行此操作。

    *創建級聯參數*

    在Crystal Reports中找到字段資源管理器面板。通常它在屏幕的右側。

    • 現在右鍵單擊[參數字段],選擇[新建]
    • 名稱參數
    • 離開類型[字符串]
    • 集 「值列表」 設置爲[動態]
    • [新]
    • 在徑向按鈕下方的表格中,單擊「值」字樣下的第一行
    • 顯示兩個表格的下拉列表將顯示播放([MyReportStoredProcedure和MyCrystalParameterList])
    • 從MyCrystalParameterList存儲過程(表)中選擇第一個參數的列。
    • 您的列現在列在第一行。
    • 現在單擊下一行並從參數存儲過程(表)中選擇下一列。
    • 重複上述操作,直到您所需的所有參數都顯示在表格行中。
    • 在此表的右側,您會看到一個名爲「參數」的列,每列都有該列中的文本。
    • 單擊「參數」列中的每個字段,並在與您的參數存儲過程(表)列對應的Crystal報表中創建一個參數。
    • 單擊「確定」關閉「創建新參數」對話框。

    如果您運行報告,系統會提示您爲參數選擇值,參數將列出可用值。

    所有數據將在報告中返回!!!我們沒有完成。

    *最後一步(最後!)*

    告訴Crystal報表過濾基於參數值的報表數據。

    在Crystal Reports,請單擊報告 - >選擇專家 - >錄製

    • A「之所以選擇字段」對話框中會顯示

    • 字段面板查找該報告的存儲過程,並展開所以列正在顯示

    • 選擇鏈接到參數存儲過程(表)的列之一。

    • 您現在將看到一個默認值爲「是任意值」的公式對話框。

    • 改變這個值設置爲「等於」

    • 一個下拉框將顯示在右側。

    • 下拉框會顯示您的參數!!!!!!

    • 選擇與您選擇的報告字段對應的參數。

    • 重複您的所有參數。

    • 現在運行您的報告。數據現在由您的參數值歸檔!!

    • 你完成了!感謝上帝!

    注意: 您可以爲每個參數製作單個存儲過程。只需使用Database Expert將它們添加到報告中即可。

    在我的示例中,我製作了一個存儲過程,用於抽取所有可能的參數組合。

    不要調整您的註冊設置和使水晶報告閱讀超過1000條記錄!

    您的報告存儲過程可以返回10億條記錄,但您的參數列表不應超過1000個唯一值。

    您不能從報表存儲過程生成參數列表,因爲水晶報表只會查看前1000條記錄。

    您的參數列表必須是一個獨立的存儲過程,它可以提取不同的值。

    *你有基礎,現在建立其餘的。祝你好運。 *