2017-10-16 8 views
0

私はSSRS 2008r2を使用しています。しかし、私は一週間の間これに苦労しており、パーセンテージの問題について数多くの記事を読んでいて、何も見いだされていません。#エラーを与える(行ごとの)パーセンテージの計算

基本的に私のクエリは、これを行う最もよい方法です - レポート本体またはSQLコードでですか?誰もがそれを働かせる方法を手伝うことができます。私がこれまで行ってきた何

:! =フィールドWebCommsPrefContact:SSRSで

Image of SSRS layout を私は合計行の値によってタイプごとのレコードの数を分割するために、エンド列に式を追加しました。値/ ReportItems!WebCommsPrefContact1 と私は 'テキストボックスのプロパティ'でパーセント形式に式セルをフォーマットしました。ただし、結果にはエラーが表示されます。私はこれについて多くの記事を読んだが、それらはすべて0で割ることを意味するように見えるが、合計の行にはゼロは含まれない。 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コード内で完璧な答えを見つけようとするルートを下げる必要はありませんでした。割合にテキストボックスをフォーマットし、その後

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

と:シンプルで簡単な答えは、式を使用してSSRSのレポートの本文に割合の計算を行うことです。

関連する問題