【问题标题】:Calculated columns bases on the past 3 months in Power queryPower 查询中基于过去 3 个月的计算列
【发布时间】:2021-03-26 12:58:44
【问题描述】:

第一次尝试在电源查询中使用 M...我拥有的是这张表

我需要创建两列,每行(CD_Loja x CD_Produto 的组合)返回该组合的 QT_VENDA 总和除以过去 3 个月的天数。另一列几乎相同,但用 VL_VENDA_LIQ 的总和代替。

即:对于第一行,我想总结过去 3 个月内匹配 CD_PRODUTO =1001930 AND CD_LOJA = 151 的所有 QT_VENDA(DATE 列有每日数据),然后除以这 3 个月的天数.

有没有办法做到这一点?我该怎么做呢?

提前致谢。

【问题讨论】:

  • “过去3个月”的定义是什么?过去 90 天?根据我要比较的月份名称——(六月在六月+五月+四月拉出所有之前的日子,或者六月在五月+四月+三月拉出所有之前的日子?
  • 过去 3 个月就像今天() - 90 天

标签: powerbi powerquery m


【解决方案1】:

在 powerquery 中,M 类似这样的东西

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.Buffer(Table.TransformColumnTypes(Source,{{"DATA", type date}, {"CD_PRODUCTO", type text}, {"CD_LOIA", type text}, {"QT_VENDA", Int64.Type}, {"VL_VENDA_LIQ", Int64.Type}})),
#"Added Custom" = Table.AddColumn(#"Changed Type" ,"QT_VENDA_90",(i)=>List.Average(Table.SelectRows(#"Changed Type" , each [CD_PRODUCTO]=i[CD_PRODUCTO] and [CD_LOIA]=i[CD_LOIA] and [DATA] <= i[DATA] and [DATA] >= Date.AddDays(i[DATA] ,-90)) [QT_VENDA]), type number),
#"Added Custom2" = Table.AddColumn(#"Added Custom" ,"VL_VENDA_LIQ_90",(i)=>List.Average(Table.SelectRows(#"Changed Type" , each [CD_PRODUCTO]=i[CD_PRODUCTO] and [CD_LOIA]=i[CD_LOIA] and [DATA] <= i[DATA] and [DATA] >= Date.AddDays(i[DATA] ,-90)) [VL_VENDA_LIQ]), type number)
in #"Added Custom2"

【讨论】:

  • 去看看试试看
  • 适应了我的表格,但右下角的文件大小不断增加,查询永远不会完成,所有文件现在都超过 1 Gb(最初源文件有 200 mb)
  • 好吧,它正在做无数的计算.. 对于每一行,它必须过滤所有其他行并挑选出最近的 90 行,也就是说,除非出现问题,否则它不会添加行。尝试样本数据集?或者在 powerbi 中,类似 community.powerbi.com/t5/Desktop/… 的度量
  • 添加了 Table.Buffer 看看是否有帮助
  • 我的错,完全是青蛙,是的,它奏效了!谢谢
【解决方案2】:

您可以尝试如下测量-

your_expected_value = 

var current_row_data = MIN(your_table_name[DATA]) 
--I Guess the column name should be Date instead
var current_row_data_minus_90_day = MIN(your_table_name[DATA]) - 90 
var current_row_cd_produto = MIN(your_table_name[CD_PRODUTO])
var current_row_cd_loja = MIN(your_table_name[CD_LOJA])

RETURN
CALCULATE(
    SUM(your_table_name[QT_VENDA]),
    FILTER(
        ALL(your_table_name),
        your_table_name[DATA] >= current_row_data_minus_90_day 
        && your_table_name[DATA] <= current_row_data
        && your_table_name[CD_PRODUTO] = current_row_cd_produto
        && your_table_name[CD_LOJA] = current_row_cd_loja
    )
)/90

--Here 90 used for static 3 month consideration

【讨论】:

  • 如果你没有一年中每一天的数据,我认为这不起作用,因为它总是除以 90 而不是除以计数
  • 得到的只是空白,试图弄清楚......
  • @TallesLessa 有任何错误吗?请显示您得到的最终输出。
猜你喜欢
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-15
相关资源
最近更新 更多