2017-10-16 177 views
0

我正在使用SSRS 2008r2。我需要添加一個列的總數百分比似乎很直接,但我一直在努力與此一個星期,並閱讀了無數帖子百分比問題,並沒有發現任何工作。計算總數(每行)給出的百分比#Error

基本上我的查詢是哪種方法可以做到這一點 - 在報表正文或SQL代碼中?然後任何人都可以幫助如何讓這些工作。

我迄今所做的:

Image of SSRS layout 在SSRS我添加了一個表達式到最終列由共行的值來劃分的每個類型的記錄數:!=字段WebCommsPrefContact 。 Value/ReportItems!WebCommsPrefContact1 我在「文本框屬性」中將表達單元格格式化爲百分比格式。但結果顯示一個錯誤。我已經閱讀了很多關於此的帖子,但他們似乎都指的是除以零,但總行不會包含零。 Results from ReportItems use

我當時想,也許我需要添加的比例爲一列到我的SQL代碼: 原始代碼:

SELECT DISTINCT cp.tsg_communicationpreferencetypeidname AS WebCommsPrefType, con.tsg_contactuid AS WebCommsPrefContact 
FROM   Filteredccx_communicationpreference AS cp INNER JOIN 
         FilteredContact AS con ON cp.ccx_contact = con.contactid INNER JOIN 
         FilteredAccount AS comp ON con.accountid = comp.accountid 
WHERE  (cp.ccx_informationsource = 803080004) AND (con.statecode = 0) AND (cp.createdon BETWEEN '2016/11/25' AND '2017/10/13') AND (NOT EXISTS 
          (SELECT  tsg_companyuid 
           FROM   FilteredAccount 
           WHERE  (comp.tsg_companyuid IN ('COMP00153968', 'COMP00091748', 'COMP00177586', 'COMP00231427', 'COMP00077428', 'COMP00077490', 'COMP00255796')))) AND 
         (cp.tsg_communicationpreferencecategoryidname LIKE 'Category 4%') AND (cp.ccx_status = 803080000) 
ORDER BY WebCommsPrefType 

我試圖通過添加新的子查詢到添加一個新列選擇行但導致全零:(在這個提取中,我仍然試圖獲得總行數,所以還沒有添加到分部來獲得百分比結果) - 語法顯然不正確

SELECT DISTINCT cp.tsg_communicationpreferencetypeidname AS WebCommsPrefType, con.tsg_contactuid AS WebCommsPrefContact, 
count(select Filteredccx_communicationpreference.tsg_communicationpreferencetypeidname AS WebCommsPrefType, FilteredContact.tsg_contactuid AS WebCommsPrefContact 
         FROM   Filteredccx_communicationpreference INNER JOIN 
               FilteredContact ON Filteredccx_communicationpreference.ccx_contact = FilteredContact.contactid INNER JOIN 
               FilteredAccount ON FilteredContact.accountid = FilteredAccount.accountid 
         WHERE  ( Filteredccx_communicationpreference.ccx_informationsource = 803080004) AND (FilteredContact.statecode = 0) AND (Filteredccx_communicationpreference.createdon BETWEEN '2016/11/25' AND '2017/10/13') AND (NOT EXISTS 
                (SELECT  tsg_companyuid 
                 FROM   FilteredAccount 
                 WHERE  (FilteredAccount.tsg_companyuid IN ('COMP00153968', 'COMP00091748', 'COMP00177586', 'COMP00231427', 'COMP00077428', 'COMP00077490', 'COMP00255796')))) AND 
               ( Filteredccx_communicationpreference.tsg_communicationpreferencecategoryidname LIKE 'Category 4%') AND (Filteredccx_communicationpreference.ccx_status = 803080000)) as RecordCount 


From 
        Filteredccx_communicationpreference AS cp INNER JOIN 
         FilteredContact AS con ON cp.ccx_contact = con.contactid INNER JOIN 
         FilteredAccount AS comp ON con.accountid = comp.accountid 
