美文网首页
动态分区以及参数限制行数的写法

动态分区以及参数限制行数的写法

作者: BI罗 | 来源:发表于2020-06-30 11:32 被阅读0次
    let
        Source = #"SQL/b2bc********** database xxxx-***-****-cdhdp-01",
        all = Source{[Schema="dbo",Item="Fact_lyNI"]}[Data],
       r1000 = Table.Range(all,0,1000),
        r10000 = Table.Range(all,0,10000),
        r0 = Table.Range(all,0,0)
    in
        if Para="all" then all else if Para="r1000" then r1000 else if Para="r10000" then r10000 else r0
    
    

    下面是更好的参数写法,可以直接看到本机查询(查询折叠)

    let
        Source = #"SQL/b2bcxxxxxxx-01",
        all= Source{[Schema="dm",Item="V_Fact_y_v2"]}[Data],
        r1000= Table.FirstN(all,1000),
        r=if (Para)="r1000" then Table.FirstN(all,1000) else all
    in
         r
    
    let
        Source = #"SQL/bxxxxxx",
        d= Source{[Schema="dm",Item="V_Fact_xily"]}[Data],
        //r=Table.Range(d,0,TopRows)
        r= Table.FirstN(d,TopRows)
    in
        r
    

    Table.FirstN和Table.Range的作用都可以用来现在行数,但是Table.Range选择的行数区间更灵活,经过测试这两种方法都都能触发折叠查询

    let
        x1=Date.AddMonths(Date.AddDays(DateTime.LocalNow(), -2),-3),//etl date
        x2=Date.ToText(#date(Date.Year(x1),Date.Month(x1),1)),   //4 month ago
        r1000 = "top 1000",
        r10000 = "top 10000",
        r1 = "top 1",
        r=if Para="all" then "" else if Para="r1000" then r1000 else if Para="r10000" then r10000 else r1,
        all = Sql.Database("b2b*******.database.chinacloudapi.cn", 
                "B2B-qa-*****-cd-01",
                 [Query="select "&r&" * from [dbo].[Fact_daily] where trans_date>='"&x2&"'",CommandTimeout=#duration(0,1,0,0),MultiSubnetFailover=true])
        
    in
        all
    
    
    //月初的另一种写法
      // start_date = Date.StartOfMonth(#date(2020, 2, 1)), 
       //  end_date = Date.AddMonths(start_date, 1),
    
    
    //start_date = Date.StartOfMonth(#date(2019, 1, 1)), 
    //  end_date =DateTime.Date(Date.AddMonths(Date.StartOfMonth(Date.AddDays(DateTime.LocalNow(), -2)),-3)),
    //DateTime.Date返回日期格式非日期时间格式,才能与start_date日期进行比较
    

    sql语句导入方法会阻止查询折叠,可以table.view的方法手动触发查询折叠,避免二次查询
    https://www.jianshu.com/p/eff0647e3ac5

    为什么需要查询折叠


    pq的很多操作都会阻止折叠查询(pq的查询,微软更推荐将pq的查询语句下压到数据源),命名,或者参数限制行数不会阻止查询折叠:

    因此推荐可以用参数来限制行数(并且推荐Table.FirstN或者Table.Range的写法,不推荐sql拼接参数)

    在表非常大的情况下,先用参数限制行数,然后再进行其他ETL的工作

    let
       Source = #"SQLxxxxx",
       x = Source{[Schema="dm",Item="V_Fact_v2"]}[Data],
       start_date = Date.StartOfMonth(#date(2019, 1, 1)), 
       end_date =DateTime.Date(Date.AddMonths(Date.StartOfMonth(Date.AddDays(DateTime.LocalNow(), -2)),-3)),//DateTime.Date返回日期才能作比较
       all = Table.SelectRows(x, each [Daily] >= start_date and [Daily] < end_date),
       //时间区间为2019-1-1至当前时间往前的第4个月,例如现在2021-1-1,X分区就是2019-1-1到2020-9-30,runbook每月T-2为1号自动合并M-4分区到X分区
       r=if (Para)="r1000" then Table.FirstN(all,1000) else all
    in
       r
    

    相关文章

      网友评论

          本文标题:动态分区以及参数限制行数的写法

          本文链接:https://www.haomeiwen.com/subject/ountqktx.html