简体   繁体   中英

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.

I have a SQL code that I try to add to Power BI but when I add it, I get an error

Create connections Query2 Microsoft SQL: Incorrect syntax near the keyword '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.

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:

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. 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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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