增强切片器日期粒度选择以包括时间

问题描述 投票:0回答:1

_嗨,我有兴趣扩展切片器中可用的粒度选项,该选项当前基于我的“日期”表。我想包括 6 小时、12 小时和 48 小时粒度的选项
您能否建议我实现这一目标的最佳方法?
目前,我已尝试以下操作:

  • 我的 'Dates' 表与我的 'EDV_View2' 事实表相关,具有 1to* 关系
  • 我创建了一个断开连接的 'TimeTable' 并与我的 'Dates' 表执行交叉联接,以生成包含过去 48 小时数据的动态 'Dates&TimeTable'。然后,我在 'Dates&TimeTable''EDV_View2'
  • 之间建立了 1to* 关系
  • 但是,当我尝试将“日期和时间表”设置为日期表时,它不起作用。
  • 为了可视化,我创建了一个图表,其中 X 轴为“日期和时间表”[日期] 和“日期和时间表”[时间],Y 轴为以下度量:
TEST SUM Conso CPT Selected A AFF = VAR _Maxdate = CALCULATE(MAX(EDV_View2[Date&Time]), ALL()) Var _Mindate = _Maxdate - TIME(12, 0, 0) VAR _Start = CALCULATE(_Mindate, REMOVEFILTERS(EDV_View2)) VAR _End = CALCULATE(_Maxdate, REMOVEFILTERS(EDV_View2)) RETURN IF( MIN( EDV_View2[Date&Time] ) >= _Start && MAX( EDV_View2[Date&Time] ) <= _End && [SUM Conso CPT Selected A] <> 0, [SUM Conso CPT Selected A] )

    但是,尽管生成了图表,我的
  • 周期选择功能似乎不起作用。这可能是由于日期表设置造成的吗?
预先感谢您的帮助和建议。

这是我的 Pbix 文件

powerbi dax
1个回答
0
投票
这是一个粒度问题。您需要创建一个时间粒度表,您可以将其与事实表 [时间] 列结合起来。

它将确定您的时间段被分配到哪个存储桶。

例如:

05:00 06:00 将在第一个 6h,8h,12h 时段

08:00 09:00 将在第二个 6 小时、8 小时,但第一个 12 小时时段

我通过为秒间隔创建一个时间表来做到这一点,您可以将其修改为分钟或小时。一天的总秒数 = 86400

