繁体   English   中英

将 SQL 代码连接到 Power BI 的问题

[英]Issues with connecting SQL code to Power BI

我需要一些帮助。 如果有人在将 SQL 代码连接到 Power BI 方面有良好的经验,我将不胜感激您的回复/帮助。

我有一个 SQL 代码,我尝试将其添加到 Power BI,但添加时出现错误

创建连接 Query2 Microsoft SQL:关键字“DECLARE”附近的语法不正确。 ')' 附近的语法不正确。

有人可以查看并让我知道出了什么问题吗? 我的代码工作得很好是 Microsoft SQL Server Management Studio。

DECLARE @CurrentDateTime DATETIME = GETDATE();
DECLARE @CurrentDate DATE = @CurrentDateTime;

DECLARE @LastWeekDt DATE = DATEADD(WW, -1, DATEADD(DD, 7 - DATEPART(dw, @CurrentDate), @CurrentDate));
DECLARE @LastWeekDATE VARCHAR(8) = convert(varchar(8),cast (@LASTWEEKDT as date),112);

DECLARE @LastYearLWDt DATE = DATEADD(WW, -104, DATEADD(DD, 7 - DATEPART(dw, @LastWeekDt), @LastWeekDt));
DECLARE @LastYearLWDATE VARCHAR(8) = convert(varchar(8),cast (@LastYearLWDt as date),112);




SET ARITHABORT OFF 
SET ANSI_WARNINGS OFF


Select AGENCY, MASTER_CHAIN, CHAIN, STORE_NBR, WK_ENDING,
sum(OB_UNITS) as 'OB_UNITS',  sum(RET_UNITS) as 'RET_UNITS',  sum(ob_units) - sum(ret_units) AS 'NET_UNITS', 
sum(pos_units) as 'POS_UNITS', CAST(ROUND(sum(RET_UNITS) / sum (OB_UNITS) * 100,2) as decimal (10,2)) AS '%RET_UNITS',
CAST(ROUND(sum(pos_units) / sum(ob_units) * 100,2) as decimal (10,2)) AS '%POS_Sell-Thru_Units', sum(ob_msrp) as 'OB_MSRP', 
sum(RET_MSRP) as 'RET_MSRP', sum(OB_MSRP) - sum(RET_MSRP) as 'NET_MSRP', sum(POS_MSRP) as 'POS_MSRP', CAST(ROUND(sum(RET_MSRP) / sum(OB_MSRP) * 100,2) as decimal (10,2)) AS '%RET_MSRP',
CAST(ROUND(sum(POS_MSRP) / sum(OB_MSRP) * 100,2) as decimal (10,2)) AS '%POS_Sell-Thru_MSRP',

CAST(sum(ob_billing) as decimal (10,2)) as 'OB_BILLING', CAST(sum(RET_BILLING) as decimal (18,2)) as 'RET_BILLING', 
CAST(ROUND(sum(ob_billing) - sum(ret_billing),2) as decimal (10,2)) AS 'NET_BILLING', CAST(sum(POS_BILLING) as decimal (10,2)) as 'POS_BILLING',
CAST(ROUND(sum(RET_BILLING) / sum(OB_BILLING) * 100, 2) as decimal (10,2)) AS '%RET_BILLING', 
CAST(ROUND(sum(POS_BILLING) / sum (OB_BILLING) * 100,2) as decimal (10,2)) AS '%POS_Sell-Thru_BILLING', sum(Retailer_On_Hand_Units) AS 'Retailer_On_Hand_Units'


