2009-02-18 60 views
1

我是新來的報告svcs,我正在編寫一個基於在VS.NET 2008中創建的報告模型(.smdl)的報告。我似乎錯過了報告生成器查詢視圖的類似於「左連接「。模型很簡單:如何建模SQL Server Reporting Services中的「左連接」?

三個實體: 卡斯特(客戶ID,CUSTNAME) 奧德(ordid,客戶ID,orddate,...) 費(chargeid,ordid,chargetype,chargevalue ...)

將「收費」看作與訂單相關的可選成本(特殊收費) - 有些訂單有他們,有些則沒有。

模型是從視圖(.dsv)自動生成的,它準確地指示了cust和ord之間以及ord和charge之間的關係。我注意到,在設計視圖關係時,沒有一種選擇來表示(例如)該關係應該被視爲「左連接」。

現在我跳轉到報表製作器2(RB2),根據此模型設計報表。我的目標是簡單地列出每個訂單:客戶名稱,訂單日期,收費類型,收費價值(即,如果訂單行具有多於一種收費類型,則會重複訂單行)。我希望列出所有訂單,即使訂單沒有任何費用 - 我認爲傳統意義上的「左連接」。

我使用RB2的查詢設計器來創建數據集,並且只需選擇(即雙擊)我想要的實體作爲報告中的字段:custname,orddate,chargetype,chargeval。然後,我根據這個數據集在報告中創建一個簡單的表格。

運行報表時,我只收到那些實際上有費用的訂單。我只是希望能得到所有的訂單。有沒有我可以指定的方法?

謝謝你,比爾 道森

回答

3

我通過SQL Server論壇回答:

http://social.msdn.microsoft.com/Forums/en-US/sqlreportingservices/thread/20d4b4fd-dc0b-428e-a5b8-aedf5c53d340

相關部分在這裏從亞倫邁爾斯:

這裏的關鍵是,所有的報表模型的查詢是圍繞「基地中心實體「,並且報表中詳細級別的每一行表示此基本實體中的一行。您可能會注意到,在您的模型中,沒有相應的實體對應於「訂單收費或沒有收費的訂單」。您需要基於DSV中的命名查詢在模型中顯式創建此訂單費用實體。該命名查詢可以從Ord表和Charge表中選擇兩個鍵之間的LEFT OUTER JOIN鍵。然後,您可以創建從這些鍵到Ord和Charge表的關係,並更新模型(右鍵單擊模型根節點和自動生成)。

當您從Ord的詳細信息開始並瀏覽新角色以收費並選擇其他詳細信息時,報表生成器將選擇Order-Charge實體作爲報表的根/基本實體。

我們正在考慮未來版本的功能,以允許直接在報表生成器中創建這些類型的查詢,而無需模型設計器顯式創建LEFT OUTER JOIN實體。

0

我相信左側加入恰巧根據您添加字段拖到查詢設計畫布的順序。只要您添加客戶字段,然後訂購字段,然後收取字段,您應該是正確的。

您可以驗證使用SQL配置文件運行的實際查詢,這對於調試這些類型非常方便。

0

我們可以通過使用實體角色的基數屬性,在兩個實體之間的報告模型中實現LEFT JOIN。

例如,假設我們有兩個實體Customer和Order。

客戶 - >在線訂單的角色應該有一個選項(來源) - >可選許多(目標){因爲1個客戶可以有0或多個訂單}

訂單 - >客戶角色應該有很多可選(來源) - >可選一個(目標){反之亦然}

相關問題