创建基于上下文 SSAS 表格 DAX 更改值的计算列(非聚合)

Creating a calculated column (not aggregate) that changes value based on context SSAS tabular DAX

数据: 我有一行代表产品的年度订阅,它有一个整体开始日期和结束日期,还有第三个日期,即开始日期 + 1 个月称为 endDateNew。我还有一个不相关的日期 table(称为 table X)。

我正在寻找的输出: 我需要一个名为 Categorization 的新列,如果 table 中选择的日期,它将 return 'New' ] X 在 startDate 和 endDateNew 之间,'Existing' 如果日期在 startDate 和 endDate 之间。

问题: 该列似乎立即评估而不考虑非相关日期的日期上下文 table - 我有点希望这会发生在visual studio(假设上下文是所有记录?)但是在 Excel 中预览时,它会通过相同的值。

working:I 位有一个聚合(活跃订阅者计数),可以正确地将订阅计算为在 Table X 中选择的月份内活跃。

单个日期的 SQL 等价物:

case 
 when '2015-10-01' between startDate and endDateNew then 'New'
 when '2015-10-01' < endDate then 'Existing'
end as Category

其中将为 table X

中的每个日期计算值

谢谢!

罗斯

计算列仅在模型 refresh/process 时计算。这是设计使然。无法根据 table.

中过滤器上下文的 运行 时间变化来更改计算列

罗斯,

计算列的工作方式与 Excel 不同。最理想的情况是,当记录首次添加到模型时,该值是已知的。 您的示例有点类似于缓慢变化的维度。

有几种可能的解决方案。这里有两个半:

每次处理订阅时,对过去 32 天的数据进行完整处理table(这可能效率低得令人无法接受)。

使用来自订阅 table 的主键和 'Subscription Age in Days' 的单个计算列创建一个新的 table 'Subscription scd'。就像支腿一样。与重新处理订阅 table 相比,重新处理此 table 更有效,因此仅将订阅 table 作为增量处理,并对 table 中的数据进行完整处理过去 32 天。

确定在 'new/existing' 上下文中哪些度量是有趣的,并在度量中的日期列上使用动态过滤器为它们编写明确的度量

例如。定义

'Sum of Sales - New Subscriptions',
'Sum of Sales - Existing Subscriptions', 
'Distinct Count of New Subscriptions - Last 28 Days', etc