在使用“度量”来模拟计算列时如何使钻取正常工作

时间:2019-05-17 12:22:05

标签: powerbi dax

由于我必须以一种不寻常的方式来生成报告,因此我在钻取方面苦苦挣扎,希望大家能提供帮助。有一些解释性的背景,虽然有些深入,但是很抱歉,这是一个很难解决的问题。

假设我们正在使用WideWorldImporters,并希望显示特定发票的过期情况。在PowerBI报告中,我们可以根据发票的过期程度将其分配给存储桶,然后对金额求和,然后像这样显示数据:

很好。然后,我被要求构建报告,以便最终用户可以使用切片器设置“有效日期”,并且该报告将进行更新以反映如果当前日期实际上是生效日期,则发票的过期时间。有两个问题使这变得烦人:

  1. 计算的列仅在刷新时更新,而不是在Slicer更改值时更新
  2. 度量不能像上面的条形图一样用作视觉轴的一部分。

为解决这个问题,我创建了两个新表:

  1. 一张跨越未来90天的日期表
  2. 包含要在图表轴上显示的存储桶值的表

然后我在表#1的Date列上创建了一个切片器,并创建了一个Measure以读取过滤后的表中最早的日期:

Effective Date = IF(MIN('Effective Date'[CalendarDate]) < TODAY(), TODAY(), MIN('Effective Date'[CalendarDate]))

“发票”表上的一个度量根据“生效日期”度量来计算发票所在的存储桶(如果这可能只是可视化的轴,那真是令人惊讶……但不能:()

Effective Date Bucket = 
    var CurrentDueDate = MAX('Sales Invoices'[DueDate])

    return (
        switch(
            true(),
            datediff(CurrentDueDate, 'Effective Date'[Effective Date], day) <= 0, "0: Not Overdue",
            and(datediff(CurrentDueDate, 'Effective Date'[Effective Date], day) > 0, datediff(CurrentDueDate, 'Effective Date'[Effective Date], day) <= 30), "1: 0 - 30",
            and(datediff(CurrentDueDate, 'Effective Date'[Effective Date], day) > 30, datediff(CurrentDueDate, 'Effective Date'[Effective Date], day) <= 60), "2: 31 - 60",
            and(datediff(CurrentDueDate, 'Effective Date'[Effective Date], day) > 60, datediff(CurrentDueDate, 'Effective Date'[Effective Date], day) <= 90), "3: 61 - 90",
            and(datediff(CurrentDueDate, 'Effective Date'[Effective Date], day) > 90, datediff(CurrentDueDate, 'Effective Date'[Effective Date], day) <= 365), "4: 91 - 365",
            datediff(CurrentDueDate, 'Effective Date'[Effective Date], day) > 365, "5: 365+"
        )
    )

最后,我将表#2的“存储桶”列设置为上方视觉效果的“轴”值,并创建了一个新度量来根据所选的“生效日期”计算哪些发票属于每个存储桶:

Bucket Value = (
    var CurrentBucket = max('Debt Buckets'[Debt Bucket])

    return (
        CALCULATE(
            sum('Sales InvoiceLines'[LineAmount]),
            filter(
                ALLSELECTED('Sales Invoices'),
                'Sales Invoices'[Effective Date Bucket] = CurrentBucket
            )
        )
    )
)

这也很好;我可以使用日期切片器上的左手点更改“有效日期”度量,这将导致针对每个度量的“有效日期桶”进行更新,然后“桶值”度量刷新并更新视觉效果。都是笨蛋。

这是背景的结尾。问题是:这种方法完全突破了钻探。如果我想钻取到详细信息页面,其中列出了我选择的存储桶中的发票,那么我似乎无法在根据所选生效日期动态更新存储桶的视觉效果上实现该目标。相反,钻取仅返回所有发票,这是没有用的。

我该如何:

a)强制钻取仅取回动态更新存储桶中的发票?

b)重新执行“根据选定的生效日期更新存储桶总数”,这样我一开始就不会遇到此问题?

1 个答案:

答案 0 :(得分:0)

Whelp,我尝试通过追溯来做到这一点。相反,我将钻取替换为书签:

  1. 首先,我设置了一个新的切片器,该切片器对“追溯”页面进行了筛选,以具有在追溯正常工作时应该具有的确切值。
  2. 接下来,我为每个切片器值设置书签
  3. 最后,我在条形图中的条形上方覆盖了一个不可见的书签链接。这意味着现在无需右键单击钻取用户,而只需“单击栏”即可转到钻取页面。实际发生的是,他们单击了不可见的书签链接并被带到已过滤的页面。

不幸的副作用是,由于条形图的位置低于书签链接的z层,因此该视觉效果失去了交叉过滤功能。 C'est la vie。