CTE не работает в кубе SSAS.Я хочу найти решение или преобразовать его в подзапрос - PullRequest
0 голосов
/ 22 ноября 2018

Я пишу этот запрос CTE, и объяснение таково:

    WITH TP AS 
    (select  
    c.ID, c.PeriodCId, c.PeriodName, c.Status, c.StatusChangeDate, CAST(c.StartDate AS DATE) AS StartDate, c.EndDate,c.PeriodCode,
              c.PeriodType, c.ParentCId, c.MarketId, c.ParentId, c.WD, LEFT(CONVERT(varchar, c.StartDate, 112), 6) AS YEARMONTH, 
              (select count(*) from dTimePeriod c2 where c2.ParentId = c.ID and  c2.Status='actv') as #children
from    dTimePeriod c
where  (MarketId = 7) ),
 TP2 AS
( SELECT *
FROM TP 
WHERE  #children='12'  ),
TP3 AS
(SELECT TP.*, CASE WHEN (TP.WD IS NOT NULL) AND (TP.StartDate <= getdate()) AND TP2.ID=TP.ParentId THEN 18 ELSE NULL END AS WorkingDays
FROM TP LEFT JOIN TP2 ON TP2.ID=TP.ParentId)
select * from TP3
order by ID

, и это результат Изображение CTE

У меня есть рекурсивная таблица [dTimePeriod] thisтаблица содержит разные циклы, и каждый цикл содержит разное количество периодов, например: один цикл имеет 8 периодов, другой цикл имеет 12 периодов и т. д. Я хочу, чтобы циклы содержали 12 периодов, для каждого значения периода = 18, а для других периодов цикла - ноль иЕсть некоторые другие условия, но это не проблема.

И когда я помещаю его в куб SSAS, он не работает, потому что куб не понимает CTE, поэтому я попытался найти решение, но это не так.Один из них не может поместить этот CTE в представление и вызвать это представление в кубе, но представление также не работает.поэтому я начинаю писать его как подзапрос, чтобы куб мог его понять.но я застрял, я не могу написать этот CTE в выражении подзапроса

, и это подзапрос, где я застрял

SELECT         c.ID, c.PeriodCId, c.PeriodName, c.Status, c.StatusChangeDate, CAST(c.StartDate AS DATE) AS StartDate, c.EndDate,
               c.PeriodCode, c.PeriodType, c.ParentCId, c.MarketId, c.ParentId, c.WD,
               LEFT(CONVERT(varchar, c.StartDate, 112), 6) AS YEARMONTH,
               CASE WHEN (c.WD IS NOT NULL) AND (c.StartDate <= getdate()) THEN 18           
               WHEN (c.WD IS NOT NULL) AND (c.StartDate > getdate()) THEN NULL ELSE c.WD END AS WorkingDays,

              case when (select sub.*  from 
             (select count(*) as children  from dTimePeriod c2   where c2.ParentId = c.ID and   c2.Status='actv' ) sub ) = 12 
              then 18 else null end as WWW


FROM           dTimePeriod c 
WHERE         (c.MarketId = 7)

1 Ответ

0 голосов
/ 26 ноября 2018

Вместо использования команды SQL непосредственно в источнике данных для вашего куба, вы можете превратить этот запрос в хранимую процедуру и использовать этот набор результатов в кубе.Для оператора SQL в кубе просто выполните команду EXEC, как показано ниже.Имя базы данных не требуется, если эта база данных уже является исходным каталогом в строке подключения источника данных.

EXEC YourDatabase.YourSchema.YourSP
...