【问题标题】:Creating a calculated column (not aggregate) that changes value based on context SSAS tabular DAX创建基于上下文 SSAS 表格 DAX 更改值的计算列(非聚合)
【发布时间】:2015-12-10 12:26:53
【问题描述】:

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

我正在寻找的输出:如果表 X 中选择的日期在 startDate 和 endDateNew 之间,我需要一个名为 Categorization 的新列,如果日期是在 startDate 和 endDate 之间。

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

起作用的一点是:我有一个聚合(活跃订阅者计数),可以正确地将订阅计数为在表 X 中选择的月份内是活跃的。

单个日期的 SQL 等效项:

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

将为表 X 中的每个日期计算值

谢谢!

罗斯

【问题讨论】:

    标签: ssas dax ssas-tabular


    【解决方案1】:

    计算的列仅在模型刷新/处理时进行评估。这是设计使然。无法根据数据透视表中筛选器上下文的运行时更改来更改计算列。

    【讨论】:

      【解决方案2】:

      罗斯,

      计算列的工作方式与 Excel 不同。当记录第一次添加到模型中时,最好知道该值。 你的例子有点类似于一个缓慢变化的维度。

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

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

      使用订阅表中的主键和“订阅天数”的单个计算列创建一个新表“订阅 scd”。就像一个支腿。与重新处理订阅表相比,重新处理此表可能更有效,因此仅将订阅表作为增量处理,并在此表上对过去 32 天内的数据执行完整处理。

      确定在“新/现有”上下文中哪些度量是有趣的,并使用度量中日期列上的动态过滤器为它们编写显式度量

      例如。定义

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-14
        • 1970-01-01
        • 2017-06-15
        • 2019-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-18
        相关资源
        最近更新 更多