谢谢您的时间,提前!
我正在使用DirectQuery作为SQL。数据无法导入,因为ddbb太大了。在该主/事实表中,我有一个列"date"-dd/MM/yyyy和一个列"time"-HH:MM:SS。我已经计算了一个日历表的日期,我试图计算一个时间表使用不同的解决方案,我在互联网上找到了M或DAX。但是没有一个时刻表能正常工作。例如:按“8小时”过滤,它必须在8:00至8:59:59之间的所有时间突出显示,但它没有向我显示该时间范围内的所有数据条目。
我需要做一个堆积条形图/堆叠条形图:X轴:小时Y轴:由语言掌握的操作数。但由于某种原因,并非所有的操作都显示在图表中。我相信计算出的时间表没有正确地过滤我的事实表中的时间列。
注:我确实有最新版本的PowerBI-11月。
*注:就时间表而言,我曾采用以下方法:
设Source =List.Times(#time(0,0,0,0,4 0),#持续时间(0,1,0)),convertToTable = Table.FromList(Source,Splitter.SplitByNothing(),{"DayTime"},null,ExtraValues.Error),createTimeKey = Table.AddColumn(convertToTable,"TimeKey",每一Time.ToText(DayTime,HHmmss)),hourIndex = Table.AddColumn(createTimeKey,"HourIndex",每一个Table.AddColumn(HHmmss)),#en19=(,,每个en23#()),setDataType = Table.TransformColumnTypes(minuteIndex,{“DayTime”,键入time},{"TimeKey",键入text},{"HourIndex",in 64. type },{"MinuteIndex",in 64. type }))
让CreateTimeTable = ()作为表=> let //类似于我们的CreateDateTable脚本,我们从维数的最小单位分钟//开始,一天中有固定的分钟数,所以这里不需要参数// 525,600分钟除以一年中的365天=一天中的1440分钟。//谁说我们从不向百老汇音乐剧学习?MinuteCount = 1440,//现在创建一个总计1440分钟的时间类型列表,每次递增1分钟,时间源= List.Times(# Time (0,0,0),MinuteCount,#工期(0,0,1,0)),//将该列表转换为一个列表TableFromList = Table.FromList( Source,Splitter.SplitByNothing(),//更改该表的一列,以键入Time ChangedType = Table.TransformColumnTypes(TableFromList,{{"Column1",键入time}}),// Rename列到time RenamedColumns = Table.RenameColumns(ChangedType,{{"Column1“、”time“})、//开始为维度InsertHour = Table.AddColumn(RenamedColumns、”小时“、每个Time.StartOfHour(时间))、InsertMinute = Table.AddColumn(InsertHour、”分钟“、每个Time.Minute(时间))、ChangedTypeHour = Table.TransformColumnTypes(InsertMinute,{”小时“、键入时间})、//创建层次结构中可能对报告有用的级别插入列。如果对您的InsertQuarterHour = Table.AddColumn(ChangedTypeHour,“四分之一小时”)没有用处,则忽略Minute<15,如果分钟< 30,则忽略Value.Add(小时,#持续时间(0,0,15,0)),如果分钟< 45,则省略Value.Add(小时,#持续时间(0,30,0)Minute<15 Value.Add(小时,#持续时间(0,0,45,0)),ChangedTypeQtrHr = Table.TransformColumnTypes(InsertQuarterHour,{“四分之一小时”,键入时间}),ReorderedColumns = Table.ReorderColumns(ChangedTypeQtrHr,{“时间”),“小时”,“四分之一小时”,“分钟”},InsertHourNumber = Table.AddColumn(ReorderedColumns,“小时数”,每个Time.Hour(时间)),NextHour = Table.AddColumn(InsertHourNumber,"Next Hour",每个Value.Add(小时,#工期(0,1,0,0),NextQuarterHour = Table.AddColumn(NextHour,“下四分之一小时”,每个Value.Add(四分之一小时,#持续时间(0,0,15,0),InsertPeriod = Table.AddColumn(NextQuarterHour,“期限”,“一天中的时间”),如果每小时数为>= 0和小时数<4,则“午夜后”,否则如果小时号>= 4和小时数<8,则“早起”,如果小时号>= 8和小时数< 12,则“迟到”,否则,如果小时号>= 12和小时数< 16,则“午后”,如果小时号>= 16,小时号< 20,则“深夜”,InsertPeriodSort = Table.AddColumn(InsertPeriod,"PeriodSort“),如果每小时数为>= 0和小时数<4,则为0(如果小时数为>= 4和小时数<8),则为1(如果小时数为>= 8和小时数< 12 ),则为2(如果小时数为>= 12和小时数< 16 ),则为3(如果小时数为>= 16和小时数< 20,则为4其他5),InsertTimeKey = Table.AddColumn(InsertPeriodSort,"TimeKey",每个Time.ToText(时间,"HHmm"),键入文字)
Hora = VALUES(FactTableI_Time) hour = FORMAT(HoraI_Time;"HH") hora2 =time(hora2;0;0)
这就是我想要实现的!目的!但由于某些原因,数据没有正确显示。我正在用SQL查询来验证它。我相信这是因为时间表和事实表有同样多的关联--双方都有很多。时刻表没有唯一的值,但我认为它应该和日历表一样。现在,我使用的时间表与DAX代码(3)。
谢谢!
发布于 2018-12-11 09:20:51
您只需使用DAX向事实表添加一个“小时”计算列:
Hour = HOUR ( FactTable[I_Time] )或者您可以使用这个M代码生成一个时刻表(在您的问题中是#2的简化版本),并创建与事实表的时间列的关系:
let
Source = List.Times(#time(0, 0, 0), 1440, #duration(0,0,1,0)),
#"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), {"Time"}),
#"Changed Type" = Table.TransformColumnTypes(#"Converted to Table",{{"Time", type time}}),
#"Inserted Hour" = Table.AddColumn(#"Changed Type", "Hour", each Time.Hour([Time]), Int64.Type)
in
#"Inserted Hour"https://stackoverflow.com/questions/53629641
复制相似问题