excel Power BI如何过滤和更改时间数据行

jmo0nnb3  于 2023-05-30  发布在  其他
关注(0)|答案(2)|浏览(126)

上周我从内部系统导出表到Power BI(大约20,000行)。该表包含输入的工作输入列表(工人当时所做的记录)。大多数工人都有类似的投入,即。进入(Prichod)、开始工作(JOBID)和离开现场(Odchod)。
https://postimg.cc/Xp4z2h5L
工人也可以并行工作(绿色),其中的记录有相同的时间和工作结束。唯一的区别是工作时间(它们共同构成工作开始和结束之间的时间差)和并行参数。然而,第二个系统不能像这样导入数据并将这些输入作为副本处理。
我想根据TimeOfWork重新计算并行行时间,但我无法正确创建条件和过滤器。有人能帮帮我吗
行应该像这样编辑(橙子)
https://postimg.cc/FdmhDpVL
数据必须在电力双,我不能编辑的输入或输出的系统。一条记录可以有两个以上的并行作业。
谢谢。
我尝试了DAX函数,如早期,但无法过滤数据。

pjngdqdw

pjngdqdw1#

我在DAX(在Power Query中创建了新索引)中这样做了,并添加了新的列,将数据分隔为组并对TimeOfJob求和。

TimeOfWork = 

enter code here`var CurrentDate = 'Time registration'[CorrectedStartDate]
var Employee = 'Time registration'[WorkerPersonnelNumber]
var CurrentRow = 'Time registration'[Index]
var WorkParalel = 'Time registration'[TimeAllocationType]
var StartTime = 'Time registration'[CorrectedStartTime_T]

var NewFilteredTable = FILTER('Time registration',
'Time registration'[WorkerPersonnelNumber] = Employee &&
'Time registration'[CorrectedStartDate] = CurrentDate &&
'Time registration'[CorrectedStartTime_T] = StartTime &&
'Time registration'[TimeAllocationType] = "Bundle1")

return (CALCULATE(SUM('Time registration'[CorrectedTimeOfJob]), FILTER(NewFilteredTable,'Time registration'[Index]<=CurrentRow)))

我创建了新的计算列CadEndDate,我在其中使用:

CaEndDate = StartDate + TimeStart + TimeOfWork

然后我创建了第二列CaStartDate,在那里我写道:

CaStartDate = CalculatedEndDate - TimeOfWork

谢谢你帮我

pokxtpni

pokxtpni2#

你可以做的是在power query中基于一个组生成一个索引:

let
    Source = ....,
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Worker", Int64.Type}, {"Status", type text}, {"DateStart", type date}, {"TimeStart", type time}, {"DateEnd", type date}, {"TimeEnd", type time}, {"TimeOfJob", type time}, {"Paralel", type text}}),
    Partitions = Table.Group(
        #"Changed Type",
        {"Worker", "Status"}, {"Partition", each _}
    )[Partition],
    AddedOrderKeys = List.Transform(
        Partitions,
        each Table.AddIndexColumn(
            Table.Sort(_, {"Worker"}),
            "Order Key Within Partition",
            1
        )
    ),
    Result = Table.Combine(AddedOrderKeys),
    #"Changed Type1" = Table.TransformColumnTypes(Result,{{"Order Key Within Partition", Int64.Type}})
in
    #"Changed Type1"

一旦你的索引准备好了,你就可以创建你的计算列了:

CalculatedTimeStart = IF(AND('Table'[Paralel] = "Yes",'Table'[Order Key Within Partition] = 2), 'Table'[TimeEnd] - 'Table'[TimeOfJob],'Table'[TimeStart])
CalculatedTimeEnd = IF(AND('Table'[Paralel] = "Yes",'Table'[Order Key Within Partition] = 1), 'Table'[TimeStart] + 'Table'[TimeOfJob],'Table'[TimeEnd])

相关问题