【问题标题】:DAX SUM outside current context当前上下文之外的 DAX SUM
【发布时间】:2016-11-02 12:17:27
【问题描述】:

这是我当前的数据模型 -> part of data model

我在创建度量时需要帮助。

我要创建的度量应该显示在某个时间间隔内航行的船舶的总容量,并且能够根据房间类型查看总容量。

我有兴趣获得 DAX 等效项:

SELECT SUM(sc.capacity)
FROM Reporting.Trips t
    JOIN Reporting.Dates d ON d.DateId = t.DateId
    JOIN Reporting.ShipCapacities sc on sc.ShipId = t.ShipId
WHERE d.FiscalYear= 2017 AND d.FiscalWeek=15

OR 每个类型

SELECT SUM(sc.capacity)
FROM Reporting.Trips t
    JOIN Reporting.Dates d ON d.DateId = t.DateId
    JOIN Reporting.ShipCapacities sc on sc.ShipId = t.ShipId
WHERE d.FiscalYear= 2017 AND d.FiscalWeek=15 and sc.CabinTypeId = 11

我尝试以这种方式定义度量:

Total Rooms:=CALCULATE ( SUM ( 'Ship Capacities'[Ship Capacity] ) )

我已经看到这会输出 T-SQL 等价物:

SELECT SUM(Capacity)
FROM 
(
SELECT DISTINCT sc.*
FROM Reporting.Trips t
    JOIN Reporting.Dates d ON d.DateId = t.DateId
    JOIN Reporting.ShipCapacities sc on sc.ShipId = t.ShipId
WHERE d.FiscalYear= 2017 AND d.FiscalWeek=15
) x

OR 每个类型

SELECT SUM(Capacity)
FROM 
(
SELECT DISTINCT sc.*
FROM Reporting.Trips t
    JOIN Reporting.Dates d ON d.DateId = t.DateId
    JOIN Reporting.ShipCapacities sc on sc.ShipId = t.ShipId
WHERE d.FiscalYear= 2017 AND d.FiscalWeek=15 and sc.CabinTypeId = 11
) x

这些是查询结果->Query results

谢谢。

【问题讨论】:

  • 您确定这是您尝试的措施的结果吗?除非您使用显式过滤器,否则它似乎不会过滤 Year 和 FiscalWeek。是这个问题吗?
  • 是的,我比较了这些值。我正在使用显式过滤器。我有一个参数表,其中有一个表格,包含在模型中。这会以这种方式过滤度量:Dates[Fiscal Year]=VALUES(Parameters[Current Fiscal Year]), Dates[Fiscal Week]=VALUES(Parameters[Current Fiscal Week])。
  • 我猜在多对多关系的情况下这对 DAX 来说是个问题。从 Trips 到 Ships 存在多对一的关系。从船舶到船舶容量存在一对多的关系。我正在寻找一种方法来使用我想要的计算,而不是像 DAX 目前那样。
  • 您的预期结果是什么?你能添加示例数据吗?
  • 我添加了一个带有查询结果的打印屏幕(在帖子的末尾)。

标签: sql dax


【解决方案1】:

这是对我有用的最终措施:

Total Rooms:=CALCULATE (
    SUMX (
        'Ship Capacities',
        'Ship Capacities'[Ship Capacity]
            * COUNTROWS ( FILTER ( Trips, AND( Trips[Sailed] = TRUE (),Trips[ShipId] = 'Ship Capacities'[ShipId] ) ))
    )
)

注意 COUNTROWS。 在多对一的情况下,然后是一对多的关系,它没有迭代(但以前我使用 SUM 而不是 SUMX)。 我发现我不得不提到多对多表之间的关系是不寻常的。 否则它不起作用。

【讨论】:

    猜你喜欢
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 2011-01-26
    • 2014-04-27
    相关资源
    最近更新 更多