2016-04-13 5 views
0

Ich versuche, eine Matrix in Reporting Services/SSRS zu erstellen, ähnlich einer Tabelle, die oft für Wettbewerbe erstellt wird.Farbzelle, wenn Zeile und Spalte identisch sind

Meine Tabelle sieht ein bisschen so:

Home Points Away 
NL 3  DE 
DE 2  FR 
FR 5  NL 
NL 3  DE 
DE 4  FR 
FR 6  NL 

ich meine Matrix wollen so aussehen:

  Away 
     NL DE FR 
    NL X 6 0 
Home DE 0 X 6 
    FR 11 0 X 

Wo jeder Wert der Summe der einzelnen Zahlen für die gegebene Kombination ist

NL -> DE = 3 + 3,

DE -> FR = 2 + 4,

FR -> NL = 5 + 6

Wie bekomme ich die X-es, wo die Spalten und die Zeilen gleich sind? (Und durch die Erweiterung, möchte ich diese Zellen eine alternative Farbe haben)

Antwort

1

Dataset

declare @tb as table (Home Varchar(5), Away Varchar(5), Points Varchar(5)) 

insert into @tb 
select 'NL','NL','X' union 
select 'NL','DE','3' union 
select 'NL','FR','5' union 
select 'DE','DE','X' union 
select 'FR','FR','X' union 
select 'DE','FR','2' 

select * from @tb 

SSRS Tisch Design & Gruppierung

enter image description here

  • Row Gruppe von Home
  • Spalte Gruppe von Auswärts
  • Expression: =IIF(String.IsNullOrEmpty(Fields!Points.Value),"0",Fields!Points.Value)
  • Rechts den Ausdruck Textbox klicken -> Eigenschaften -> Hintergrundfarbe -> Enter Expression: =IIF(Fields!Points.Value="X","Red",0)

Ergebnis

enter image description here

+0

Dies würde in einigen Fällen funktionieren, aber in meinem Fall kann ich nicht einfach ein X in die Spalte eingeben, da es eine Zahl ist. Auch sollte der Ausdruck in den Zellen eine Summe sein. Zum Beispiel, wenn Sie 2 Datensätze NL 3 DE haben, wenn es als 6 in der Matrix angezeigt werden soll. – user1261104

+0

dann sollten Sie einige Beispieldaten bereitstellen, die Summe kann durch Gruppieren –

+0

Ich bearbeitete die Frage leicht gemacht. – user1261104

0

Ich glaube nicht, dass Sie mit der SSRS-Matrix tun können, wonach Sie suchen (oder zumindest nicht). Ich habe am Ende eine Pivot-Tabelle erstellt.

DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX), @PrettyColumns NVARCHAR(MAX); 
SET @columns = N''; 
SET @PrettyColumns = N''; 


SELECT @columns += N', p.' + QUOTENAME(Home) 
    FROM (SELECT p.Home FROM dbo.Table_1 AS p 
    GROUP BY p.Home, p.Away) AS x; 

SELECT @PrettyColumns += N', CASE WHEN (p.Home = ''' + Home+''') THEN ''X'' ELSE convert(varchar(max), p.' + QUOTENAME(Home) + ') END as ' + Home 
    FROM (SELECT p.Home FROM dbo.Table_1 AS p 
    GROUP BY p.Home, p.Away) AS x; 


SET @sql = N' 
SELECT p.Home, ' + STUFF(@PrettyColumns, 1, 2, '') + ' 
FROM 
(
    SELECT p.Home, p.Points, p.Away 
    FROM dbo.Table_1 AS p 
) AS j 
PIVOT 
(
    SUM(Points) FOR Away IN (' 
    + STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, '') 
    + ') 
) AS p;'; 
PRINT @sql; 
EXEC sp_executesql @sql;