Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL查询中引用Power BI度量?_Sql_Sql Server_Powerbi - Fatal编程技术网

如何在SQL查询中引用Power BI度量?

如何在SQL查询中引用Power BI度量?,sql,sql-server,powerbi,Sql,Sql Server,Powerbi,长时间侦听器,第一次调用…:-) 所以我是Power BI的新手,我希望我能让它发挥作用。我在下面导入了SQL查询: DECLARE @RangeStart as varchar(19), @RangeEnd as varchar(19), @ReportStart as date, @ReportEnd as date SET @RangeStart = '2020-01-01 00:00:00' SET @RangeEnd = '2020-05-31 00

长时间侦听器,第一次调用…:-)

所以我是Power BI的新手,我希望我能让它发挥作用。我在下面导入了SQL查询:

DECLARE 
    @RangeStart as varchar(19),
    @RangeEnd as varchar(19),
    @ReportStart as date,
    @ReportEnd as date

SET @RangeStart = '2020-01-01 00:00:00'
SET @RangeEnd = '2020-05-31 00:00:00'
SET @ReportStart = CAST(@RangeStart as datetime)
SET @ReportEnd = CAST(@RangeEnd as datetime)

SELECT COUNT(screen_client_id) AS SarpyYtdScreenings
FROM dbo.screen
WHERE (screen_date BETWEEN @ReportStart AND @ReportEnd)
因此,从Power Query Editor,它将其“转换”为:

到目前为止,一切顺利。但是我创建了一个名为DateParameters的“表”,其中有些度量值就像用户要使用的参数一样,比如“EndDate”和“FirstDayOfYear”。但我想以某种方式将这些度量传递到我的SQL查询中。我找到了一个网站,上面说我可以用这个度量值替换文字2020-01-01 00:00:00,但我无法让它工作。我试过:

let
    Source = Sql.Database("freedom1a", "pretrial", [Query="declare #(lf)@RangeStart as varchar(19),#(lf)@RangeEnd as varchar(19),#(lf)@ReportStart as date,#(lf)@ReportEnd as date#(lf)SET @RangeStart = '"&DateParameters[FirstDayOfYear]&"'#(lf)SET @RangeEnd = '2020-05-31 00:00:00'#(lf)SET @ReportStart = CAST(@RangeStart as datetime)#(lf)SET @ReportEnd = CAST(@RangeEnd as datetime)#(lf)SELECT        COUNT(screen_client_id) AS SarpyYtdScreenings#(lf)FROM            dbo.screen#(lf)WHERE        (screen_date BETWEEN @ReportStart AND @ReportEnd)"])
in
    Source
…这几乎奏效了。当我开始键入DateParameters时,它知道我想要哪个表,但无论我引用该表中的哪个度量值,它都无法识别它。除非我的语法错了。我还尝试了DateParameters.FirstDayOfYear,但它也不喜欢这样。这能做到吗?也许它只识别表列而不识别表度量?我是否需要创建一个只保存度量值的列?一定有办法做到这一点

非常感谢任何人能提供的任何帮助!谢谢


Darwin

您不能在查询编辑器中使用DAX度量值或使用DAX创建的任何表/列


你有几个选择

  • 将报告所需的所有日期/数据加载到模型中,并在Power BI中进行筛选

  • 使用DirectQuery而不是将所有数据加载到模型中,Power BI将在后台执行SQL过滤


  • 假设未使用DirectQuery,则模型包含所有数据,用户选择的参数将应用于Power BI中存储的数据,而不是数据导入。您将使用DAX限制来自完整数据集的报告数据。感谢您的输入,Alexis。对于#1和#2,您推荐哪一种?如果您需要的整个数据集不是太大,则导入允许更大的灵活性()。
    let
        Source = Sql.Database("freedom1a", "pretrial", [Query="declare #(lf)@RangeStart as varchar(19),#(lf)@RangeEnd as varchar(19),#(lf)@ReportStart as date,#(lf)@ReportEnd as date#(lf)SET @RangeStart = '"&DateParameters[FirstDayOfYear]&"'#(lf)SET @RangeEnd = '2020-05-31 00:00:00'#(lf)SET @ReportStart = CAST(@RangeStart as datetime)#(lf)SET @ReportEnd = CAST(@RangeEnd as datetime)#(lf)SELECT        COUNT(screen_client_id) AS SarpyYtdScreenings#(lf)FROM            dbo.screen#(lf)WHERE        (screen_date BETWEEN @ReportStart AND @ReportEnd)"])
    in
        Source