FROM
(SELECT s.DEAGY AS 'AGENCY', l.cmschn AS 'MASTER_CHAIN', s.DECHN AS 'CHAIN', s.DESTR AS 'STORE_NBR', s.DEWEDT AS 'WK_ENDING',
CASE WHEN s.DEIO='O' AND s.DEAGY = 10 AND s.DECHN = 'WM' THEN s.DEQTY ELSE 0 END AS 'OB_UNITS',
0 AS 'RET_UNITS', 0 AS 'NET_UNIS', 0 AS 'POS_UNITS', 0 AS '%RET_UNITS', 0 AS '%POS_Sell-Thru_Units',
CASE WHEN s.DEIO='O' AND s.DEAGY = 10 AND s.DECHN = 'WM' THEN s.DEQTY * s.DERPRC ELSE 0 END AS OB_MSRP,  0 AS 'RET_MSRP', 0 AS 'NET_MSRP', 0 AS 'POS_MSRP', 0 AS '%RET_MSRP', 0 AS '%POS_Sell-Thru_MSRP',
CASE WHEN s.DEIO='O' AND s.DEAGY = 10 AND s.DECHN = 'WM' THEN s.DEQTY * s.DERSP ELSE '0'END AS OB_BILLING, 0 AS 'RET_BILLING', 0 AS 'NET_BILLING',  0 AS 'POS_BILLING', 0 AS '%RET_BILLING', 0 AS '%POS_Sell-Thru_BILLING', 0 AS 'Retailer_On_Hand_Units'



--INTO ##temp1
FROM REPIT.SMPDTA.SMPDTLM s
JOIN REPIT.LEVYDTA.LDSCHNM l
ON s.DEAGY=l.CMAGY AND s.DECHN=l.CMCHN
--JOIN LEVYDTA.SMPRTNM sm
--ON s.DEAGY=sm.DEAGY AND s.DECHN=sm.DECHN AND s.DESTR=sm.DESTR AND s.DEWEDT=sm.DEWEDT AND s.DEITM#=sm.DEITM#
where s.DEWEDT between @LastYearLWDATE and @LastWeekDATE AND s.DEAGY=10 AND s.DECHN='WM' and deqty > 0



union all



select p.PDAGY as 'AGENCY', lm.CMSCHN as 'MASTER_CHAIN', P.PDCHN AS 'CHAIN', P.PDSTR AS 'STORE_NBR', P.PDWEDT AS 'WK_ENDING',
0 AS 'OB_UNITS', 0 AS 'RET_UNITS', 0 AS 'NET_UNITS', P.PDQSLD AS 'POS_UNITS', 0 AS '%RET_UNITS', 0 AS '%POS_Sell-Thru_Units', 0 AS 'OB_MSRP',0 AS 'RET_MSRP', 0 AS 'NET_MSRP', 
P.PDQSLD * P.PDRPRC AS 'POS_MSRP', 0 AS '%RET_MSRP', 0 AS '%POS_Sell-Thru_MSRP',
0 AS 'OB_BILLING', 0 AS 'RET_BILLING', 0 AS 'NET_BILLING', P.PDQSLD * P.PDRSP AS 'POS_BILLING', 0 AS '%RET_BILLING', 0 AS '%POS_Sell-Thru_BILLING', p.PDQOH AS 'Retailer_On_Hand_Units'
from repit.LEVYDTA.posdtlm p LEFT OUTER JOIN
REPIT.LEVYDTA.LDSCHNM lm ON P.PDAGY = LM.CMAGY AND P.PDCHN = lm.CMCHN
WHERE p.PDWEDT between @LastYearLWDATE and @LastWeekDATE  and p.PDAGY = 10 and p.PDCHN = 'wm'


union all

select sm.DEAGY as 'AGENCY', lm.cmschn AS 'MASTER_CHAIN', sm.DECHN AS 'CHAIN', sm.DESTR AS 'STORE_NBR', sm.DEWEDT AS 'WK_ENDING',
0 AS 'OB_UNITS',
CASE WHEN sm.DEIO='I' AND sm.DEAGY = 10 AND sm.DECHN = 'WM' THEN -1 * sm.DEQTY ELSE 0 END AS 'RET_UNITS', 0 AS 'NET_UNITS',
0 AS 'POS_UNITS', 0 AS '%RET_UNITS', 0 AS '%POS_Sell-Thru_Units', 0 AS 'OB_MSRP',
CASE WHEN sm.DEIO='I' AND sm.DEAGY = 10 AND sm.DECHN = 'WM' THEN ( -1 * sm.DEQTY) * sm.DERPRC ELSE 0 END AS 'RET_MSRP', 0 AS 'NET_MSRP',

0 AS 'POS_MSRP', 0 AS '%RET_MSRP', 0 AS '%POS_Sell-Thru_MSRP',
0 AS 'OB_BILLING', 
CASE
WHEN sm.DEIO='I' AND sm.DEAGY = 10 AND sm.DECHN = 'WM'  THEN (-1 * SM.DEQTY) * sm.DERSP ELSE 0
END AS RET_BILLING, 0 AS 'NET_BILLING', 0 AS 'POS_BILLING', 0 AS '%RET_BILLING', 0 AS '%POS_Sell-Thru_BILLING', 0 AS 'Retailer_On_Hand_Units'

from REPIT.LEVYDTA.SMPRTNM sm  LEFT OUTER JOIN
REPIT.LEVYDTA.LDSCHNM lm ON sm.DEAGY=LM.CMAGY AND sm.DECHN=lm.CMCHN
WHERE sm.DEWEDT between @LastYearLWDATE and @LastWeekDATE AND sm.DEAGY=10 and sm.DECHN='WM'
) 
x

group by Agency, MASTER_CHAIN, chain, STORE_NBR, WK_ENDING



order by STORE_NBR

非常感谢您的建议!

Power BI 构造如下查询:

select * from ( ... your query goes here ... ) as SourceQuery

因此,当它将您的查询放在括号之间时,它不再是有效的查询。 Power BI 会这样做,因为它需要能够将联接和筛选器添加到您的查询中。 要么使用 M 和 DAX 重建 Power BI 内部的逻辑,要么将查询放在数据源中的视图中,并从中获取 select。

当我尝试相同的语法时,同样的事情发生了。 我所做的是将“声明”语句更改为“选择为”语句,这对我有用。 希望你试试这个,如果它有效,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM