在 Power BI 中将持续时间格式化为 hh:mm:ss 可重用
Format durations as hh:mm:ss in PowerBI reusably
我正在为 SQL 个服务器数据库编写 PowerBI 报告。
这些数据库中的 tables 可能会变得有点笨拙(1,000,000,000 多行),所以我在中间使用 Analysis Services Tabular —— 主要是为了让我定义具有受控刷新的分区. SQL 服务器可以不 直接被报告击中,它们 需要所有这些行,并且报告可以不落后15分钟以上。
我需要显示的大约 90% 的值是持续时间,它们在基数 table 中定义为整秒或毫秒。
很多时候,这些值需要以 hh:mm:ss 格式显示。
PowerBI 不支持持续时间类型(如果你问我,这是一个巨大的 WTF),但是向包含持续时间值的 table 添加度量相对容易在几秒钟内并使用 DAX 将其转换为 hh:mm:ss:
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 表格模型,因此我实际上无法向模型中添加字段。
- 我可以向 SSAS 表格模型添加一个字段并使用该 DAX 公式,但这不起作用——它在 SSAS 服务器上得到解析并被压平成文本。这意味着您可以计算该字段,也可以添加它,但它对范围一无所知——您只获得所有行的 Sum/Average/Min/Max。
- 将 SSAS 字段上的 FormatString 设置为
hh:mm:ss
不起作用,因为它不是实际时间字段,也不是可计算字段。
如果我在 SSAS 方面对其进行任何操作,该字段将以字符串的形式出现并被踩平,或者完全没有上下文,这就是我所说的。
有什么想法吗?
问题原来是我通过 AMO 将 hh:mm:ss 值添加到模型中作为 CalculatedColumn
s,而不是 Measure
s。
我正在为 SQL 个服务器数据库编写 PowerBI 报告。
这些数据库中的 tables 可能会变得有点笨拙(1,000,000,000 多行),所以我在中间使用 Analysis Services Tabular —— 主要是为了让我定义具有受控刷新的分区. SQL 服务器可以不 直接被报告击中,它们 需要所有这些行,并且报告可以不落后15分钟以上。
我需要显示的大约 90% 的值是持续时间,它们在基数 table 中定义为整秒或毫秒。
很多时候,这些值需要以 hh:mm:ss 格式显示。
PowerBI 不支持持续时间类型(如果你问我,这是一个巨大的 WTF),但是向包含持续时间值的 table 添加度量相对容易在几秒钟内并使用 DAX 将其转换为 hh:mm:ss:
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 表格模型,因此我实际上无法向模型中添加字段。
- 我可以向 SSAS 表格模型添加一个字段并使用该 DAX 公式,但这不起作用——它在 SSAS 服务器上得到解析并被压平成文本。这意味着您可以计算该字段,也可以添加它,但它对范围一无所知——您只获得所有行的 Sum/Average/Min/Max。
- 将 SSAS 字段上的 FormatString 设置为
hh:mm:ss
不起作用,因为它不是实际时间字段,也不是可计算字段。
如果我在 SSAS 方面对其进行任何操作,该字段将以字符串的形式出现并被踩平,或者完全没有上下文,这就是我所说的。
有什么想法吗?
问题原来是我通过 AMO 将 hh:mm:ss 值添加到模型中作为 CalculatedColumn
s,而不是 Measure
s。