WHERE  (cp.ccx_informationsource = 803080004) AND (con.statecode = 0) AND (cp.createdon BETWEEN '2016/11/25' AND '2017/10/13') AND (NOT EXISTS 
          (SELECT  tsg_companyuid 
          FROM   FilteredAccount 
          WHERE  (comp.tsg_companyuid IN ('COMP00153968', 'COMP00091748', 'COMP00177586', 'COMP00231427', 'COMP00077428', 'COMP00077490', 'COMP00255796')))) AND 
         (cp.tsg_communicationpreferencecategoryidname LIKE 'Category 4%') AND (cp.ccx_status = 803080000) 

然後我想,也許我需要添加一個內部聯接到一個表,導致總行數。

SELECT DISTINCT cp.tsg_communicationpreferencetypeidname AS WebCommsPrefType, count(con.tsg_contactuid) AS WebCommsPrefContact, count(con.tsg_contactuid)/count(X.PContact) as percentage 
FROM   Filteredccx_communicationpreference AS cp INNER JOIN 
         FilteredContact AS con ON cp.ccx_contact = con.contactid INNER JOIN 
         FilteredAccount AS comp ON con.accountid = comp.accountid Inner join 
         (select Distinct Filteredccx_communicationpreference.tsg_communicationpreferencetypeidname AS WebCommsPrefType, FilteredContact.tsg_contactuid as PContact 
         FROM   Filteredccx_communicationpreference INNER JOIN 
         FilteredContact ON Filteredccx_communicationpreference.ccx_contact = FilteredContact .contactid INNER JOIN 
         FilteredAccount ON FilteredContact.accountid = FilteredAccount.accountid 
          WHERE  (Filteredccx_communicationpreference.ccx_informationsource = 803080004) AND (FilteredContact.statecode = 0) AND (Filteredccx_communicationpreference.createdon BETWEEN '2016/11/25' AND '2017/10/16') AND (NOT EXISTS 
          (SELECT  tsg_companyuid 
           FROM   FilteredAccount 
           WHERE  (FilteredAccount.tsg_companyuid IN ('COMP00153968', 'COMP00091748', 'COMP00177586', 'COMP00231427', 'COMP00077428', 'COMP00077490', 'COMP00255796')))) AND 
         (Filteredccx_communicationpreference.tsg_communicationpreferencecategoryidname LIKE 'Category 4%') AND (Filteredccx_communicationpreference.ccx_status = 803080000)) as X ON cp.ccx_contact=X.PContact 

WHERE  (cp.ccx_informationsource = 803080004) AND (con.statecode = 0) AND (cp.createdon BETWEEN '2016/11/25' AND '2017/10/16') AND (NOT EXISTS 
          (SELECT  tsg_companyuid 
           FROM   FilteredAccount 
           WHERE  (comp.tsg_companyuid IN ('COMP00153968', 'COMP00091748', 'COMP00177586', 'COMP00231427', 'COMP00077428', 'COMP00077490', 'COMP00255796')))) AND 
         (cp.tsg_communicationpreferencecategoryidname LIKE 'Category 4%') AND (cp.ccx_status = 803080000) 
         Group By cp.tsg_communicationpreferencetypeidname 
ORDER BY WebCommsPrefType 

但是,這隻會返回沒有結果的標題。我認爲這可能是主表與子查詢表之間的鏈接,但我很努力地看到如何使計數與外部查詢完全相同,而不需要具有完全相同的代碼,因爲每個聯繫人都可以有多個類型。

回答

1

今天早上又看了一遍我的問題,當時我並不那麼累,答案也很簡單。我缺少表達式的.value部分,並且不需要沿着嘗試在我的SQL代碼中找到完美答案的路線走下去。簡易的答案是做的百分比計算中使用表達式在SSRS的報告正文:

=Fields!WebCommsPrefContact.Value/ReportItems!WebCommsPrefContact1.Value 

,然後格式化文本框的百分比。