【问题标题】:PowerQuery - Forecast from tablePowerQuery - 从表中预测
【发布时间】:2021-08-30 21:23:38
【问题描述】:

我正在尝试为各部门创建一个预测(单个表),以便在单个表中输入他们对支出的假设。我希望用户输入每个类别的金额、频率、开始日期和结束日期,而不是输入每个月的金额。为了说明,请参见下表中的一些示例数据。

这是我试图获得的 Power Query(或 Power BI)中的结果,这是我对在与实际值进行比较时如何能够在 Power BI 模型中运行日期切片器和筛选器的理解。

如果这不能用 DAX 完成,而必须在 excel 中完成(通过查找公式),您将如何构建公式?

【问题讨论】:

  • 欣赏屏幕截图-但需要提供更多详细信息,确切地说您的 Q 是什么-您指定用户应该输入的内容,很好,并显示示例数据,也很好,您需要哪些部分的帮助(用这些输入重新创建你的表?)。 Power Query 信息对此有何价值/目的?有必要/我必须担心吗?在 excel 中尝试一些公式的示例解决方案会很棒。还有一个好处是使用表格格式指南重新创建表格,以腾出时间再次输入屏幕截图中的所有内容。
  • 你可以用电源查询M代码来做到这一点。
  • 感谢@RonRosenfeld 的提醒。作为一个有一定经验为excel编写VBA代码的非开发人员,你有什么推荐的功能吗?每一行的过程如下: 1. 对于每一行,将值绘制成一个矩阵(类似于第二个屏幕截图),其中每个月的支出金额将下降。 2. 如果没有结束日期,则假设结束日期为今天的日期 + 5 年。将此日期转换为月末。 (这样,我们预测了 5 年) 3.如果支出发生在每季度或每月或每半年发生一次,则每隔 n 个值绘制每月值图
  • 在 Power Query 中,我将创建一个列,其中包含每行的适用日期列表;然后将该列展开为新行并在其上进行透视。
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: excel excel-formula powerbi dax forecasting


【解决方案1】:

这是一个 PQ 示例,它根据您作为输入显示的内容创建您显示为所需表格的内容:

使用 Power Query

  • 选择数据表中的某个单元格
  • Data => Get&Transform => from Table/Range
  • 当 PQ 编辑器打开时:Home => Advanced Editor
  • 记下第 2 行中的表 Name
  • 粘贴下面的 M 代码代替您看到的内容
  • 将第 2 行中的表名称更改回最初生成的名称。
  • 阅读 cmets 并探索 Applied Steps 以更好地理解算法

M 码

let
    Source = Excel.CurrentWorkbook(){[Name="Table9"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"G/L", Int64.Type}, {"Dimension", type text}, {"Description", type text}, 
        {"Amount", Int64.Type}, {"Repeat Every", type text}, {"Start Date", type date}, {"End Date", type date}}),

//Last possible date as Today + 5 years (to end of month)
    lastDt = Date.EndOfMonth(Date.AddYears(Date.From(DateTime.FixedLocalNow()),5)),

//Generate list of all possible dates for a given row using List.Generate function
    allDates = Table.AddColumn(#"Changed Type", "allDates", each let 
            lastDate = List.Min({lastDt,[End Date]}),
            intvl = {1,3,6}{List.PositionOf({"Monthly","Quarterly","Semi Annual"},[Repeat Every])}
        in 
            List.Generate(
                ()=> [Start Date],
                each _ <= lastDate,
                each Date.EndOfMonth(Date.AddMonths(_,intvl)))),

//Remove unneeded columns and expand the list of dates
    #"Removed Columns" = Table.RemoveColumns(allDates,{"Repeat Every", "Start Date", "End Date"}),
    #"Expanded allDates" = Table.ExpandListColumn(#"Removed Columns", "allDates"),

//Sort to get desired output
//  Date column MUST be sorted to ensure correct order when pivoted
//  Other columns sorted alphanumerically, but could change the sort to reflect original order if preferred.
    #"Sorted Rows" = Table.Sort(#"Expanded allDates",{
        {"allDates", Order.Ascending}, 
        {"G/L", Order.Ascending}, 
        {"Dimension", Order.Ascending}}),

//Pivot the date column with no aggregation
    #"Pivoted Column" = Table.Pivot(
            Table.TransformColumnTypes(#"Sorted Rows", {
                {"allDates", type text}}, "en-US"), 
            List.Distinct(Table.TransformColumnTypes(#"Sorted Rows", {{"allDates", type text}}, "en-US")[allDates]), 
                "allDates", "Amount")
in
    #"Pivoted Column"

原始数据

结果

【讨论】:

  • 优秀!!!谢谢你罗恩。我很困惑我怎么没早点入住。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多