代码之家  ›  专栏  ›  技术社区  ›  Stu

可重用地将PowerBI中的持续时间格式化为hh:mm:ss

  •  0
  • Stu  · 技术社区  · 3 年前

    这些数据库中的事实表可能会有点僵硬(1000000000行),所以我在中间使用AnalysisServices表格——允许我主要用受控刷新来定义分区。SQL服务器可以 直接受到报告的打击,他们 需要所有这些行,并且报告可以

    我需要显示的大约90%的值是持续时间,它们在基本表中定义为整秒或毫秒。

    PowerBI不支持持续时间类型(如果你问我的话,这是一个巨大的WTF),但向包含持续时间值(以秒为单位)的表中添加度量值并使用DAX:

    var duration = Sum/Average/Min/Max([SOMEFIELD])
    var hours = Int(duration / 60)
    var minutes = Int(Mod(duration - (hours * 60), 60) / 3600)
    var seconds = RoundUp(Mod(Mod(duration - (hours * 60), 60), 3600), 0)
    var h = If(hours > 9, "" & hours, Right("0" & hours, 2))
    var m = Right("0" & minutes, 2)
    var s = Right("0" & seconds, 2)
    return If(IsBlank(duration), Blank(), h & ":" & m & ":" & s
    

    将此公式作为度量值添加到PowerBI中时效果良好。

    但是,对于150多份报告,我们每个报告讨论3-11次。正如你们中的一些人可能已经注意到的那样,DAX中的一些有点僵硬,我肯定会在某个时候重温它——但不是800次。

    我的问题是:如何使我不必维护800个类似的代码副本?

    • 据我所知,没有办法分享DAX公式。
    • 保存PowerBI模型并重用它可以保存该模型,据我所知,该模型不包括本地添加的度量。如果基于SSAS表格模型,则不适用。
    • 我可以在SSAS表格模型中添加一个字段,并使用DAX公式,但这不起作用——它在SSAS服务器上得到解析,然后直接输入文本。这意味着您可以计算字段,也可以添加它,但它对范围一无所知——您只需要得到所有行的总和/平均值/最小值/最大值。
    • hh:mm:ss 不起作用,因为它不是一个实际的时间域,也不是一个可计算的域。

    如果我在SSAS方面对它做了什么,那么这个字段就变成了一根弦,被踩扁了,或者完全没有上下文,这就是我要说的。

    有什么想法吗?

    0 回复  |  直到 3 年前
        1
  •  0
  •   Stu    3 年前

    问题是我通过AMO将hh:mm:ss值添加到模型中 CalculatedColumn Measure S