I am working with a client new to Power BI, and they complain that when drilling down to the next level, the level above "disappears" showing only the parent of the drill-down records, as shown here:
Top Level Shows All Records
After drill-down, we see the next level down, but only the parent record at the level above:
Here, the lower drill-down records appear, but only their parent appears from the level above.
My client would like the hierarchy to still display the parent levels while expanding only the one child level they are interested in viewing the detail for. I know that entire levels can be expanded at once, but is there a way I can create a matrix that allows the behavior the client is looking for?
Can I drill-down in a Power BI matrix to a lower level while leaving the level above displayed in its entirety?
You should use Expand to the next level, instead of drill down. This should do the work. Try it and let me know if this is the case.
You may find this useful https://learn.microsoft.com/en-us/power-bi/desktop-matrix-visual
Related
I already have a group called G_1 in my report and the entire fieldset required for the report are present in G_1.
Now, I have a new requirement which needs data from different tables and hence I created a new query using "Data wizard" and a group called G_2 was created as well.
I don't want to affect the layout of the existing report(every field is in a single repeat frame) and wanted to add my new fields as well
I added fields and mapped the data, but then I got error saying "field references column below its group frequency"
So I have to bring the column under the existing group G_1 without using report wizard.
Any leads would be of big help!
If I understood what you are saying, that won't work.
If you created a new query, it has its group (G_2) and fields selected within that query have to belong to G_2 group. In Paper Layout, by default, every query has the outer frame (M_2), it contains a repeating frame (R_2) and fields have to be part of those frames.
If you set flex off and confine off (so that you could drag fields here and there, even out of its boundaries (frames) and actually do that - drag a field to, say, R_1 frame (which is part of M_1 which belongs to query 1), you'll get that error.
So, what to do?
If possible, the simplest option would be to adjust query Q_1 and add those new fields in there. If not, you'll have those two queries.
One option is to put query 2 objects (frames, fields) below the ones that belong to query 1 (so that they are unrelated). Another is to stretch query 1 frames "down" and make space for query 2 objects. Then you'd draw a M_2 frame (paint it white so that you can easily see what's going on). Within M_2, draw a repeating frame R_2 and paint it yellow. It has to be contained in M_2. Now, create the first field within the R_2 repeating frame. Check the Object Navigator - everything has to be in its place. If it is not, you'll have to move objects backwards (or forward).
Run the report - if it works OK, fine - go on to the next field, and so forth. Test frequently. Once you're done, make it prettier - move everything to its right place, remove painting and - that's it.
On the other hand: as there's only one frame you currently have (I don't know how many fields there are and how complex the layout is), if you are an unexperienced Reports user, your best option is to delete current layout and let the Wizard do the job. It'll certainly ruin everything you've done so far, but it has its advantages - all objects will be on their proper places. Might be time consuming, but adjusting fields and headings and stuff could be simpler and easier.
Unfortunately, there's no easy way to do it. Takes time to gain experience, but - if you have it - go for it. How will you learn how to do it if you actually don't do it?
Best of luck!
One of my dimension contains the different divisions of the company. I have one division which doesn't exist anymore but I want to keep this to check the results of previous years and months.
How do I dynamically eliminate this value of the dimension when it doesn't have a measure anymore?
First I was thinking that adding a filter where the measure should be > 0 or 'not null' but this doesn't seem to do the trick. The dimension keeps showing up.
Thanks!
To go a bit into more details on Robin's question which is the most pertinent one:
Do you try to remove the "obsolete" dimension member from dimension-only queries - like prompts for example?
This is crucial to know as forcing a normally dimension-only query over a fact and thus continuously forcing the inclusion of the fact table for all queries potentially has quite a performance impact.
a) ">0" and "is not null are two completely different things and if used in a cavalier fashion can also yield absolutely wrong results. What if the measure is at a negative value? That would make it "disappear" as well for you. What if there simply is no measure yet but the dimension member is implicitly actually valid just not filled yet? That would also make it disappear for you.
b) How can you know the point of view a user is standing at? For an analysis run for last year this will be perfectly valid to show?
c) What about time-variant comparisons? What about rolling calculations?
d) What about the point-in-time of the dimension rather than the fact? --v
e) What about cross-org analysis like "What do our numbers look like when we apply last year's org vs this year's vs a planned new one which is already loaded into the data source?
While I understand the idea behind your question you should not forget that we're talking analytics here and always face changing dimensions and attributes so your request which seems valid from a human point of view for that one, specific use case is - for the solution as a whole - to be considered wisely.
Although I'm not clear on what you mean by "eliminate this value of the dimension", I think you may be looking for the pivot measure function, called FILTER(Fact USING (Insert your filter here)).
I am assuming that when aggregating using a measure, your problem is that you are unable to exclude the Division that does not exist anymore, and as a result, your measures/aggregations are incorrect.
In this case, you should use the pivot measure as I indicate above.
Your column formula would look like this:
FILTER(Measure1 USING ("SubjectArea1"."Division" <> 'DivisionName'))
Follow these steps to implement this function:
Edit the column formula of your measure.
Highlight the formula of the column and click the Filter... button at the bottom of the Column Formula text box. An Insert Filter window will appear.
Select the Division column from the Subject Areas pane. (Either double-click it, or select it then click the OK button).
You will see a New Filter window. Change the Operator to is not equal to / is not in.
Select your Division that you want to exclude.
Click OK to close the New Filter window.
Click OK again to close the Insert Filter window.
Click OK again to close the Edit Column Formula window.
If your syntax is correct, you will see no errors.
What is a good way to map a level of a treestore to a flat store. In my case,
I want to group criteria for a search. All search criteria are inserted into the top level of the treeStore, unless they are grouped, in which case they become children of a top level logical(AND or OR) node. So, within a grid, I want to display the top level nodes (via some toString method I will define in the model). This is the easy part, I just go through the top level of my tree and generate the output for the Store/grid. However, when I want to remove something from the grid/store, it also needs to be removed from the treestore which represents the actual logical structure.
So, How can I keep track of which textual store item corresponds to which top level node in my treeStore?
Load your data onto the store or treegrid (but not both), then collect the records from one object and just add them to the other (using store.add() or treestore.getRootNode().appendChild()). At this point if you have a reference to the record, you can just say store.remove([record]); and then treestore.getRootNode().removeChild(record); to remove it from both.
After performing a product evaluation by one of the managers other can change the scoring for certain categories. This changes in scoring are stored in the database for reference.
The structure of the evaluation is like this:
Evaluatoin
- Category
- Scoring point
an evaluation can have many categories which all can have many scoring points.
My problem is the following:
If I change a scoring point a few times all is entered in the database but in the reports i am only seeing the first scoring point. The rest of them with the same name are left blank but are using space just as it would if all were visible. The stored procedure that is delivering the data is working fine. It bring all data to the report which then displayes it wrong.
=Fields.CategoryName is working fine... every category name is displayed correctly
=Fields.ScoringPointName is not working... it displayes only the first and leavese all the rest blank... if for example a scoring point name is Product robustnes it would display only the first change of scoring but wouldnt display the rest
Any ideas???
Found out what the problem was. Maybe it will be helpful for other people
I was showing the data in a group header section with grouping =Fields.DefinitionText. Thus it will only repeat if the Fields.DefinitionText is distinct. About the empty space it's caused by the detail section that repeats for every data record. Thus if I want to display all of the data records I have to move the group header section textboxes to the report's detail section.
Here and Here are some usefull things about reporting.
Cheers
I have a large database table that I need to display on a Windows Form. The data is some sort of a "category list" which I need to display to the user in a treeview-like structure, there are categories with more sub-categories. Treeview control has delay loading but the problem is there could be hundred thousand root nodes with 4 column string values. I tried adding 100000 nodes to a treeview and it took 5 minutes to complete. Are there any other options for such an operation? Can you give me any ideas? It doesn't have to be a treeview..
That is a lot of nodes, but did you try calling BeginUpdate() and then EndUpdate() when you added the list of nodes to the treeview? That would probably bring your performance up a bit!
http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.beginupdate.aspx
For applications like this, I tend to implement features such as "search as you type", which would return category names as they are typed into a textbox. For example, on each keystroke, I would go back to the DB and return the top 10 or so values that begin with what's in the text box. If there are more than 10 results, I either indicate that more results are present, or I tell them to refine their search. IMO direct searching always trumps sorting and/or paging. I hate paging. It's almost always an admission that your search functionality is not good enough!
Perhaps implement some sort of paging mechanism. 100,000 items in a TreeView would be very difficult to read from a user's perspective. Providing only 1,000 or even fewer root nodes at a time would certainly cut back on load times.
You can use cache capabilities. 20000 records generally takes 0,2s to load. Check your language support in order to use it.
regards,
TreeView has an event BeforeExpand. You can use it to determine on the fly which node content to load. That is, you first load only the top level nodes in your TreeView.
If the user is about to expand a node you can fetch the required data and fill the subnodes of that node. Use the Tag property of TreeNode to store an ID which data belongs to which node.
Make sure to use BeginUpdate() and EndUpdate() or use AddRange() instead of Add() to add nodes because it is much faster.
I decided to implement a virtual/server mode for the treeview.
Thanks for the answers.