CTE 在 SSAS 多维数据集中不起作用。我想找到解决方案或将其转换为子查询



我写了这个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]的递归表,这个表包含不同的周期,每个周期包含不同数量的周期,例如:一个周期有8个周期,另一个周期则有12个周期,以此类推,我想知道周期是否包含12个周期还有其他一些条件,但这不是问题所在。

当我把它放在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)

您可以将此查询转换为存储过程并在多维数据集中使用该结果集,而不是直接在多维数据集的数据源中使用SQL命令。对于多维数据集中的SQL语句,只需执行以下EXEC命令即可。如果此数据库已经是数据源的连接字符串中的初始目录,则不需要数据库名称。

EXEC YourDatabase.YourSchema.YourSP

最新更新