2016-04-28 5 views
3

Ich habe einen SSRS-Bericht, der den Gesamtumsatz nach Geschäftsjahr, Geschäftsquartal und Geschäftsart gruppiert. Ich muss eine letzte Spalte hinzufügen, die die Anzahl der Zeilen zählt, aus denen die Gesamtumsatzzahl besteht, wobei jede Zeile ein einzelnes Geschäft darstellt.So führen Sie eine Zeilenzählung mit einem bestimmten Satz von Daten in SSRS durch

Grundsätzlich muss ich wissen, wie viele einzelne Unternehmen in einem bestimmten Geschäftstyp zu der Summe für diesen Zeitrahmen beigetragen haben. Ich werde im Folgenden ausführlich erklären.

Zuerst ist hier die gespeicherte Prozedur, die den Bericht Daten-Feeds:

SELECT 
id 
,assess_year 
,CASE 
    WHEN MONTH(date_received) IN (7,8,9) THEN 1 
    WHEN MONTH(date_received) IN (10, 11, 12) THEN 2 
    WHEN MONTH(date_received) IN (1, 2, 3) THEN 3 
    WHEN MONTH(date_received) IN (4, 5, 6) THEN 3 
    WHEN date_received is null THEN 0 
    ELSE 0 
END as Fiscal_Quarter 
,s_gross_revenue 
,CASE 
    WHEN LEFT(segment, 1) = 'A' THEN 'Accommodations' 
    WHEN segment BETWEEN 'B100' AND 'B699' THEN 'Restaurant' 
    WHEN segment BETWEEN 'B700' AND 'B999' THEN 'Retail' 
    WHEN LEFT(segment, 1) = 'C' THEN 'Attractions/Recreation' 
    WHEN LEFT(segment, 1) = 'D' THEN 'Travel Services' 
    WHEN LEFT(segment, 1) = 'E' THEN 'Rental Cars' 
    WHEN LEFT(segment, 1) = 'N' THEN 'Other' 
    ELSE 'UNDEFINED' 
END as Segement 
FROM mytable 
WHERE s_gross_revenue >0 AND assess_year IS NOT NULL 
    AND assess_year <> '' AND segment IS NOT NULL AND segment <>'' 
ORDER BY ASSESS_YEAR, FISCAL_QUARTER, SEGEMENT 

ich ein Bild angehängt (Raw Data Image) ein Beispiel der Rohdaten durch das Verfahren zurückgeführt zu zeigen.

Ich mache alle Gruppierung nach Jahr, Quartal und Geschäftstyp im SSRS-Bericht.

Ich brauche nur eine Formel oder Gruppierung, um alle Zeilen für jedes Unternehmen zu zählen, die den Gesamtumsatz ausmachen.

Ich fügte auch ein Bild des Berichts (SSRS Report Image) mit der leeren Spalte am Ende, wo die Zeilenanzahl gehen sollte.

So in der SSRS-Bericht Bild der Business-Typ "Unterkünfte" für das Geschäftsjahr 2014/15 und Quartal 1 sollte eine Zeile zählen 4455 in der letzten Spalte, weil es 4455 einzelne Unternehmen, die als Unterkünfte aufgeführt waren hatte Umsatz im ersten Quartal 2014/15. Ich weiß einfach nicht, wie man eine Reihe zählt, die auf spezifischen Kriterien in SSRS basiert.

(Auch ich weiß, dass die Viertel seltsam aussehen in der SQL, ist unser Geschäftsjahr beginnt im Juli)

+0

Ist das 'MONTH (date_received) IN (4,5,6)' - Bit 3 oder 4? – Kidiskidvogingogin

+0

Es soll eine 4 zurückgeben. Ich habe es gesehen und korrigiert, aber erst nachdem ich den alten Code gepostet habe. Danke, guter Fang. – ekim110575

+0

Welche Version von SQL Server verwenden Sie? – Kidiskidvogingogin

Antwort

1

Wenn ich Ihre Frage richtig verstanden habe, und wenn Sie SQL Server verwenden 2008+ dann können Sie Sie die OVER(...) Klausel, um eine COUNT(...) zu tun, während Sie Ihre Detaildaten behalten.

Für das Geschäft zählen, es würde wie folgt aussehen:

COUNT(*) OVER (PARTITION BY assess_year, Fiscal_quarter, Segement) 

Hier ist die vollständig modifizierte Abfrage ist, aber der obige Teil ist wirklich die einzige Änderung:

SELECT 
    id 
    ,assess_year 
    ,Fiscal_Quarter 
    ,s_gross_revenue 
    ,Segement 
    ,COUNT(*) OVER (PARTITION BY assess_year, Fiscal_quarter, Segement) BusinessCount 
FROM (
     SELECT 
      id 
      ,assess_year 
      ,CASE 
       WHEN MONTH(date_received) IN (7,8,9) THEN 1 
       WHEN MONTH(date_received) IN (10, 11, 12) THEN 2 
       WHEN MONTH(date_received) IN (1, 2, 3) THEN 3 
       WHEN MONTH(date_received) IN (4, 5, 6) THEN 4 
       WHEN date_received is null THEN 0 
       ELSE 0 
      END as Fiscal_Quarter 
      ,s_gross_revenue 
      ,CASE 
       WHEN LEFT(segment, 1) = 'A' THEN 'Accommodations' 
       WHEN segment BETWEEN 'B100' AND 'B699' THEN 'Restaurant' 
       WHEN segment BETWEEN 'B700' AND 'B999' THEN 'Retail' 
       WHEN LEFT(segment, 1) = 'C' THEN 'Attractions/Recreation' 
       WHEN LEFT(segment, 1) = 'D' THEN 'Travel Services' 
       WHEN LEFT(segment, 1) = 'E' THEN 'Rental Cars' 
       WHEN LEFT(segment, 1) = 'N' THEN 'Other' 
       ELSE 'UNDEFINED' 
      END as Segement 
     FROM mytable 
     WHERE s_gross_revenue > 0 
      AND ISNULL(assess_year,'') <> '' 
      AND ISNULL(segement,'') <> '' 
    ) data 
ORDER BY ASSESS_YEAR, FISCAL_QUARTER, SEGEMENT 

Ich habe auch eine leichte syntaktischen ändern Sie Ihre Where-Klausel, es ist die gleiche Logik, aber eine Art Kurzschreibweise, es zu tun. Anstatt zu überprüfen, ob SEGEMENT und ASSESS_YEARNOT NULL AND NOT '' in separaten Erklärungen sind, können Sie sie kombinieren in ein ISNULL(...,'') <> '' wenn SEGEMENT und ASSESS_YEAR sind Textart Werte, sonst werden Sie COALESCE(...) verwenden, um das gleiche zu erreichen. ISNULL(...) kann durch COALESCE(...) ersetzt werden, falls bevorzugt.

Dies ist auch vollständig möglich, indem Sie einfach count(<field name>) in der ID-Spalte auf Ihrem SSRS-Bericht verwenden. Es sollte Ihnen die gleichen Ergebnisse geben.

+0

Ausgezeichnet. Genau das, was ich gesucht habe. Ich schätze die Hilfe. – ekim110575

+0

@ ekim110575 Glücklich zu helfen, wo ich kann. – Kidiskidvogingogin

Verwandte Themen