私はSSRS 2008r2を使用しています。しかし、私は一週間の間これに苦労しており、パーセンテージの問題について数多くの記事を読んでいて、何も見いだされていません。#エラーを与える(行ごとの)パーセンテージの計算
基本的に私のクエリは、これを行う最もよい方法です - レポート本体またはSQLコードでですか?誰もがそれを働かせる方法を手伝うことができます。私がこれまで行ってきた何
:! =フィールドWebCommsPrefContact:SSRSで
を私は合計行の値によってタイプごとのレコードの数を分割するために、エンド列に式を追加しました。値/ ReportItems!WebCommsPrefContact1 と私は 'テキストボックスのプロパティ'でパーセント形式に式セルをフォーマットしました。ただし、結果にはエラーが表示されます。私はこれについて多くの記事を読んだが、それらはすべて0で割ることを意味するように見えるが、合計の行にはゼロは含まれない。
私は多分、私は私の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
しかし、これは結果のないヘッダーのみを返します。私はこれがメインテーブルとサブクエリテーブルの間のリンクかもしれないと思うが、私は、各コンタクトが複数のタイプを持つことができるのとまったく同じコードを持たずに、カウントを外部クエリと正確に同じにする方法を見て苦労している。