如何创建调用存储过程的本机查询
How to create a native query in which you call a stored procedure
我的问题主要是找不到如何通过Power BI的Direct Query数据连接方法使用存储过程的解决方案,也就是说,我想在Power BI中使用Direct Query制作报表数据集在存储过程中。
几天的阅读和咨询我找到了一个可能的解决方案(在这里他们会告诉我它是否最适合我的情况)是创建一个调用存储过程的本机查询,这是为了不使用存储过程,而是使用 Power BI 的本机查询。
按照我的想法,我必须执行本机查询的存储过程如下:
ALTER PROCEDURE [dbo].[TravelsCustomers]
@TypeOp int = 0,
@Customer varchar(50)
AS
BEGIN
SET NOCOUNT ON
SELECT
Estatus,
ClaveCustomer
Lote,
Address,
OC
INTO
#Response
FROM
TravelVw V
WHERE
Estatus = 'PROGRESS'
AND TypeOp = CASE
WHEN @TypeOp = 0 THEN TypeOp
WHEN @TypeOp = 1 THEN 'FLASH'
WHEN @TypeOp = 2 THEN 'SMALL'
END
AND ISNULL(@Customer, '0') IN ('0', ClaveCustomer)
AND TypeOp != 'SALE'
SELECT
V.*,
I2.Coment, I2.MODIFIEDBY, I2.CreatedDateTime
FROM
#Response V
LEFT JOIN
(SELECT
I.Travel,
ISNULL(I.Coment, '-') Coment,
I.ModifiedBy,
DATEADD(MINUTE, DATEDIFF(MINUTE, GETUTCDATE(), GETDATE()), I.CreatedDateTime) CreatedDateTime
FROM
dbo.Travel I
WHERE
I.CREATEDDATETIME = (SELECT MAX(CREATEDDATETIME)
FROM dbo.I3
WHERE I.Travel = I3.Travel)
) I2 ON V.Travel = I2.Travel
END
在这里,我希望得到您的支持,以生成本机查询或为我提供有关将存储过程与 Power BI 的直接查询一起使用的更好选择。
您可以创建一个 table 值函数,您应该可以使用 DirectQuery
访问它
CREATE OR ALTER FUNCTION [dbo].[TravelsCustomers]
(
@TypeOp int = 0,
@Customer varchar(50)
)
RETURNS TABLE AS RETURN
SELECT
V.*,
I2.Coment, I2.MODIFIEDBY, I2.CreatedDateTime
FROM (
SELECT
Estatus,
ClaveCustomer
Lote,
Address,
OC
FROM
TravelVw V
WHERE
Estatus = 'PROGRESS'
AND (@TypeOp = 0 OR TypeOp = CASE
WHEN @TypeOp = 1 THEN 'FLASH'
WHEN @TypeOp = 2 THEN 'SMALL'
END)
AND (@CustomerIS NULL OR ClaveCustomer = @Customer)
AND TypeOp != 'SALE'
) V
LEFT JOIN
(SELECT
I.Travel,
ISNULL(I.Coment, '-') Coment,
I.ModifiedBy,
DATEADD(MINUTE, DATEDIFF(MINUTE, GETUTCDATE(), GETDATE()), I.CreatedDateTime) CreatedDateTime
FROM
dbo.Travel I
WHERE
I.CREATEDDATETIME = (SELECT MAX(CREATEDDATETIME)
FROM dbo.I3
WHERE I.Travel = I3.Travel)
) I2 ON V.Travel = I2.Travel;
GO
我的问题主要是找不到如何通过Power BI的Direct Query数据连接方法使用存储过程的解决方案,也就是说,我想在Power BI中使用Direct Query制作报表数据集在存储过程中。
几天的阅读和咨询我找到了一个可能的解决方案(在这里他们会告诉我它是否最适合我的情况)是创建一个调用存储过程的本机查询,这是为了不使用存储过程,而是使用 Power BI 的本机查询。
按照我的想法,我必须执行本机查询的存储过程如下:
ALTER PROCEDURE [dbo].[TravelsCustomers]
@TypeOp int = 0,
@Customer varchar(50)
AS
BEGIN
SET NOCOUNT ON
SELECT
Estatus,
ClaveCustomer
Lote,
Address,
OC
INTO
#Response
FROM
TravelVw V
WHERE
Estatus = 'PROGRESS'
AND TypeOp = CASE
WHEN @TypeOp = 0 THEN TypeOp
WHEN @TypeOp = 1 THEN 'FLASH'
WHEN @TypeOp = 2 THEN 'SMALL'
END
AND ISNULL(@Customer, '0') IN ('0', ClaveCustomer)
AND TypeOp != 'SALE'
SELECT
V.*,
I2.Coment, I2.MODIFIEDBY, I2.CreatedDateTime
FROM
#Response V
LEFT JOIN
(SELECT
I.Travel,
ISNULL(I.Coment, '-') Coment,
I.ModifiedBy,
DATEADD(MINUTE, DATEDIFF(MINUTE, GETUTCDATE(), GETDATE()), I.CreatedDateTime) CreatedDateTime
FROM
dbo.Travel I
WHERE
I.CREATEDDATETIME = (SELECT MAX(CREATEDDATETIME)
FROM dbo.I3
WHERE I.Travel = I3.Travel)
) I2 ON V.Travel = I2.Travel
END
在这里,我希望得到您的支持,以生成本机查询或为我提供有关将存储过程与 Power BI 的直接查询一起使用的更好选择。
您可以创建一个 table 值函数,您应该可以使用 DirectQuery
访问它CREATE OR ALTER FUNCTION [dbo].[TravelsCustomers]
(
@TypeOp int = 0,
@Customer varchar(50)
)
RETURNS TABLE AS RETURN
SELECT
V.*,
I2.Coment, I2.MODIFIEDBY, I2.CreatedDateTime
FROM (
SELECT
Estatus,
ClaveCustomer
Lote,
Address,
OC
FROM
TravelVw V
WHERE
Estatus = 'PROGRESS'
AND (@TypeOp = 0 OR TypeOp = CASE
WHEN @TypeOp = 1 THEN 'FLASH'
WHEN @TypeOp = 2 THEN 'SMALL'
END)
AND (@CustomerIS NULL OR ClaveCustomer = @Customer)
AND TypeOp != 'SALE'
) V
LEFT JOIN
(SELECT
I.Travel,
ISNULL(I.Coment, '-') Coment,
I.ModifiedBy,
DATEADD(MINUTE, DATEDIFF(MINUTE, GETUTCDATE(), GETDATE()), I.CreatedDateTime) CreatedDateTime
FROM
dbo.Travel I
WHERE
I.CREATEDDATETIME = (SELECT MAX(CREATEDDATETIME)
FROM dbo.I3
WHERE I.Travel = I3.Travel)
) I2 ON V.Travel = I2.Travel;
GO