3

データのテーブル/マトリックスを作成して、行と列のグループをメインのレポートデータとは別のクエリ/データセットから駆動する方法はありますか?

たとえば、次の列を持つ「Person」の構成を考えてみましょう。--name --gender --marital_status

マトリックスの列には常にすべての「性別」が含まれ、行にはクエリの基準に関係なく常にすべての「結婚状況」が含まれ、行と列の共通部分がレコードの総数になります。

たとえば、クエリは次のようになります。select * from person where name = 'aaron'

返されるすべてのレコードは「男性」ですが、「女性」の列を含めたいと思います(「女性」列のすべてのカウントは0になります)

出力は次のようになると思います。

Marital Status:  ~ Male ~ Female
Single ~ 5 ~ 0
Married ~ 8 ~ 0
Defacto ~ 2 ~ 0
...

たとえば、ダミーのクエリを実行する必要はありません。

select 'male' as gender, null as name, null as marital_status
union all 
select 'female' as gender, null as name, null as marital_status
union all
select * from person where [ ...  criteria]

可能であれば、3つのデータセットがマトリックスを駆動するのは問題ありません...

  • 「RowData」を含むselect distinct marital_status from person
  • select distinct gender from person、、およびを含む「ColumnData」
  • `select * from person where[...criteria]を含む"MainData "

行/列グループに個別のクエリを使用するようにMatrixコントロールを取得する方法はありますか?

4

1 に答える 1

4

なぜそんなに難しいのですか?簡単に考えてください...次のようにSQLでクエリを作成します。

WITH
Gender AS
(
    SELECT 1 AS GenderID, 'Male' AS GenderName
    UNION ALL
    SELECT 2 AS GenderID, 'Female' AS GenderName
),
MartialStatus AS
(
    SELECT 1 AS MartialStatusID, 'Single' AS MStatus
    UNION
    SELECT 2 AS MartialStatusID, 'Married' AS MStatus
),
Persons AS
(
    SELECT 1 AS PersonID, 'John' AS Name, 1 AS GenderID, 2 AS MartialStatusID
    UNION ALL
    SELECT 2 AS PersonID, 'Linda' AS Name, 2 AS GenderID, 1 AS MartialStatusID
    UNION ALL
    SELECT 3 AS PersonID, 'Mike' AS Name, 1 AS GenderID, 1 AS MartialStatusID
    UNION ALL
    SELECT 4 AS PersonID, 'Jenna' AS Name, 2 AS GenderID, 1 AS MartialStatusID  
)
SELECT Gender.GenderName, MartialStatus.MStatus, Persons.PersonID, Persons.Name
FROM Gender
CROSS JOIN MartialStatus
LEFT JOIN Persons ON Persons.GenderID = Gender.GenderID AND 
                     Persons.MartialStatusID = MartialStatus.MartialStatusID

結果を生み出すもの:

Male    Single   3      Mike
Female  Single   2      Linda
Female  Single   4      Jenna
Male    Married  1      John
Female  Married  NULL    NULL

次に、マトリックスマップの列と行のBIDSで: ここに画像の説明を入力してください

ここでの表現は=IIF(Sum(Fields!PersonID.Value) IS Nothing, 0, Sum(Fields!PersonID.Value))、人がいない場合に0を出力するためのものです。そして、あなたはあなたが望む結果を得る:

ここに画像の説明を入力してください

パフォーマンスが向上します。

于 2013-02-12T07:36:23.100 に答える