简体   繁体   English

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

[英]Issues with connecting SQL code to Power BI

I need some help.我需要一些帮助。 Please if someone has good experience with connecting SQL code to Power BI I will appreciate your response/help.如果有人在将 SQL 代码连接到 Power BI 方面有良好的经验,我将不胜感激您的回复/帮助。

I have a SQL code that I try to add to Power BI but when I add it, I get an error我有一个 SQL 代码,我尝试将其添加到 Power BI,但添加时出现错误

Create connections Query2 Microsoft SQL: Incorrect syntax near the keyword 'DECLARE'.创建连接 Query2 Microsoft SQL:关键字“DECLARE”附近的语法不正确。 Incorrect syntax near ')'. ')' 附近的语法不正确。

Can someone review and let me know what is wrong?有人可以查看并让我知道出了什么问题吗? My code works just fine is Microsoft SQL Server Management Studio.我的代码工作得很好是 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

Your advice strongly appreciated!!非常感谢您的建议!

Power BI constructs a query like this: Power BI 构造如下查询:

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

So when it puts your query between the parenthesis, it isn't a valid query anymore.因此,当它将您的查询放在括号之间时,它不再是有效的查询。 Power BI does that, because it needs to be able to add joins and filters to your query. Power BI 会这样做,因为它需要能够将联接和筛选器添加到您的查询中。 Either rebuild the logic inside Power BI using M and DAX, or put your query in a view in the data source and select from it.要么使用 M 和 DAX 重建 Power BI 内部的逻辑,要么将查询放在数据源中的视图中,并从中获取 select。

The same thing happened when I tried the same syntax.当我尝试相同的语法时,同样的事情发生了。 what I did was to change the “declare” statements to "select as" statements, this worked for me.我所做的是将“声明”语句更改为“选择为”语句,这对我有用。 Hope you try this and please do let me know if it worked.希望你试试这个,如果它有效,请告诉我。

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

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