【问题标题】:how to create a DAX measure / power query process / which returns a value from another row, which has the same date & time如何创建 DAX 度量/功率查询过程/从具有相同日期和时间的另一行返回值
【发布时间】:2021-11-20 07:33:12
【问题描述】:

请在下面找到事实表和所有表概述的链接。我想在 Fact 表(“事务”)中创建 DAX 度量或新列,其中:

  • 货币不等于欧元(例如“BTC”),
  • 给出的值等于“金额”的相反值,如以欧元为货币的行中给出的(例如,+5。负数为正数,反之亦然),
    • 两行(欧元和非欧元)的日期和时间具有相同的值(例如 03/11/2021 和 12:28:06)
  • “类型”=“贸易”,
  • 在所有其他情况下,我认为最好将值设为 0。

在我的事实表屏幕截图中,我在 Excel 中手动添加了 EUR_amt 列以显示我想要创建的内容

我认为也可以添加列,然后按时间和日期分组,这样将删除以 EUR 作为货币且 EUR_amt 为 0 的行。全部使用电量查询。那就更好了。

(“货币”表仅通过 PowerQuery 使用“交易”表中“货币”列的不同值。我认为与这个问题无关)

非常感谢!

-YK

事实表“交易”

表格概览

【问题讨论】:

    标签: powerbi dax powerquery


    【解决方案1】:

    计算列:

    EUR_amt =
    IF (
        OR ( transactions[type] <> "trade", transactions[currency] = "EUR" ),
        0,
        - LOOKUPVALUE (
            transactions[amount],
            transactions[Date], transactions[Date],
            transactions[Time], transactions[Time],
            transactions[currency], "EUR",
            0
        )
    )
    

    【讨论】:

      【解决方案2】:

      这是仅使用 Power Query 和高级编辑器的一种方法

      • 按数据和时间分组
      • 根据您的规则为每个子表生成自定义列
      • 展开子表,删除带有“0”的子表,并对列重新排序
      let
          Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
          #"Changed Type" = Table.TransformColumnTypes(Source,{{"type", type text}, {"currency", type text}, {"Date", type date}, {"Time", type time}, {"amount", type number}}),
      
      //Group by Date and Time
          #"Grouped Rows" = Table.Group(#"Changed Type", {"Date", "Time"}, {
      
      //Add the Eur amt column to the grouped table
              {"EUR_amt", (t)=>let 
      
      //determine relevant euro amt for each sub table
                      eur= t[amount]{List.PositionOf(t[currency],"EUR")},
      
      //add the column to each subtable basaed on conditions
                      addCol = Table.AddColumn(t, "EUR_amt", 
                          each if [type]= "trade" and [currency]<>"EUR" then -eur else 0)
                  in 
                      addCol}}),
      
      //Expand the new table
      //Filter out the 0's
      //reorder the columns
          #"Expanded EUR_amt" = Table.ExpandTableColumn(#"Grouped Rows", "EUR_amt", {"type", "currency", "amount", "EUR_amt"}, {"type", "currency", "amount", "EUR_amt"}),
          #"Filtered Rows" = Table.SelectRows(#"Expanded EUR_amt", each ([EUR_amt] <> 0)),
          #"Reordered Columns" = Table.ReorderColumns(#"Filtered Rows",{"type", "currency", "Date", "Time", "amount", "EUR_amt"})
      in
          #"Reordered Columns"
      

      【讨论】:

      • 很好的解决方案,非常感谢!老实说,它比我想象的通过 PQ 和高级编辑器要复杂得多。下面的计算列可能对用户更友好一些
      猜你喜欢
      • 1970-01-01
      • 2021-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      相关资源
      最近更新 更多