编写循环以简化在 M 语言/Power Query 中插入行

Writing Loops To Simplify Inserting Rows In M Language / Power Query

长期倾听,第一次来电,所以对我温柔一点。

我正在对预先存在的数据编写 12 周滚动线性回归预测,需要一种更简单的方法来“添加”12 周的数据。

最初的 12 行显示了我到目前为止所拥有的,但我需要做的是从当前周开始增加 12 周(我想我有,除了 <52 部分)但我还需要为每个不同的地点增加一周。

这是我目前拥有的:

= Table.InsertRows(#"Grouped Rows",0,
    {
    [Sky Week=List.Max(#"Grouped Rows"[Sky Week])+1, Early Life Vol=null, LOCATION=Text.Combine(List.Range(#"Grouped Rows"[LOCATION], 2, 1)),Total Vol=null, Headcount=null],
    [Sky Week=List.Max(#"Grouped Rows"[Sky Week])+2, Early Life Vol=null, LOCATION=Text.Combine(List.Range(#"Grouped Rows"[LOCATION], 2, 1)), Total Vol=null, Headcount=null],
    [Sky Week=List.Max(#"Grouped Rows"[Sky Week])+3, Early Life Vol=null, LOCATION=Text.Combine(List.Range(#"Grouped Rows"[LOCATION], 2, 1)),Total Vol=null, Headcount=null],
    [Sky Week=List.Max(#"Grouped Rows"[Sky Week])+4, Early Life Vol=null, LOCATION=Text.Combine(List.Range(#"Grouped Rows"[LOCATION], 2, 1)),Total Vol=null, Headcount=null],
    [Sky Week=List.Max(#"Grouped Rows"[Sky Week])+5, Early Life Vol=null, LOCATION=Text.Combine(List.Range(#"Grouped Rows"[LOCATION], 2, 1)),Total Vol=null, Headcount=null],
    [Sky Week=List.Max(#"Grouped Rows"[Sky Week])+6, Early Life Vol=null, LOCATION=Text.Combine(List.Range(#"Grouped Rows"[LOCATION], 2, 1)),Total Vol=null, Headcount=null],
    [Sky Week=List.Max(#"Grouped Rows"[Sky Week])+7, Early Life Vol=null, LOCATION=Text.Combine(List.Range(#"Grouped Rows"[LOCATION], 2, 1)),Total Vol=null, Headcount=null],
    [Sky Week=List.Max(#"Grouped Rows"[Sky Week])+8, Early Life Vol=null, LOCATION=Text.Combine(List.Range(#"Grouped Rows"[LOCATION], 2, 1)),Total Vol=null, Headcount=null],
    [Sky Week=List.Max(#"Grouped Rows"[Sky Week])+9, Early Life Vol=null, LOCATION=Text.Combine(List.Range(#"Grouped Rows"[LOCATION], 2, 1)),Total Vol=null, Headcount=null],
    [Sky Week=List.Max(#"Grouped Rows"[Sky Week])+10, Early Life Vol=null, LOCATION=Text.Combine(List.Range(#"Grouped Rows"[LOCATION], 2, 1)),Total Vol=null, Headcount=null],
    [Sky Week=List.Max(#"Grouped Rows"[Sky Week])+11, Early Life Vol=null, LOCATION=Text.Combine(List.Range(#"Grouped Rows"[LOCATION], 2, 1)),Total Vol=null, Headcount=null],
    [Sky Week=List.Max(#"Grouped Rows"[Sky Week])+12, Early Life Vol=null, LOCATION=Text.Combine(List.Range(#"Grouped Rows"[LOCATION], 2, 1)),Total Vol=null, Headcount=null]
    })

如您所见,这很笨拙而且可能非常慢。我需要为每个站点换行。问题是,我不想每次出现新位置时都必须继续添加这些,如果可能的话,我希望它只显示过去 12 周内有数据的网站。几周后,将没有数据,因此 - 该网站将不会显示。

我试过 list.generate,但我终究无法理解它。我在 DAX 中拥有的实际预测部分运行良好,它只是生成我正在努力解决的基础周和位置。任何帮助将不胜感激。

生成您想要的所有行,然后将您的数据加入其中可能更容易。

您可以在交叉连接过程中生成新的 table 添加列表列然后像这样扩展它们:

let
    YearTable = Table.FromColumns({{2019,2020}}, {"Year"}),
    #"Added Weeks" = Table.AddColumn(YearTable, "Week", each {1..52}),
    #"Expanded Week" = Table.ExpandListColumn(#"Added Weeks", "Week"),
    #"Define Sky Week" = Table.AddColumn(#"Expanded Week", "Sky Week", each 100 * [Year] + [Week]),
    #"Added Locations" = Table.AddColumn(#"Define Sky Week", "LOCATION", each {"Dunfermline", "Leeds", "Livingston", "Newcastle", "Sheffield", "Stockport"}),
    #"Expanded Location" = Table.ExpandListColumn(#"Added Locations", "LOCATION")
in
    #"Expanded Location"

这给出了每年每周以及您指定的每个位置的完整列表。

然后您可以在 Sky Week 和 LOCATION 列上进行合并查询和匹配(通过将 Ctrl 按住 select 不止一次)并使用左外连接将 Total Vol 带入任何位置存在于其他查询中。