The Most Tenacious Man in the World

July 31, 2010

 
the_most_interesting_man_in_the_world

 
“I don’t always use spreadsheets, but when I do, I prefer…  PowerPivot.”

-P Kumar

We Have a Waldo Contest Winner!

OK, I’ve never met P Kumar.  Most people haven’t.  He is a mysterious man, preferring to go by his first initial only, much like the famous J Allard at Microsoft.  P probably looks nothing like the picture above.  But he is, quite simply…

The Most Tenacious Man in the World.

When I posted the Where’s Waldo PowerPivot Contest, I knew it was challenging.  I half expected the winner would be someone who had already stumbled upon the answer, rather than someone who went looking for it.  I mean, I had stumbled upon it myself just a few days prior.

But this did not deter P.  Nor did the fact that he had never installed PowerPivot, client or server.  Off he went.

I kinda get the impression that P barely slept for 48 hours, performing the equivalent of a depth-first-search traversal of every pixel in the product.  You can get a play-by-play account of his efforts here in the comments thread.

Anyway, here’s the answer:

image

clip_image001

Yeah, it’s in the usage monitoring features of PowerPivot for SharePoint.  Those dashboard views are rendered in Excel Services from workbooks created by the PowerPivot team, and they accidentally left in a chart from their own internal testing of the product. 

You can even create your own workbooks as custom views, which I have been doing lately to filter Pivotstream employees out (so we just see the activity of our customers).

Congratulation to P, the most tenacious person I’ve encountered in a long time.  He truly deserves the prize.  Now P, I expect you to do wonderful things with that software ok?  Please report back so we can track your exploits further :)

An old joke comes to mind

This reminds me of one of my favorite old jokes – “How do you hunt an elephant?”  Each profession’s quirks are revealed by their approach.  In particular, the approach of computer programmers seems relevant:

image 

The full list can be found here.


Where’s Waldo Contest – Two Hints!

July 28, 2010

UPDATED:  Contest Closed, We Have a Winner!

P Kumar has won in impressive fashion.

No one has sent in a correct answer yet.  Two things I think are worth pointing out:

1) The logins are visible in the UI, and don’t require you to go digging through obscure files on the hard drive to find

2) They appear in PowerPivot for SharePoint, NOT in PowerPivot for Excel

Happy hunting.


Win an MSDN Subscription – Free Software!

July 27, 2010

UPDATED:  Contest Closed, We Have a Winner!

P Kumar has won in impressive fashion.

image001An Unusual MVP

I recently was awarded the title of Microsoft MVP for SQL Server, as a result of my community work around PowerPivot.  Good stuff – I get access to some newsgroups, a little advance info every now and then, get to attend the MVP Summit in February, etc… oh, and I get to put the neat little MVP symbol in my email signature, displayed here at the right.

A brave new world we live in, where a guy like me who knows hardly anything about databases lands in a SQL Server MVP program.  PowerPivot is a bit of a black swan, straddling the fence between hardcore db’s and the world of information workers.  Makes just as much sense for me to be in the Excel MVP program really, so hopefully I will still get plugged into those feedback loops as well.

MSDN Subscriptions for PowerPivot ContestsFabulous Prizes

OK, that’s great for me and all, but how does it benefit you?  Well, for starters, as part of the MVP packet, I got three MSDN subscription cards to give out!

These subscriptions must be activated within the next few months, and are good for a full year once activated.

I’m not an expert on all the particulars, but what it basically gives you is full access to the MS software catalog, for your own personal use and experimentation.  Office, Windows, SQL, SharePoint, Exchange, Visual Studio, etc. – a Golden Ticket of sorts.

Contest #1:  Where’s Waldo, PowerPivot Edition!

I recently discovered that some of the PowerPivot development team’s Windows Domain logon names were accidentally shipped in the product.  Pretty funny.

To win the first MSDN card, all you have to do is find where that occurs, and email me: rob@pivotstream.com

Simple huh?  Hee hee.  Whoever finds this is indeed worthy.

Rules Schmules!

If I receive multiple correct entries within the first 24 hours after this post goes live, I will randomly choose one of those entries as the winner.  This will give everyone a fair chance, regardless of where you live.

After the first 24 hours, first correct entry wins.

If I have reason to believe that you already have access to MSDN, I doubt I will award you the card, so let’s leave this for people who don’t have it already ok?

