Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Join the FabCon + SQLCon recap series. Up next: Power BI, Real-Time Intelligence, IQ and AI, and Data Factory take center stage. All sessions are available on-demand after the live show. Register now

Reply
lolxd
Regular Visitor

line chart visual bug

Hi,

 

encountered this weird visual bug (upper left visual), where one `x` value seemingly maps to many `y` values, which it shouldnt, obviously.

 

lolxd_0-1695628008926.png

For context, i am trying to calculate the count of BOs from `fact_table_range` that have the attribute `DATE_FROM` lower than `DATE` and `DATE_TO` greater than `DATE` for each `DATE` from `calendar_daily`. So basically ```

select * from calendar_daily inner join fact_table_range on calendar_daily.date >= DATE_FROM and (DATE_TO is null or calendar_daily.date <= DATE_TO)

``` Since i could not find a way to do this in power bi directly, I am using `dimension_table_range` which "translates" given date to all the possible `COMPRESSED_RANGE`s that given date belongs to. (`COMPRESSED_RANGE` is just `DATE_FROM` and `DATE_TO` concatenated into a string so that i can specify a relation between `dimension_table_range` and `fact_table_range` using single `COMPRESSED_RANGE` attribute rather than `DATE_FROM` and `DATE_TO` attributes)

lolxd_1-1695629322663.png

Also, the dataset i am running the visualization on is a rather big dataset, where each of the dates matches up to a million rows.

 

Any help would be appreciated

<table class="table table-bordered table-hover table-condensed">
<thead><tr><th title="Field #1">DATE_FROM</th>
<th title="Field #2">DATE_TO</th>
<th title="Field #3">DATE</th>
<th title="Field #4">COMPRESSED_RANGE</th>
</tr></thead>
<tbody><tr>
<td>01.01.2020</td>
<td> </td>
<td>01.01.2020</td>
<td>2020-01-01:null</td>
</tr>
<tr>
<td>01.01.2020</td>
<td> </td>
<td>02.01.2020</td>
<td>2020-01-01:null</td>
</tr>
<tr>
<td>01.01.2020</td>
<td> </td>
<td>03.01.2020</td>
<td>2020-01-01:null</td>
</tr>
<tr>
<td>01.01.2020</td>
<td> </td>
<td>04.01.2020</td>
<td>2020-01-01:null</td>
</tr>
<tr>
<td>01.01.2020</td>
<td> </td>
<td>05.01.2020</td>
<td>2020-01-01:null</td>
</tr>
<tr>
<td>02.01.2020</td>
<td> </td>
<td>02.01.2020</td>
<td>2020-01-02:null</td>
</tr>
<tr>
<td>02.01.2020</td>
<td> </td>
<td>03.01.2020</td>
<td>2020-01-02:null</td>
</tr>
<tr>
<td>02.01.2020</td>
<td> </td>
<td>04.01.2020</td>
<td>2020-01-02:null</td>
</tr>
<tr>
<td>02.01.2020</td>
<td> </td>
<td>05.01.2020</td>
<td>2020-01-02:null</td>
</tr>
<tr>
<td>02.01.2020</td>
<td>02.01.2020</td>
<td>02.01.2020</td>
<td>2020-01-02:2020-01-02</td>
</tr>
<tr>
<td>03.01.2020</td>
<td>03.01.2020</td>
<td>03.01.2020</td>
<td>2020-01-03:2020-01-03</td>
</tr>
<tr>
<td>04.01.2020</td>
<td> </td>
<td>04.01.2020</td>
<td>2020-01-04:null</td>
</tr>
<tr>
<td>04.01.2020</td>
<td> </td>
<td>05.01.2020</td>
<td>2020-01-04:null</td>
</tr>
</tbody></table>
<table class="table table-bordered table-hover table-condensed">
<thead><tr><th title="Field #1">date</th>
</tr></thead>
<tbody><tr>
<td>01.01.2020</td>
</tr>
<tr>
<td>02.01.2020</td>
</tr>
<tr>
<td>03.01.2020</td>
</tr>
<tr>
<td>04.01.2020</td>
</tr>
</tbody></table>
<table class="table table-bordered table-hover table-condensed">
<thead><tr><th title="Field #1">BO_ID</th>
<th title="Field #2">ATTR_0</th>
<th title="Field #3">DATE_FROM</th>
<th title="Field #4">DATE_TO</th>
<th title="Field #5">COMPRESSED_RANGE</th>
</tr></thead>
<tbody><tr>
<td align="right">0</td>
<td>C</td>
<td>02.01.2020</td>
<td>02.01.2020</td>
<td>2020-01-02:2020-01-02</td>
</tr>
<tr>
<td align="right">0</td>
<td>I</td>
<td>03.01.2020</td>
<td>03.01.2020</td>
<td>2020-01-03:2020-01-03</td>
</tr>
<tr>
<td align="right">0</td>
<td>M</td>
<td>04.01.2020</td>
<td> </td>
<td>2020-01-04:null</td>
</tr>
<tr>
<td align="right">1</td>
<td>Z</td>
<td>02.01.2020</td>
<td> </td>
<td>2020-01-02:null</td>
</tr>
<tr>
<td align="right">4</td>
<td>N</td>
<td>06.01.2020</td>
<td> </td>
<td>2020-01-06:null</td>
</tr>
<tr>
<td align="right">5</td>
<td>C</td>
<td>01.01.2020</td>
<td> </td>
<td>2020-01-01:null</td>
</tr>
<tr>
<td align="right">7</td>
<td>U</td>
<td>01.01.2020</td>
<td> </td>
<td>2020-01-01:null</td>
</tr>
</tbody></table>

 

