Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerbi 以另一列的多个值为条件的列之和_Powerbi - Fatal编程技术网

Powerbi 以另一列的多个值为条件的列之和

Powerbi 以另一列的多个值为条件的列之和,powerbi,Powerbi,我正在努力完成一些事情,但不知道如何去做 我有一个维度(称为TEntry的表),表示员工的时间条目,如下所示: Id | EmployeeId | EntryDT | TimeInMinutes | PriceAgreementId ------ | ---------- | ---------- | ------------- | ---------------- 1 | 1 | 2017-03-20 | 100 | 1 2

我正在努力完成一些事情,但不知道如何去做

我有一个维度(称为TEntry的表),表示员工的时间条目,如下所示:

    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
我需要创建两个新列来表示:

  • 员工处理所有价格协议的总时间(分钟) 因此,对于EmployeeId#1,总数将为100
  • 所有员工工作的总时间(分钟),但仅限于当前员工(当前行)工作的价格协议
  • 该表如下所示(括号中没有PriceAgreementId):

    专栏“价格协议上的时间分钟数”很简单,但另一个,我找不到解决方案

    我启动了这个DAX表达式,但它不完整:

    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 ()
      )
    )