具有多种条件的复杂关系

时间:2019-11-14 06:04:11

标签: powerbi powerbi-desktop ssas-tabular

我有两个表ProductSales。两个表之间的relationship如下所示(在Sql中)

Select *from Product P
Inner Join Sales S
On S.SalesProductID = P.ProductID
and P.TransactionDate Between S.SalesValidFromDate and S.ValidToDate

Modelling表中的Power BI/SSAS表中,我们如何指定这些表之间的上述关系。我在提供的“关系”选项中找不到任何写条件/表达式的选项。任何建议,不胜感激。 (我遇到过calculated tables是实现这种情况的唯一方法吗?)

2 个答案:

答案 0 :(得分:1)

如评论中所述,您将无法在Power BI模型窗格中定义该关系。您可以通过以下方式创建计算表:

join_table =
FILTER (
    CROSSJOIN ( 'Product'; Sales );
    'Product'[Prod_ID_p] = Sales[Prod_Id] 
        && 'Product'[Trans_Date] >= Sales[Sales_Valid_From]
        && 'Product'[Trans_Date] < Sales[Sales_Valid_To]
)

CROSSJOIN将抱怨两个表中是否存在相同名称的列,为什么将其重命名为Prod_ID_p

答案 1 :(得分:1)

这是另一种方法。

不需要计算表。使用ProductID在“产品”和“销售”之间创建关系,并定义一种度量以在有效期内汇总“销售”。

Product Sales =
SUMX(
    'Product',
    CALCULATE(
        [Total Sales],
        Sales[SalesValidFromDate] <= 'Product'[TransactionDate]
          && Sales[SalesValidToDate] >= 'Product'[TransactionDate]
    )
)