Powerbi 以另一列的多个值为条件的列之和
我正在努力完成一些事情,但不知道如何去做 我有一个维度(称为TEntry的表),表示员工的时间条目,如下所示:Powerbi 以另一列的多个值为条件的列之和,powerbi,Powerbi,我正在努力完成一些事情,但不知道如何去做 我有一个维度(称为TEntry的表),表示员工的时间条目,如下所示: Id | EmployeeId | EntryDT | TimeInMinutes | PriceAgreementId ------ | ---------- | ---------- | ------------- | ---------------- 1 | 1 | 2017-03-20 | 100 | 1 2
Id | EmployeeId | EntryDT | TimeInMinutes | PriceAgreementId
------ | ---------- | ---------- | ------------- | ----------------
1 | 1 | 2017-03-20 | 100 | 1
2 | 1 | 2017-03-31 | 50 | null
3 | 2 | 2017-03-21 | 100 | 1
4 | 2 | 2017-03-23 | 125 | 2
5 | 3 | 2017-03-15 | 90 | null
6 | 3 | 2017-03-25 | 60 | 1
有时他们会制定“价格协议”,有时则不会
在我的仪表板中,我有一个表,它按EmployeeId将表TEntry分组,并以分钟为单位计算时间。我还有一个EntryDT切片器:
EmployeeId | TimeInMinutes
-------------- | -------------
1 | 150
2 | 225
3 | 150
我需要创建两个新列来表示:
CALCULATE(SUM(TEntry[TimeInMinutes]), NOT ISBLANK(TEntry[PriceAgreementId]), ALL(TEmployee))
Temploye是链接到主TEntry表的维度
任何帮助都将不胜感激。
谢谢你我将此作为回答,因为(a)这可能会让你(或其他人)朝着正确的方向前进,(b)如果保证一名员工只会有对应于两个价格协议的时间条目,这将起作用-这对你来说不太可能,但对于其他试图完成类似任务的人来说可能也是如此
Measure =
CALCULATE (
SUM ( TEntry[TimeInMinutes] ),
FILTER (
ALL ( TEntry ),
(
TEntry[PriceAgreementID] = MIN ( TEntry[PriceAgreementID] )
|| TEntry[PriceAgreementID] = MAX ( TEntry[PriceAgreementID] )
)
&& TEntry[PriceAgreementID] <> BLANK ()
)
)
度量=
算计(
总和(十分之一[TimeInMinutes]),
滤器(
全部(十日),
(
TEntry[PriceAgreementID]=MIN(TEntry[PriceAgreementID])
||TEntry[PriceAgreementID]=最大值(TEntry[PriceAgreementID])
)
&&十分之一[PriceAgreementID]空白()
)
)
此度量表示:将第十个表中所有记录的时间(以分钟为单位)相加,其中PriceAgreementID与最小或最大PriceAgreementID(在当前行的上下文中)匹配,并且PriceAgreementID不为空
此答案中的致命缺陷在于ID为2的员工的最小值和最大值,他们有两个PriceAgreementID(1和2)-最小值将计算PriceAgreementID为1的分钟数,最大值将计算PriceAgreementID为2的分钟数。然而,要扩展到一个可能有两个以上价格协议的情况……我不知道如何做到这一点
不过,它确实适用于您问题中的示例数据(因为每个员工最多有2个价格协议):
通常,当我面临这样一个不容易解决的问题时,我会考虑我的数据模型,并确保它尽可能符合星型模式
在您的案例中,员工可以有多个价格协议,并且价格协议可以与多个员工关联。对我来说,这意味着一种多对多的关系。我强烈建议阅读更多关于多对多关系的内容,以及重组基础表(例如,包括桥接表)是否有助于更接近您需要的答案
一个好的起点可能是:正如你所说,这不适用于我的情况。我是PowerBI的新手,所以我仍然从您的答案和您共享的链接中学习。所以谢谢你。至于我的问题,我最终在SQL中直接在一个表示de table TEmployee的视图中计算“Measure”列,这样就容易多了。非常感谢。
Measure =
CALCULATE (
SUM ( TEntry[TimeInMinutes] ),
FILTER (
ALL ( TEntry ),
(
TEntry[PriceAgreementID] = MIN ( TEntry[PriceAgreementID] )
|| TEntry[PriceAgreementID] = MAX ( TEntry[PriceAgreementID] )
)
&& TEntry[PriceAgreementID] <> BLANK ()
)
)