4 REPLIES 4
lbendlin
Super User
Super User

DATE_FROM DATE_TO DATE COMPRESSED_RANGE
01.01.2020   01.01.2020 2020-01-01:null
01.01.2020   02.01.2020 2020-01-01:null
01.01.2020   03.01.2020 2020-01-01:null
01.01.2020   04.01.2020 2020-01-01:null
01.01.2020   05.01.2020 2020-01-01:null
02.01.2020   02.01.2020 2020-01-02:null
02.01.2020   03.01.2020 2020-01-02:null
02.01.2020   04.01.2020 2020-01-02:null
02.01.2020   05.01.2020 2020-01-02:null
02.01.2020 02.01.2020 02.01.2020 2020-01-02:2020-01-02
03.01.2020 03.01.2020 03.01.2020 2020-01-03:2020-01-03
04.01.2020   04.01.2020 2020-01-04:null
04.01.2020   05.01.2020 2020-01-04:null

 

date
01.01.2020
02.01.2020
03.01.2020
04.01.2020

 

BO_ID ATTR_0 DATE_FROM DATE_TO COMPRESSED_RANGE
0 C 02.01.2020 02.01.2020 2020-01-02:2020-01-02
0 I 03.01.2020 03.01.2020 2020-01-03:2020-01-03
0 M 04.01.2020   2020-01-04:null
1 Z 02.01.2020   2020-01-02:null
4 N 06.01.2020   2020-01-06:null
5 C 01.01.2020   2020-01-01:null
7 U 01.01.2020   2020-01-01:null

 

Your pasting didn't work because the forum doesn't know what to do with thead and tbody tags. Removing these seems to work.

 

Now - what's the expected outcome based on this data?

thanks,

 

this is the expected outcome

lolxd_0-1696228073336.png

 

it depitcts the count of "covering ranges" from `fact_table_range` for each date from `calendar_daily` ie something like count of rows returned from this select:

select * from calendar_daily inner join fact_table_range on calendar_daily.date >= DATE_FROM and (DATE_TO is null or calendar_daily.date <= DATE_TO)

for given calendar_daily.date. This "logic" is done via the `dimension_table_range`, which translates any date from `calendar_daily` to all possible "covering ranges" from `fact_table_range`, as seen here.

lolxd_1-1696229174882.png

 

It works fine with such small dataset, the problem starts when i use greater dataset with three years worth of days in `calendar_daily` and millions of rows in `fact_table_range` (the size of `dimension_table_range` is determined by unique tuples of (`date_from`, `date_to`) in the fact table, the cap for dataset tracking three years is somewhere around 210K rows). The outcome for a dataset of that size is

lolxd_2-1696230442608.png

as shown my original post

your 'dimension_table_range' table does not look happy.  It is clearly not a dimension table.   I think you want to review and refactor your data model before you work on the visual issues. 

lbendlin
Super User
Super User

Please provide sample data (with sensitive information removed) that covers your issue or question completely, in a usable format (not as a screenshot). Leave out anything not related to the issue.
If you are unsure how to do that please refer to https://community.fabric.microsoft.com/t5/Community-Blog/How-to-provide-sample-data-in-the-Power-BI-...
Please show the expected outcome based on the sample data you provided.

If you want to get answers faster please refer to https://community.fabric.microsoft.com/t5/Desktop/How-to-Get-Your-Question-Answered-Quickly/m-p/1447...

Helpful resources

Announcements
April Power BI Update Carousel

Power BI Monthly Update - April 2026

Check out the April 2026 Power BI update to learn about new features.

New to Fabric survey Carousel

New to Fabric Survey

If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.

Power BI DataViz World Championships carousel

Power BI DataViz World Championships - June 2026

A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.

FabCon and SQLCon Highlights Carousel

FabCon &SQLCon Highlights

Experience the highlights from FabCon & SQLCon, available live and on-demand starting April 14th.