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 用于多个事务的SUMX()中的DAX-TOPN()_Powerbi_Dax_Calculated Columns - Fatal编程技术网

Powerbi 用于多个事务的SUMX()中的DAX-TOPN()

Powerbi 用于多个事务的SUMX()中的DAX-TOPN(),powerbi,dax,calculated-columns,Powerbi,Dax,Calculated Columns,我需要你的帮助 我试图制作一个计算列,对每种产品的前两个日期的销售额进行合计(并非所有日期都有销售额!) 我已尝试使用计算: CALCULATE ( SUMX ( TOPN ( 2; 'Table'; 'Table'[date_ID] ); 'Table'[Sale] ); ALLEXCEPT ( Table; 'Table'[Product_ID] ) ) Calculated Column 1 = VAR SumProd = CALCULATE (

我需要你的帮助

我试图制作一个计算列,对每种产品的前两个日期的销售额进行合计(并非所有日期都有销售额!)

我已尝试使用计算:

CALCULATE (
    SUMX ( TOPN ( 2; 'Table'; 'Table'[date_ID] ); 'Table'[Sale] );
    ALLEXCEPT ( Table; 'Table'[Product_ID] )
)
Calculated Column 1 =
VAR SumProd =
    CALCULATE (
        SUMX ( Table; Table[Sale] );
        ALLEXCEPT ( Table; Table[Date]; Table[Product_ID] )
    )
RETURN
    CALCULATE (
        SUMX ( TOPN ( 2; 'Table'; 'Table'[Date] ); SumProd );
        ALLEXCEPT ( Table; Table[Product_ID]; Table[Date] )
    )
但这只适用于每个产品ID每个日期有一次销售的情况

如果每个日期和产品ID有许多事务,我该怎么办

下面我有一个表格,其中我(过滤)了一个日期和一个产品

现在,我已经创建了一个计算列,它对每个日期和产品ID的所有事务进行汇总(供参考)。 这是

Calculated Column 2 =
CALCULATE (
    SUMX ( Table; Table[Sale] );
    ALLEXCEPT ( Table; 'Table'[Date]; 'Table'[Product_ID] )
)

现在是困难的部分。 如果我想对每个产品的最后两个日期的交易进行合计,我已经进行了以下计算:

CALCULATE (
    SUMX ( TOPN ( 2; 'Table'; 'Table'[date_ID] ); 'Table'[Sale] );
    ALLEXCEPT ( Table; 'Table'[Product_ID] )
)
Calculated Column 1 =
VAR SumProd =
    CALCULATE (
        SUMX ( Table; Table[Sale] );
        ALLEXCEPT ( Table; Table[Date]; Table[Product_ID] )
    )
RETURN
    CALCULATE (
        SUMX ( TOPN ( 2; 'Table'; 'Table'[Date] ); SumProd );
        ALLEXCEPT ( Table; Table[Product_ID]; Table[Date] )
    )

问题是:

  • 计算将每个类别中的所有值相加
  • 示例:在表中,您可以看到
    “计算列1”=7571200
    ,这是27040*交易数量?我只想要27040的值

  • 由于某种原因,TOPN()不起作用。如果我将
    N_值=2
    更改为
    N_值=3
    ,计算不会更改吗 请问,有人知道我的计算有什么问题吗

    谢谢

    比尔,
    Jakob

    在您的度量中,
    SumProd
    是一个常数,您要对表中的每一行求和。这不是你想要的

    我建议采取类似的措施:

    Calculated Column 1 =
    VAR LastTwoDates =
        CALCULATETABLE (
            VALUES ( Table[Date] );
            TOPN ( 2; ALLEXCEPT ( Table; Table[Product_ID] ); Table[Date] )
        )
    RETURN
        CALCULATE (
            SUM ( Table[Sale] );
            ALLEXCEPT ( Table; Table[Product_ID] );
            Table[Date] IN LastTwoDates
        )
    
    在本文中,我们首先计算与
    Product\u ID
    关联的前两个日期的列表,并将其存储为变量。然后,我们在计算
    Sale
    之和时将其用作过滤器


    我不确定这种确切的语法是否有效,但我希望它能为您指明更好的方向


    结果是我的代码没有完全按照预期工作。请尝试以下方法:

    Calculated Column 1 =
    VAR ProductDates =
        CALCULATETABLE (
            VALUES ( Table1[Date] );
            ALLEXCEPT ( Table1; Table1[Product_ID] )
        )
    VAR LastTwoDates = TOPN ( 2; ProductDates; [Date] )
    RETURN
        CALCULATE (
            SUM ( Table1[Sale] );
            ALLEXCEPT ( Table1; Table1[Product_ID] );
            Table1[Date] IN LastTwoDates
        )
    

    在您的度量中,
    SumProd
    是一个常数,您要对表中的每一行求和。这不是你想要的

    我建议采取类似的措施:

    Calculated Column 1 =
    VAR LastTwoDates =
        CALCULATETABLE (
            VALUES ( Table[Date] );
            TOPN ( 2; ALLEXCEPT ( Table; Table[Product_ID] ); Table[Date] )
        )
    RETURN
        CALCULATE (
            SUM ( Table[Sale] );
            ALLEXCEPT ( Table; Table[Product_ID] );
            Table[Date] IN LastTwoDates
        )
    
    在本文中,我们首先计算与
    Product\u ID
    关联的前两个日期的列表,并将其存储为变量。然后,我们在计算
    Sale
    之和时将其用作过滤器


    我不确定这种确切的语法是否有效,但我希望它能为您指明更好的方向


    结果是我的代码没有完全按照预期工作。请尝试以下方法:

    Calculated Column 1 =
    VAR ProductDates =
        CALCULATETABLE (
            VALUES ( Table1[Date] );
            ALLEXCEPT ( Table1; Table1[Product_ID] )
        )
    VAR LastTwoDates = TOPN ( 2; ProductDates; [Date] )
    RETURN
        CALCULATE (
            SUM ( Table1[Sale] );
            ALLEXCEPT ( Table1; Table1[Product_ID] );
            Table1[Date] IN LastTwoDates
        )
    

    感谢Alexis,它看起来很棒,但我一直在为变量获取此错误,我无法找出错误的地方:“表达式引用了多列。多列无法转换为标量值”。看起来它希望在第三个
    TOPN
    参数中使用值而不是列。请试试我的编辑,亚历克西斯!谢谢。它完全符合我的要求。非常感谢您的解决方案。祝你周末愉快。谢谢Alexis,它看起来很棒,但我一直收到变量的这个错误,我不知道它出了什么问题:“表达式引用了多列。多列不能转换为标量值”。看起来它需要的是一个值,而不是第三个
    TOPN
    参数中的一列。请试试我的编辑,亚历克西斯!谢谢。它完全符合我的要求。非常感谢您的解决方案。有一个愉快的周末。