Future Contests

I have not yet decided how to award the other two, but will figure it out soon.  Also, I have a few other prizes that are a bit on the silly side – stuff from Microsoft with various logos on it that certify the wearer/user as nerd royalty – that I will also be giving away because my wife commands it :)

Watch this space for announcements.


Two Excellent PowerPivot Books

July 26, 2010

PowerPivot Books

Awhile back you may recall David Coe winning our XL Monkey Design Contest, the prizes for which were three unreleased (at the time) books:  two on PowePivot specifically, and one on Pivots in general.  Autographed by the authors of each:  Bill Jelen (Mr. Excel) for two of them, and Denny Lee, Ron Pihlgren, and Siva Harinath for the other.

Well, those books are all released now, and Bill/Denny have sent me the signed copies for delivery to David. 

Even better (for me), they each graciously included signed copies for a guy named Rob Collie.  So, PowerPivot books have supplanted Angry Birds as my pre-sleep nighttime routine for the past few days.

Humorous Aside:  Flattery will get you everywhere!

Shrewd promoters that they are, Denny and company had the wisdom to list me in the acknowledgement section of the book, even going so far as to list me first. 
 
PowerPivot Yoda 
PowerPivot Yoda says:
  “Wise is the author who prominently thanks those with the capacity to promote.”

 
Mr. Excel takes this even further, with the first two words in the book (after About the Author) being “Rob Collie.”  He even thanks my wife Jocelyn!

All future PowerPivot authors, take note of this.  (Actually, all authors take note of this, regardless of topic, heh heh).

Back to Serious:  Reviewing the Books

All of that fun stuff aside, I think I’ll briefly review these books here on the blog.

Since Bill’s book (the green one) arrived first, I’ve had time to read it already, so I’ll review that one first.

Excel People, Start PowerPivot Here

The arrival of Bill’s book is conveniently timed, since my last post was from an Excel power user who wanted content more tailored to his viewpoint and history.

My biggest overall conclusion after reading Bill’s book is that Excel users will be hard-pressed to find a better place to start their PowerPivot journey.  Bill is not a SQL guy and he is not an MS employee – he has been building spreadsheets in the wild since before Pivots even existed.  And for many years now he has made his living simply teaching others to get the most out of Excel.

That history and perspective shows through in the book.  Reading it is VERY different from reading any of the MS documentation on PowerPivot for instance – that MS content is excellent at describing PowerPivot and how to use it, it just isn’t written by a multi-decade Excel maestro, so it doesn’t tell Excel users, in detail, what will be familiar to them and what will be new.

Example:  the book contains a table listing all the pros and cons of PowerPivot-style pivots versus traditional Excel pivots.  I wouldn’t have come up with half of these differences despite my Excel pedigree, and I consider it the definitive list on the topic:

PowerPivot versus Traditional Pivots

Like a true Excel nerd, Bill even has a numerical Rating column, listing each pro/con as a positive/negative value, and then adds them all up at the bottom to generate +181 as the overall rating.  I wonder if Bill is like this at breakfast, comparing waffles to flapjacks using AutoSum?

(And yeah, I’m intentionally leaving the resolution poor – you’ll have to get the book, as I am not in the habit of republishing other people’s work like that).

Continues Throughout, Covers Every Aspect of PowerPivot

That perspective and experience is maintained cover to cover.  “Here ya go Excel pro, this is why you should care about feature X, when you should apply it instead of traditional Excel feature Y, and when you should stick with the traditional approaches.”

And it goes end-to-end through PowerPivot with this perspective, from data import, editing/cleaning, table relationships, DAX formulas of all types, pivot and slicer layout, formatting, workarounds galore, and touches on SharePoint at the end.  As I said, if you are coming to this from the Excel world, I think this is a great book for you.  It’s a quick, informative, and personable read.  Well worth the $23 at Amazon.

=IF(MOD([PageNum],3)=0,”Rip MS a New One”,”Wait til next page”)

Part of the personable thing:  Bill doesn’t spare MS when he dislikes something.  “Insane,” “crazy,” “hate” – these are a few of his favorite words.  In a few places he rips into decisions that were personally made by me, or by teams I led back at MS.  For instance, he hates the new Compact pivot layout introduced in Excel 2007.  Bill, I’m ready to duel over THAT one.  (Look for my upcoming blog post, The PowerPivotPro Went Down to Akron).

