У меня следующий запрос MS SQL Server, который при запуске в PowerBI выдает ошибку, так как CTE не поддерживаются DirectQuery.
;WITH Daily_Report_CTE
AS
(
SELECT WazeUpdateTime_PST, Name, Length, Time, TimePeriod =
(
CASE
WHEN DATEPART(hour, WazeUpdateTime_PST) >= 5 AND DATEPART(hour, WazeUpdateTime_PST) < 11 THEN 'Morning'
WHEN DATEPART(hour, WazeUpdateTime_PST) >= 11 AND DATEPART(hour, WazeUpdateTime_PST) < 17 THEN 'Mid-Day'
WHEN DATEPART(hour, WazeUpdateTime_PST) >= 17 AND DATEPART(hour, WazeUpdateTime_PST) < 23 THEN 'Evening'
ELSE 'Overnight'
END
)
FROM Repository_Archive.DataManagement_Ops_AllAccess.vw_Waze_TVT_ParsedJSON_Routes
WHERE (DATEPART(dy, WazeUpdateTime_PST) BETWEEN DATEPART(dy,DateAdd(DD,-21,( GETDATE() AT TIME ZONE 'Pacific Standard Time'))) and DATEPART(dy,( GETDATE() AT TIME ZONE 'Pacific Standard Time')))
AND (DATENAME(weekday, WazeUpdateTime_PST)) = DATENAME(weekday, ( GETDATE() AT TIME ZONE 'Pacific Standard Time'))
AND Name IN ('I-105 to UL', 'La Cienega to UL', '405-La Tijera-Sepulveda to UL', 'Manchester to UL', 'Howard Hughes to UL', 'Lincoln to UL', 'Lincoln-Manchester to UL')
)
SELECT WazeUpdateTime_PST, Name, Length, Time, TimePeriod,
Color =
(
CASE
WHEN Time > PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY Time)
OVER (PARTITION BY Name, TimePeriod)
THEN 'Red'
WHEN Time > PERCENTILE_CONT(0.6) WITHIN GROUP (ORDER BY Time)
OVER (PARTITION BY Name, TimePeriod)
THEN 'Yellow'
ELSE 'Green'
END
)
FROM Daily_Report_CTE
Обходным решением является переписывание CTE как подзапросов в основном запросе. Я не самый знающий, когда дело доходит до SQL Server или SQL в целом, и было сложно создать работающий запрос с использованием CTE.
Как мне переписать это как подзапрос?