SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO
CREATE VIEW [kalender].[Kalender_Matrix] AS

WITH
    [Kalender_Heute]
        AS (SELECT [T1].*
                 , [T2].[Invoice Date] AS [Heute]
            FROM [kalender].[Kalender_Tage] [T1]
                     CROSS JOIN [kalender].[Aktueller_Tag] [T2])

  , [Kalender_Heute_Vorjahr_Vormonat]
        AS (SELECT [Datum]
                 , [Tag_im_Jahr]
                 , [Wochentag]
                 , [Wochentag_int]
                 , [Periode]
                 , [Kalenderwoche]
                 , [Quartal_int]
                 , [Datum_str]
                 , [Datum_int]
                 , [MoFr]
                 , [MoSa]
                 , [Jahr]
                 , [Quartal]
                 , [Monat]
                 , [Tag]
                 , [Heute]
                 , dateadd(YY, -1, [Heute]) AS [Heute_Vorjahr]
                 , dateadd(MM, -1, [Heute]) AS [Heute_Vormonat]
            FROM [Kalender_Heute])

  , [Zeit_Dimension_Berechnung]
        AS (SELECT [T1].*
                 , iif([Datum] = [Heute], 1, 0) AS "Aktueller Tag"
                 , iif([Datum] = dateadd(DD, -1, [Heute]), 1, 0) AS "Gestern"
                 , iif([Datum] <= [Heute] AND [Datum] >= [kalender].[bomonth]([Heute]), 1, 0) AS "M bisher"
                 , iif([Datum] <= [Heute_Vorjahr] AND [Datum] >= [kalender].[bomonth]([Heute_Vorjahr]), 1, 0) AS "M bisher Vorjahr"
                 -- "M bisher / M bisher VJ",
                 , iif([Datum] <= [Heute_Vormonat] AND [Datum] >= [kalender].[bomonth]([Heute_Vormonat]), 1, 0) AS "Voriger M bisher"
                 -- "M bisher gruppiert",
                 , iif([Datum] <= [Heute] AND [Datum] >= [kalender].[boquarter]([Heute]), 1, 0) AS "Q bisher" -- TODO
                 , iif([Datum] <= dateadd(MM, -3, [Heute]) AND [Datum] >= [kalender].[boquarter](dateadd(MM, -3, [Heute])), 1, 0) AS "Voriges Q bisher"
                 -- "Q bisher gruppiert",
                 , iif([Datum] <= [Heute] AND [Datum] >= datefromparts(year([Heute]), 1, 1), 1, 0) AS "J bisher"
                 , iif([Datum] <= [Heute_Vorjahr] AND [Datum] >= datefromparts(year([Heute]) - 1, 1, 1), 1, 0) AS "Voriges J bisher"
                 ,
                 -- "J bisher gruppiert",
                 -- 0 as "J bisher / VJ bisher",
                iif([Datum] <= eomonth([Heute]) AND [Datum] >= [kalender].[bomonth]([Heute]), 1, 0) AS "Aktueller Monat"
                 , iif([Datum] <= eomonth([Heute_Vormonat]) AND [Datum] >= [kalender].[bomonth]([Heute_Vormonat]), 1, 0) AS "Vormonat (-1)"
                 , iif([Datum] <= eomonth(dateadd(MM, -2, [Heute])) AND [Datum] >= [kalender].[bomonth](dateadd(MM, -2, [Heute])), 1, 0) AS "Vormonat (-2)"
                 , iif([Datum] <= eomonth(dateadd(MM, -3, [Heute])) AND [Datum] >= [kalender].[bomonth](dateadd(MM, -3, [Heute])), 1, 0) AS "Vormonat (-3)"
                 , iif([Datum] <= eomonth([Heute_Vorjahr]) AND [Datum] >= [kalender].[bomonth]([Heute_Vorjahr]), 1, 0) AS "Akt. Monat Vorjahr"
                 , iif([Datum] <= eomonth(dateadd(MM, -1, [Heute_Vorjahr])) AND [Datum] >= [kalender].[bomonth](dateadd(MM, -1, [Heute_Vorjahr])), 1, 0) AS "Vormonat (-1) Vorjahr"
                 , iif([Datum] <= eomonth(dateadd(MM, -2, [Heute_Vorjahr])) AND [Datum] >= [kalender].[bomonth](dateadd(MM, -2, [Heute_Vorjahr])), 1, 0) AS "Vormonat (-2) Vorjahr"
                 , iif([Datum] <= eomonth(dateadd(MM, -3, [Heute_Vorjahr])) AND [Datum] >= [kalender].[bomonth](dateadd(MM, -3, [Heute_Vorjahr])), 1, 0) AS "Vormonat (-3) Vorjahr"
                 , iif([Datum] <= eomonth([Heute]) AND [Datum] >= [kalender].[bomonth](dateadd(MM, -6, [Heute])), 1, 0) AS "letzte 6 Monate"
                 , iif([Datum] <= eomonth([Heute]) AND [Datum] >= [kalender].[bomonth](dateadd(MM, -12, [Heute])), 1, 0) AS "letzte 12 Monate"
                 , iif([Datum] <= [Heute_Vormonat] AND [Datum] >= datefromparts(year([Heute_Vormonat]), 1, 1), 1, 0) AS "per Vormonat"
                 , iif([Datum] <= dateadd(MM, -2, [Heute]) AND [Datum] >= datefromparts(year(dateadd(MM, -2, [Heute])), 1, 1), 1, 0) AS "per Vormonat (-2)"
                 , iif([Datum] <= dateadd(MM, -3, [Heute]) AND [Datum] >= datefromparts(year(dateadd(MM, -3, [Heute])), 1, 1), 1, 0) AS "per Vormonat (-3)"
                 , iif([Datum] <= dateadd(MM, -1, [Heute_Vorjahr]) AND [Datum] >= datefromparts(year(dateadd(MM, -1, [Heute_Vorjahr])), 1, 1), 1, 0) AS "per Vormonat Vorjahr"
                 , iif([Datum] <= dateadd(MM, -2, [Heute_Vorjahr]) AND [Datum] >= datefromparts(year(dateadd(MM, -2, [Heute_Vorjahr])), 1, 1), 1, 0) AS "per Vormonat (-2) Vorjahr"
                 , iif([Datum] <= dateadd(MM, -3, [Heute_Vorjahr]) AND [Datum] >= datefromparts(year(dateadd(MM, -3, [Heute_Vorjahr])), 1, 1), 1, 0) AS "per Vormonat (-3) Vorjahr"
                 , iif(year([Datum]) = year([Heute]), 1, 0) AS "Aktuelles Jahr"
                 , iif(year([Datum]) = year([Heute]) - 1, 1, 0) AS "letztes Jahr"
                 , iif([Datum] <= eomonth(dateadd(MM, -2, [Heute])) AND [Datum] >= [kalender].[bomonth](dateadd(MM, -5, [Heute])), 1, 0) AS "3 Monate bis Vormonat (-2)"
                 , iif([Quartal] = [kalender].[quarter_name](dateadd(QQ, -1, [Heute])), 1, 0) AS "Quartal (-1)"
                 , iif([Quartal] = [kalender].[quarter_name](dateadd(QQ, -2, [Heute])), 1, 0) AS "Quartal (-2)"
                 , iif([Quartal] = [kalender].[quarter_name](dateadd(QQ, -3, [Heute])), 1, 0) AS "Quartal (-3)"
                 , iif([Quartal] = [kalender].[quarter_name](dateadd(QQ, -1, [Heute_Vorjahr])), 1, 0) AS "Quartal (-1) Vorjahr"
                 , iif([Quartal] = [kalender].[quarter_name](dateadd(QQ, -2, [Heute_Vorjahr])), 1, 0) AS "Quartal (-2) Vorjahr"
                 , iif([Quartal] = [kalender].[quarter_name](dateadd(QQ, -3, [Heute_Vorjahr])), 1, 0) AS "Quartal (-3) Vorjahr"
                 , iif(([Datum] <= dateadd(QQ, -1, [Heute]) AND [Datum] >= datefromparts(year(dateadd(QQ, -1, [Heute])), 1, 1)) OR [Quartal] = [kalender].[quarter_name](dateadd(QQ, -1, [Heute])), 1, 0) AS "Quartal (-1) kum."
                 , iif(([Datum] <= dateadd(QQ, -1, [Heute_Vorjahr]) AND [Datum] >= datefromparts(year(dateadd(QQ, -1, [Heute_Vorjahr])), 1, 1)) OR [Quartal] = [kalender].[quarter_name](dateadd(QQ, -1, [Heute_Vorjahr])), 1, 0) AS "Quartal (-1) kum. Vorjahr"
                 ,
                 --0 as "restl. Jahr",
                 --0 as "Gesamtjahr",
                iif([Datum] <= eomonth([Heute_Vormonat]) AND [Datum] >= [kalender].[bomonth](dateadd(MM, -12, [Heute])), 1, 0) AS "letzte 11 Monate"
                 , iif([Datum] <= eomonth([Heute_Vormonat]) AND [Datum] >= [kalender].[bomonth](dateadd(MM, -14, [Heute])), 1, 0) AS "letzte 13 Monate"
                 --0 as "12 Monate kum. rollierend"

                 , iif([Datum] <= [Heute] AND [Datum] > dateadd(DD, -3, [Heute]), 1, 0) AS "letzte 3 Tage"
                 , iif([Datum] <= [Heute] AND [Datum] > dateadd(DD, -7, [Heute]), 1, 0) AS "letzte 7 Tage"
                 , iif([Datum] <= [Heute] AND [Datum] > dateadd(DD, -14, [Heute]), 1, 0) AS "letzte 14 Tage"
                 , iif([Datum] <= [Heute] AND [Datum] > dateadd(DD, -30, [Heute]), 1, 0) AS "letzte 30 Tage"

            FROM [Kalender_Heute_Vorjahr_Vormonat] [T1])


  , [Zeit_Dimension_mit_Gruppen]
        AS (SELECT [Datum]
                 , [Tag_im_Jahr]
                 , [Wochentag]
                 , [Wochentag_int]
                 , [Periode]
                 , [Kalenderwoche]
                 , [Quartal_int]
                 , [Datum_str]
                 , [Datum_int]
                 , [MoFr]
                 , [MoSa]
                 , [Jahr]
                 , [Quartal]
                 , [Monat]
                 , [Tag]
                 , [Heute]
                 , [Heute_Vorjahr]
                 , [Heute_Vormonat]
                 , [Aktueller Tag]
                 , [Gestern]
                 , [M bisher]
                 , [M bisher Vorjahr]
                 , [M bisher] + [M bisher Vorjahr] * 2 AS [M bisher / M bisher VJ]
                 , [Voriger M bisher]
                 , [M bisher] + [Voriger M bisher] * 2 AS [M bisher gruppiert]
                 , [Q bisher]
                 , [Voriges Q bisher]
                 , [Q bisher] + [Voriges Q bisher] * 2 AS [Q bisher gruppiert]
                 , [J bisher]
                 , [Voriges J bisher]
                 , [J bisher] + [Voriges J bisher] * 2 AS [J bisher gruppiert]
                 , [Aktueller Monat]
                 , [Vormonat (-1)]
                 , [Vormonat (-2)]
                 , [Vormonat (-3)]
                 , [Akt. Monat Vorjahr]
                 , [Vormonat (-1) Vorjahr]
                 , [Vormonat (-2) Vorjahr]
                 , [Vormonat (-3) Vorjahr]
                 , [letzte 6 Monate]
                 , [letzte 12 Monate]
                 , [per Vormonat]
                 , [per Vormonat (-2)]
                 , [per Vormonat (-3)]
                 , [per Vormonat Vorjahr]
                 , [per Vormonat (-2) Vorjahr]
                 , [per Vormonat (-3) Vorjahr]
                 , [Aktuelles Jahr]
                 , [letztes Jahr]
                 , [3 Monate bis Vormonat (-2)]
                 , [Quartal (-1)]
                 , [Quartal (-2)]
                 , [Quartal (-3)]
                 , [Quartal (-1) Vorjahr]
                 , [Quartal (-2) Vorjahr]
                 , [Quartal (-3) Vorjahr]
                 , [Quartal (-1) kum.]
                 , [Quartal (-1) kum. Vorjahr]
                 , [letzte 11 Monate]
                 , [letzte 13 Monate]
                 , [letzte 3 Tage]
                 , [letzte 7 Tage]
                 , [letzte 14 Tage]
                 , [letzte 30 Tage]
            FROM [Zeit_Dimension_Berechnung])


SELECT *
FROM [Zeit_Dimension_mit_Gruppen]
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO

GO