‘Pivotpro drove down to Akron
His fingers tightly grippin’ the wheel
He was looking to find
An Excel author unkind
To pivots’ excellent look and feel

What the book is NOT

Clocking in at 294 pages, this book doesn’t try to do everything, which I think is wise.  I don’t think any Excel pro wants to pick up, as a starting point, a 1200 page bible.  This book is an excellent intro and you will hit the ground running fast, but at some point later, you will eventually go looking for:

  1. An in-depth guide to high-powered DAX measures
  2. An in-depth guide to the implications of various table structures and relationships
  3. Performance-tuning reference
  4. A how-to reference for deploying PowerPivot for SharePoint
  5. List of best practices, tips and tricks, workarounds for Excel Services on SharePoint

Like I said, as an Excel pro, you are MUCH better off NOT trying to tackle those up front.  You can get incredible mileage out of PowerPivot without once touching those topics.  You will want to someday, but you don’t NEED to, so I highly recommend Excel pros pick up this book as their starting point.


An XL Pro’s Plea for More XL Pro-Focused Content

July 22, 2010

 
Just Don't Call Our Minds Simple, OK?

“Don’t you, forget about me.”

-Excel Pros Everywhere

From the beginning I’ve been talking about three different kinds of PowerPivot professionals:  Excel pros, SharePoint pros, and Database pros, and how they will all need to cooperate in order to get the most out of the system.

As far as I can tell, though, the majority of visitors to this site are from the Database camp (I lump Business Intelligence pros into this bucket).  Not surprising perhaps, since PowerPivot is a product of the SQL team at MS, and marketed heavily at conferences that db pros attend.

But for every db pro in an organization, there may be more than 100 Excel pros.  So, I think it’s clear that the PowerPivot message (and messaging) have a long way to go yet (it WAS just released, after all).

John Constant is one of the Excel pros who are “early to the party,” and has been sifting through all of the available PowerPivot materials for many months now, both the official MS stuff and the community offerings.

He raises some very valid points, things that I lose sight of at times.  It’s SO much simpler to grab a sample db from the SQL team and use it for blog examples for instance.  Even the Great Football Project starts with such a data source.

But I firmly believe that an organization’s success with PowerPivot rests in part on very competent training for the Excel pros…  and part of “competent” is “tailored to the Excel pro’s existing knowledge and viewpoints.”  In fact, I’d be out providing that kind of training this month if it weren’t for being very busy, the good kind of busy, applying PowerPivot for Pivotstream’s customers.

Without further preamble, I give you the words of John Constant:

PowerPivot vs the Excel Power user

Many moons ago, I can’t even remember where, I saw a comment…  Microsoft is coming out with a new business intelligence service… code named .. Gemini.  I was intrigued.  I had recently been tasked of coming up with some sort of data table /system  / process / spreadsheet / Excel voodoo to help put our business (and the competition) in perspective.  Hmm… a new tool you say.  So I delved into any links or articles I could find.  I saw the Donald Farmer video of Gemini sorting through millions of rows of video rentals – updating the charts/tables on the fly and .. sigh.. it was like love at first site.  I signed up for the beta at the first opportunity – archaic business software be damned! .  I was fortunate enough back in early fall 2009 to get my initial private beta Office 2010 release.  I was having a field day with the sparklines and the soon to be essential slicers, waiting with baited breath for the initial Gemini release.