// rank each second in a day 0=00:00:00 .. 86399=23:89:59 Source = {0..86399}, #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Changed Type" = Table.TransformColumnTypes(#"Converted to Table",{{"Column1", Int64.Type}}), #"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"Column1", "Second number"}}), // divide it by the total seconds of the day to get the(power query, excel time value #"Inserted Division" = Table.AddColumn(#"Renamed Columns", "Division", each [Second number] / 86400, type number), //change data type to time #"Changed Type1" = Table.TransformColumnTypes(#"Inserted Division",{{"Division", type time}}), // Get time to the second: ex. the if Second number = 5 then second number = 00:00:05 #"Renamed Columns1" = Table.RenameColumns(#"Changed Type1",{{"Division", "Time to the second"}}), // create buckets #"Inserted Integer-Division" = Table.AddColumn(#"Renamed Columns1", "5second bucket", each Number.IntegerDivide([Second number], 5), Int64.Type), #"Inserted Integer-Division1" = Table.AddColumn(#"Inserted Integer-Division", "10 second bucket", each Number.IntegerDivide([Second number], 10), Int64.Type), #"Inserted Integer-Division2" = Table.AddColumn(#"Inserted Integer-Division1", "15 second bucket", each Number.IntegerDivide([Second number], 15), Int64.Type), #"Inserted Integer-Division3" = Table.AddColumn(#"Inserted Integer-Division2", "30 second bucket", each Number.IntegerDivide([Second number], 30), Int64.Type), #"Inserted Integer-Division4" = Table.AddColumn(#"Inserted Integer-Division3", "1 min bucket", each Number.IntegerDivide([Second number], 60), Int64.Type), #"Inserted Integer-Division5" = Table.AddColumn(#"Inserted Integer-Division4", "2 min bucket", each Number.IntegerDivide([Second number], 120), Int64.Type), #"Inserted Integer-Division6" = Table.AddColumn(#"Inserted Integer-Division5", "3 min bucket", each Number.IntegerDivide([Second number], 180), Int64.Type), #"Inserted Integer-Division7" = Table.AddColumn(#"Inserted Integer-Division6", "5 min bucket", each Number.IntegerDivide([Second number], 300), Int64.Type), #"Inserted Integer-Division8" = Table.AddColumn(#"Inserted Integer-Division7", "10 min bucket", each Number.IntegerDivide([Second number], 600), Int64.Type), #"Inserted Integer-Division9" = Table.AddColumn(#"Inserted Integer-Division8", "20 min bucket", each Number.IntegerDivide([Second number], 1200), Int64.Type), #"Inserted Integer-Division10" = Table.AddColumn(#"Inserted Integer-Division9", "30 min bucket", each Number.IntegerDivide([Second number], 1800), Int64.Type), #"Inserted Integer-Division11" = Table.AddColumn(#"Inserted Integer-Division10", "40 min bucket", each Number.IntegerDivide([Second number], 2400), Int64.Type), #"Inserted Integer-Division12" = Table.AddColumn(#"Inserted Integer-Division11", "50 min bucket", each Number.IntegerDivide([Second number], 3000), Int64.Type), #"Inserted Integer-Division13" = Table.AddColumn(#"Inserted Integer-Division12", "1 hour bucket", each Number.IntegerDivide([Second number], 3600), Int64.Type), #"Inserted Integer-Division14" = Table.AddColumn(#"Inserted Integer-Division13", "2 hour bucket", each Number.IntegerDivide([Second number], 7200), Int64.Type), #"Inserted Integer-Division15" = Table.AddColumn(#"Inserted Integer-Division14", "3 hour bucket", each Number.IntegerDivide([Second number], 10800), Int64.Type), #"Inserted Integer-Division16" = Table.AddColumn(#"Inserted Integer-Division15", "6 hour bucket", each Number.IntegerDivide([Second number], 21600), Int64.Type), #"Inserted Integer-Division17" = Table.AddColumn(#"Inserted Integer-Division16", "12 hour bucket", each Number.IntegerDivide([Second number], 43200), Int64.Type), // add names/labels for the buckets #"Added Custom" = Table.AddColumn(#"Inserted Integer-Division17", "5 second time slot", each [5second bucket] * 5 / 86400), #"Added Custom1" = Table.AddColumn(#"Added Custom", "10 second time slot", each [10 second bucket] * 10 / 86400), #"Added Custom2" = Table.AddColumn(#"Added Custom1", "15 second time slot", each [15 second bucket] * 15 / 86400), #"Added Custom3" = Table.AddColumn(#"Added Custom2", "30 second time slot", each [30 second bucket] * 30 / 86400), #"Added Custom4" = Table.AddColumn(#"Added Custom3", "1 minute time slot", each [1 min bucket] * 60 / 86400), #"Added Custom5" = Table.AddColumn(#"Added Custom4", "2 minute time slot", each [2 min bucket] * 120 / 86400), #"Added Custom6" = Table.AddColumn(#"Added Custom5", "3 minute time slot", each [3 min bucket] * 180 / 86400), #"Added Custom7" = Table.AddColumn(#"Added Custom6", "5 minute time slot", each [5 min bucket] * 300 / 86400), #"Added Custom8" = Table.AddColumn(#"Added Custom7", "10 minute time slot", each [10 min bucket] * 600 / 86400), #"Added Custom9" = Table.AddColumn(#"Added Custom8", "15 minute time slot", each [20 min bucket] * 1200 / 86400), #"Added Custom10" = Table.AddColumn(#"Added Custom9", "30 minute time slot", each [30 min bucket] * 1800 / 86400), #"Added Custom11" = Table.AddColumn(#"Added Custom10", "40 minute time slot", each [40 min bucket] * 2400 / 86400), #"Added Custom12" = Table.AddColumn(#"Added Custom11", "50 minute time slot", each [50 min bucket] * 3000 / 86400), #"Added Custom13" = Table.AddColumn(#"Added Custom12", "1 hour time slot", each [1 hour bucket] * 3600 / 86400), #"Added Custom14" = Table.AddColumn(#"Added Custom13", "2 hour time slot", each [2 hour bucket] * 7200 / 86400), #"Added Custom15" = Table.AddColumn(#"Added Custom14", "3 hour time slot", each [3 hour bucket] * 10800 / 86400), #"Added Custom16" = Table.AddColumn(#"Added Custom15", "6 hour time slot", each [6 hour bucket] * 21600 / 86400), #"Added Custom17" = Table.AddColumn(#"Added Custom16", "12 hour time slot", each [12 hour bucket] * 43200 / 86400), // remove the time slots, you won't need them #"Removed Columns" = Table.RemoveColumns(#"Added Custom17",{"5second bucket", "10 second bucket", "15 second bucket", "30 second bucket", "1 min bucket", "2 min bucket", "3 min bucket", "5 min bucket", "10 min bucket", "20 min bucket", "30 min bucket", "40 min bucket", "50 min bucket", "1 hour bucket", "2 hour bucket", "3 hour bucket", "6 hour bucket", "12 hour bucket"}), // change data type to time #"Changed Type2" = Table.TransformColumnTypes(#"Removed Columns",{{"12 hour time slot", type time}, {"6 hour time slot", type time}, {"3 hour time slot", type time}, {"2 hour time slot", type time}, {"1 hour time slot", type time}, {"50 minute time slot", type time}, {"40 minute time slot", type time}, {"30 minute time slot", type time}, {"15 minute time slot", type time}, {"10 minute time slot", type time}, {"5 minute time slot", type time}, {"3 minute time slot", type time}, {"2 minute time slot", type time}, {"1 minute time slot", type time}, {"30 second time slot", type time}, {"15 second time slot", type time}, {"10 second time slot", type time}, {"5 second time slot", type time}}),
在
#“更改类型2”

然后您可以通过[时间到秒]列将其添加到事实表列[时间]中。你应该已经准备好了。

检查如何使用参数和 SELECTEDVALUE() 并将其添加到您的 x 轴。 *

您还可以观看这些视频: *这是想法、概念:

https://www.youtube.com/watch?v=oa0sBSJBFe0

这是实际日期/时间表:

https://www.youtube.com/watch?v=KuPmDB4nf-g

https://www.youtube.com/watch?v=-q7v56p192M

© www.soinside.com 2019 - 2024. All rights reserved.