【问题标题】:DAX - summarize by averaged columnDAX - 按平均列汇总
【发布时间】:2021-01-14 12:33:15
【问题描述】:

我是 DAX 新手,正在苦恼如何使用 DAX 按计算列进行汇总。
在下面的数据集中,如何使用 DAX 按价格点计算平均销售额?

限制是我不能在我的数据库中添加price 列(值/单位)。 因此,我需要在一个 DAX 查询中同时计算 pricesales by price

Week Value Unit
W1 3000 3
W2 1500 1
W3 500 1
W4 1500 1
W5 2000 2

结果应该是这样的:

Price Avg Value Sales
500 500
1000 2500
1500 1500

【问题讨论】:

    标签: dax


    【解决方案1】:

    由于您没有价格列,因此无法在行上创建包含价格的矩阵视觉对象,因为列不能使用度量。但是你可以像这样实现一个计算表

    Result = 
    VAR Tab =
        ADDCOLUMNS ( Prices, "Price", Prices[Value] / Prices[Unit] )
    VAR Res =
        ADDCOLUMNS (
            Tab,
            "Avg",
                VAR CurPrice = [Price]
                RETURN
                    AVERAGEX ( FILTER ( Tab, [Price] = CurPrice ), Prices[Value] )
        )
    RETURN
        DISTINCT ( SELECTCOLUMNS ( Res, "Price", [Price], "Avg", [Avg] ) )
    

    首先,我们从源表中声明一个表变量(我称之为“价格”),添加价格列,然后我们迭代这个表变量,使用AVERAGEX 在同一个表变量上添加“平均”列“价格”。最后我们返回 Price 和 Avg 两列的DISTINCT

    编辑:
    可以通过添加变量来减少行数以获得不同的价格

    Result1 = 
    VAR Tab =
        ADDCOLUMNS ( Prices, "Price", Prices[Value] / Prices[Unit] )
    VAR DistinctPrices = DISTINCT( SELECTCOLUMNS( Tab, "Price", [Price] ) )
    VAR Res =
        ADDCOLUMNS (
            DistinctPrices,
            "Avg",
                VAR CurPrice = [Price]
                RETURN
                    AVERAGEX ( FILTER ( Tab, [Price] = CurPrice ), Prices[Value] )
        )
    RETURN
        DISTINCT ( SELECTCOLUMNS ( Res, "Price", [Price], "Avg", [Avg] ) )
    

    【讨论】:

    • 一个问题:有没有更高效的查询?据我了解,您的回答对重复行的平均销售额进行了冗余计算。由于我的数据集有超过数百万条记录,因此查询执行时间过长...
    • 恐怕更高效的解决方案需要添加价格列或在模型中创建计算表。如果这是在导入的模型中,则可以在不接触原始表格的情况下完成。
    • 其实我错了,有一个可能的优化可以减少冗余而不需要添加计算列
    猜你喜欢
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多