The Microsoft talk was great.  It COULD be a standalone product.  It was meant for Excel power users and for IT and Data Administrators and Managers and so much more… but I’ve heard the talk before.  Don’t even get me started on the failings of Mappoint….   But low and behold – Gemini, with a few hiccups worked.  Sure if you linked in or brought in new data, it may corrupt all your work and you would have to start from scratch, but it’s beta.  Silly, silly beta.  It will grow up.  Sure there’s a new language that looks something like native excel formulas and there’s stuff that you take for granted working with Excel pivot data that you can’t do with Gemini… but it’s beta.. silly silly beta. It’s still growing.. be patient.  Help is on the way.  And help arrived.  There’s PowerPivotPro and PowerPivot.com  and Kasper and a host of other dedicated people who truly believe in the product.  And they do things to help build the community like having SQL workshops and handing out lovely diagrams (http://sqlcat.com/blogs/technicalnotes/image_4AFAE1C3.png) as a prize.

Errr… whoa..  hold on.  Did I mention the initial Microsoft talk?  Did I mention how Power users could use this product to help themselves and their company.  I understand the importance of SQL.  I understand the concept of Cubes; I’ve heard of OLAP (once or twice) but .. did you see that picture?!!  That’s a prize?!  Are you trying to scare away users?!   Let’s go back to Powerpivot.com, the ‘home’ of powerpivot (the grown up name of Gemini).   What’s that first video – the first public introduction of Powerpivot?  It shows a poweruser and PowerPivot for Excel.    Sure, it mentions Sharepoint but the debate continues – who is PowerPivot for? What about the power user?   – the grunts in the field who want to make the most of this product?  I know (reading some postings) there isn’t a large target population, but for some reason I feel like a Who in Whoville.. “We’re here!  We’re Here…. WE’RE HERE!!!!”  And what do I see …  honourable intentions of many esteemed PowerPivot bloggers aimed at….  SQL, OLAP, Business Intelligence users, like speaking to the already converted.

Don’t believe me?  Read your forums, your FAQ’s.  How are the samples set up?  Well you have FactInventory, FactSales, DimDate, DimThis, Dimthat – Dim Witted!   These examples and their structures aren’t what the normal excel user uses – or understands.  I’ve got Sales, I’ve got product, I’ve got territories, I’ve got stuff labeled poorly because they’ve been set up by someone who knew some programming about a decade ago… in other words, I have real word – DIM-LESS – data and structure.  It’s taken a few brick walls but I’ve hit my head enough times that the examples are sinking in but what about all those people that the ‘talk’ is supposed to reach?  Those who really have no experience with SQL or know of Cubes or data structure tables?  What about those people who can’t even consider getting Sharepoint because they are with a small business that doesn’t have the resources (financial or otherwise?).

I know why Microsoft is “selling” PowerPivot. I don’t fault them for that and I know the majority of users will have IT, Data Admin backgrounds, who will be setting up PivotViewers, and templates and services logs- all those lovely bells and whistles and the examples that will cater to those who deal with FactTables and DimData.  And then there were the Excel power users…  seeing a potentially great product aimed at the institutions, the data centres, the IT gods…   sigh…. 

I do not fault the Farmer’s the Collie’s, the Jonge’s, the Russo’s and the many many other dedicated PowerPivot supporters in the world – I thank them for all their hard work.  PowerPivot is a great product with great potential for many people, but just remember the little guy in the equation, the ones that someone deemed somewhere should have access to this power.  Bring it down a level from time to time… walk the walk and talk our talk and remember the Who’s… “we’re here!  We’re HERE… WE’RE HERE!!!”.

Powerpivot user – johncon aka Mongo41 on Twitter


Use Time intelligence functions to do a running sum of the last 6 months with PowerPivot

July 6, 2010

By Kasper de Jonge, crosspost from PowerPivotblog.nl

A while ago I did a PoC using PowerPivot, both to show Self Service BI with PowerPivot for SharePoint but also as a datasource for SSRS reports. I used DAX to solve all difficult request, mostly making use of the Time Intelligence functions.

One of the requests was if we could show a running sum of the last 6 months. I had not done that before, so today we take a look at how to do this with DAX. It appeared to be rather easy :)

Again we use the almighty Calculate function to change the context of the row we are in. We want to do a sum of all the rows of the last 6 months of data. We use the DATESINPERIOD function to get the last 6 months of dates.

The function DATESINPERIOD has 4 parameters, first is the column containing the datarange, second is the start date. We can get it by getting the last date in context, we use LASTDATE to get this. As last two parameter we can give intervals to subtract or add from the start date. In our scenario we want to subtract 6 months from the last date.

This gives the following formule:

=IF(ISBLANK(sum(FactInventory[DaysInStock])),BLANK(),
CALCULATE(sum(FactInventory[DaysInStock]),
DATESINPERIOD(DimDate[DateKey],
LASTDATE(DimDate[Datekey]),-6,MONTH)))

Again not too hard :)

I put in a ISBLANK to check if we have values for the current month, we are not interested in the future :)

This gives us the following result:

I decided to check out the DATESBETWEEN as well, the DAX function below gives the same result:

=IF(ISBLANK(sum(FactInventory[DaysInStock])),BLANK(),
CALCULATE(sum(FactInventory[DaysInStock]),
DATESBETWEEN(DimDate[Datekey],
FIRSTDATE(DATEADD(DimDate[Datekey],-5,MONTH)),
LASTDATE(DimDate[Datekey]))))

The DATESBETWEEN function can be used to return a table of dates between a start and a end date.
As end date we need to get the last date that is available in the current context. We can determine this by doing LASTDATE(DimDate[Datekey]). The first date is a little more confusing. We need to get the date 6 months ago, of course we can use the DATEADD function. This will return us a a set of dates of the current context, in our sample we get a set of all dates in the month. Using firstdate we get the first date of this set to start our datesbetween function.


Slicers and pivot update performance

July 2, 2010

-Posted by Rob Collie

 
CHI0000402_P

OK, I was sitting at the 2nd-day keynote down in New Orleans last month, watching Amir Netz do a demo on some PowerPivot goodies we can expect in the next release.

He was showing off a 2 Billion row model, and its amazing performance, and while that was eye-opening, something he said in passing caught my attention in a big way.

 

In an effort to explain that what we were seeing (split-second pivot performance against said 2 Billion rows), he said the following:

“Now look at this report!  It has 4 pivotcharts and 6 slicers, each of which issues 2 queries whenever I click a slicer, meaning this report is actually querying the 2 Billion rows twenty times!”

Each slicer issues 2 queries against the data source????  It was revelation time.  I kinda missed the next couple minutes of what Amir was saying, as I digested the implications for our work at Pivotstream.

And, I was kicking myself for forgetting this, because I had once known most of this in Redmond: 

Slicers can, if used improperly in a report, end up slowing a report down by a factor of 5, 10, or more.

Tip #0:  Don’t overthink this!

Hey, if your report is fast, don’t obsess.  Move on to something else.  It is not worth monkeying around with your set of slicers to trim half a second.  Remember, slicers are the difference between report consumers loving your work and dismissing it as just more nerdy junk.

When a client recently told us “Reports are dead, now we have Pivotstream!” there was no way we would have received that reaction without slicers.

But every now and then you will find yourself with a report that doesn’t operate quickly enough for your purposes, and slow response times can drain the value and utilization out of a report quickly (well, slowly I guess).

In those cases, one of the first places you should look is your usage of slicers.

Why do slicers issues 2 queries each?

Well, I won’t go into great detail here, because  1) I don’t know every detail   and 2) Vidas covered the tech details quite well here.

What I will give you, though, is an intuitive sense of what a slicer has to do.

First of all, it has to populate itself.  I don’t know how often it checks to see if something has changed in the underlying model – I’ll have to run some tests.  But it’s something to think about:

Tip #1:  Are you using a field from your measure table as a slicer?

Say you have a 2 million row table, and one of the columns is Date.  When you park that Date column on a slicer, you are demanding that the slicer populate itself from all of the distinct values of the Date column.  That doesn’t happen for free – the PowerPivot engine is gonna have to work pretty hard just to generate that distinct list, and it might have to do that every time you interact with the report (click a slicer, change a page filter, etc.)

So, this is yet another reason to consider using a separate, smaller table that just contains all unique dates, and then relating that back to your large table.  Then you can use the field from the smaller table in your slicer, and PowerPivot won’t have to burn so much time doing something unnecessary.

Cross-filtering:  the incredibly useful but sometimes crippling feature

You know that cool feature of slicers where, as you make selections, other slicers update to show which tiles are valid (clickable) in those conditions, and which tiles are not?

For instance, consider this example:

PowerPivot Slicers and Cross Filtering

OK, in week 7 (of all NFL seasons combined in this data set), there were 8 receiving touchdowns scored by players weighing 179 pounds or less.

Now check out the FullName slicer – I have not clicked anything in it myself, but all player names have been disabled except four.  That’s because those four players are the only ones under 179 pounds who caught TD’s in week 7.  Cool!

Of course, the identification of those four players doesn’t come for free.  To drive that point home, I’m just gonna add a second measure to the pivot:

PowerPivot Slicers and Cross Filtering Depends on Measures

Hey look!  Now there are eight players enabled.  That’s because there were four players who weighed less than 179 pounds and recorded receiving yards in Week 7.

Stated more generally, any player who has data for ANY of the measures in the pivot, in the conditions dictated by the other slicers, will be enabled.

What does this mean to us?  It means quite a bit, actually, once you understand how it works.

Under the hood:  what Excel does w/ slicers during a pivot update

I’m sure I will miss a detail or two but that’s not the point.  The point is to give you an intuitive understanding.

  1. Excel takes all of your slicer selections, plus the layout of your pivot (rows, columns, measures), bundles all of that up into a query, and sends it off to the PowerPivot engine
  2. The data comes back and Excel can populate the pivot with numbers at this point
  3. But now Excel still needs to determine, for each slicer, which tiles to enable.
  4. So for every single slicer, Excel does the following:
    1. Takes all of the selections from every other slicer, bundles those up into a query with the measures from the pivot…
    2. …And then adds the field of the current slicer to the query, unfiltered, as if it were on the Row Labels axis of a pivot
    3. Sends that whole query off to PowerPivot, waits for a reply
    4. When the data comes back, only the values of that slicer field for which at least one measure has data, will be in the result
    5. Excel ignores the measure values returned and uses the list of returned slicer field values to enable/disable tiles
    6. Excel then moves onto the next slicer and repeats steps 1-5

That’s a lot huh?

Turning that knowledge into action

There are many tips we can derive from that understanding.

Tip #2:  Reduce the number of slicers you use on a pivot

From the above, you can tell that the query being sent for a given slicer is absolutely on par with the query that is used to populate the body of the pivot with data.  In fact in some cases, that slicer query can be MORE time-consuming that the pivot itself!

So, if you remove a slicer from a report that your consumers rarely use, you can take a HUGE chunk off of the time it takes for the report to respond to user interaction.

Furthermore, every time you add a slicer to a report, you also make the queries issued for the other slicers more complex, so removing a slicer might make the other slicers’ queries speed up as well.

Tip #3:  Watch out for slicers with lots of tiles

I have not confirmed this but feel confident enough to share it anyway:  I’m pretty sure that slicers with long lists of tiles are more expensive to update than those with a small number of tiles.  Customer Email Address, for instance, is probably much more impactful on performance than Gender.

Tip #4:  Reduce number and complexity of measures

Just something to think about.  A measure that uses the FILTER function, for instance, is going to be a lot more time-consuming to crunch than a straight SUM.  And you might already be 100% cognizant of that.

The point here is that when you add one such complex measure to a pivot, you are not running that measure once per report interaction.  You are running it once for the pivot AND once for each slicer, so it adds up faster than you think.

Tip #5:  Use a report filter instead of a slicer

Traditional report filters don’t have this cross-filtering behavior, so they don’t impact performance in the ways outlined above.  You can use report filters without fear of slowing down your report.

But report filters are ugly, clumsy, and they scream Windows 3.1 – if report filters were so great, we never would have built slicers in the first place.

So I have a better suggestion…

Tip #6:  Disable cross-filtering for slicers that don’t need it

Here ya go.  Right click a slicer and click Slicer Settings.

In the dialog, you can uncheck the highlighted checkbox:

Slicer Settings Disable Cross Filtering Items with no Data

…and now you won’t get cross-filtering anymore.  All players will be enabled for example:

PowerPivot Slicers and Cross Filtering Disabled

Well, for a list like Players, that may not be the best idea.  There are thousands of them, and cross-filtering is REALLY useful for helping me narrow down the list and find the players I want.

Then again, having a field with thousands of values in it as a slicer runs contrary to Tip #3, so maybe it’s not such a good idea to have such a slicer in the first place.  Can you live without it?  It’s worth asking yourself.

Tip #7 Consider using other, shorter fields for slicers

Sometimes I like to use the same field in a slicer and in the pivot itself:

Same Field on Slicer and on Row Labels PowerPivot

This is just a lot more convenient for limiting the set of players (sometimes) than using the Row Labels filters.

But again, this can incur performance cost, especially for long lists, which is precisely where you may be tempted to “double park” a field like above.

The alternative that’s worth thinking about:  maybe a field that’s just the first letter of the player’s last name would be sufficient.  Or the team they play for.  Or whatever.  The idea is to reduce the number of tiles, per tip #3, and sometimes you can get what you want by using a different field.